OpenSnitch GNU/Linux 인터랙티브 애플리케이션 방화벽
(github.com/evilsocket)- OpenSnitch는 GNU/Linux용 애플리케이션 방화벽으로, 애플리케이션의 외부 연결을 대화형으로 필터링하는 데 초점을 둠
- 시스템 전반에서 광고·트래커·악성코드 도메인을 차단할 수 있고, GUI에서 nftables 기반 시스템 방화벽도 설정할 수 있음
- GUI는 입력 정책 설정, 인바운드 서비스 허용 같은 시스템 규칙 구성을 지원하며, 여러 노드를 중앙에서 관리할 수 있음
- 설치는 deb/rpm 패키지를 내려받아
apt또는dnf로 설치한 뒤opensnitch-ui를 실행하거나 애플리케이션 메뉴에서 GUI를 여는 방식임 - 예상하지 못한 연결을 가로채는 사례를 공유하는 Show and tell 토론 공간과 SIEM 연동 기능을 제공해 운영 환경에서 연결 감시에 활용할 수 있음
OpenSnitch가 하는 일
- OpenSnitch는 GNU/Linux 애플리케이션 방화벽임
- 핵심 기능은 애플리케이션의 아웃바운드 연결을 대화형으로 필터링하는 것임
- 시스템 전체에서 광고, 트래커, 악성코드 도메인 차단을 지원함
방화벽과 노드 관리 기능
- GUI에서 시스템 방화벽 설정을 구성할 수 있음
- nftables 기반 설정을 다룸
- 입력 정책 구성, 인바운드 서비스 허용 등을 설정할 수 있음
- 중앙 GUI에서 여러 노드를 관리할 수 있음
- SIEM 연동을 지원함
다운로드와 설치
- deb/rpm 패키지는 GitHub Releases에서 내려받을 수 있음
- deb 패키지 설치:
sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
- rpm 패키지 설치:
sudo dnf install opensnitch*.rpm
- 설치 후
opensnitch-ui를 실행하거나 애플리케이션 메뉴에서 GUI를 시작함 - 자세한 설치 정보는 문서를 참고함
사용 사례와 참여
- OpenSnitch가 예상하지 못한 연결을 가로채는 예시는 Show and tell 토론에 모여 있음
- 예상하지 못한 연결을 발견하면 새 토론으로 제출할 수 있음
프로젝트 정보
- OpenSnitch는 GPL3 라이선스를 사용함
- 후원은 GitHub 저장소 오른쪽의 Sponsor this project 섹션에서 가능함
- 현재 유지관리자는 master 브랜치 커밋 기록에서 확인할 수 있음
- 기여자 목록은 contributors 그래프에서 볼 수 있음
- 번역은 Weblate에서 진행됨
댓글과 토론
Hacker News 의견들
-
OpenSnitch를 대화형 방화벽으로 많이 써보려 했지만, OpenSnitch 잘못이라기보다 해결 가능한지조차 모르겠는 문제가 있음
예를 들어 터미널에서curl을 실행하면 매번 허용 여부를 판단하거나, 영구적으로 허용 목록에 넣어야 함
그런데curl이나wget같은 범용 도구를 허용해버리면, 침해된 머신의 악성코드도 그 도구를 이용해 방화벽 알림 없이 인터넷에 나갈 수 있어 문이 활짝 열림- 서브도메인 와일드카드나 서브넷을 쓰면 꽤 빨리 안정적인 규칙 세트가 쌓이고, 이후에는 새 엔드포인트 요청만 가끔 검토하면 됨
새 접근이 생기면 허용 여부를 묻는다는 안심감이 초기 번거로움을 감수할 만하고, 습관이 들면 관리도 꽤 쉬워짐
만료 규칙도 자주 씀. 예를 들어 설치 프로그램을 신뢰해서 잠시 자유롭게 두고 싶으면 실행 파일에 대해 가까운 미래에 만료되는 규칙을 열어둠. 옵션은 영구, 재부팅 전까지, 다음 30초, 다음 5분 등이고, 엔드포인트가 많은 작업도 훨씬 단순해지며 영구적인 구멍을 남기지 않음 dev사용자에게는 모든curl/wget트래픽을 허용하고,normal사용자에게서는 계속 감지하도록 할 수도 있어 보임
개발 작업은su -c curl … dev로 실행하는 식임
악성 프로그램이 일반 사용자 공간에서 실행 중이라면 앱 방화벽이curl과wget사용을 적절히 잡아낼 수 있음
매번 비밀번호를 입력하는 건 귀찮으니 PAM을 YubiKey나 생체 인증으로 설정할 수도 있고, 이 사용자는 로그인 불가이며 비밀번호도 없게 해야 함- 이건 좀 이상하게 들림. 정말 걱정된다면
curl이나wget은 이름을 바꿀 수도 있음
모바일에서 애플리케이션 수준 방화벽을 쓰지만, 프로그램 이름을 허용 목록에 넣는 게 아니라 특정 프로그램이 특정 도메인/IP 주소에 접근하는 것을 허용함
경험상 프로그램이나 악성코드의 외부 통신을 막는 가장 쉬운 방법은 DNS 접근 차단임. 수십 년간 그렇게 해왔고 아직도 완벽하게 동작함. 외부 통신을 하는 프로그램/악성코드의 “99%”는 하드코딩된 IP가 아니라 DNS에 의존함
DNS가 필요 없는 드문 프로그램/악성코드도 감지하기 쉽고, DNS에서는 특정 도메인만 허용함. 요즘은 필요한 IP 주소가 든 로컬 zone 파일도 쓰지 않고, 전달 프록시가 도메인→IP 매핑을 처리함. 프록시가 읽는 허용 목록은 zone 파일 비슷하지만 더 단순한 텍스트 파일임 - 부모 명령이 신뢰된 명령, 예를 들어 사용자가 소유한
bash/zsh라면curl을 통과시키고 아니면 막는 식으로 설정할 수 있지 않을까 싶음. 다만 꽤 번거로워 보이긴 함 - 그런 문제는 해결 가능함. 비슷한 방식으로 동작하는 일부 대형 EDR은 차단할 실행 파일의 부모/자식 관계를 선언할 수 있음
예를 들어curl이 실행됐고 부모 목록을 거슬러 올라가다/usr/bin/trusted라는 프로세스를 만나면 이curl호출을 허용하도록 선언할 수 있어야 함. 그러면 bash 스크립트의 부모가/usr/bin/trusted인 한, 그 스크립트에서curl실행을 허용할 수 있음
- 서브도메인 와일드카드나 서브넷을 쓰면 꽤 빨리 안정적인 규칙 세트가 쌓이고, 이후에는 새 엔드포인트 요청만 가끔 검토하면 됨
-
이게 결국 NixOS로 넘어가게 만든 이유였음
예전에 애플리케이션 방화벽을 쓸 때는 설정이 많았고, 업데이트로 경로가 바뀌면 자주 깨졌으며, 새 컴퓨터로 옮길 때마다 전부 다시 해야 해서 churn과 낭비가 컸음
패키지 관리자와 통합하니 그런 문제가 없어졌음. 허용 목록 초기 설정만 끝내면, nix 설정에 새 패키지를 추가할 때 약간의 작업만 하면 됨
nix 설정에 허용 목록을 추가하기 귀찮으면 다음 재부팅까지만 유지되는 임시 허용 목록을 넣으면 됨. 학습 곡선은 가파르고 작업도 많았지만, 이제는 유지보수가 아주 쉬움- search.nixos.org/options에 있는 OpenSnitch Nix 옵션으로 이걸 구현한 건지 궁금함
-
과도하게 많은 연결을 만드는 엉성한 앱을 잡아내는 데 좋음. Thunderbird, 너 말이야
마음에 들지만 작은 불편도 있음. 만료된 임시 규칙이 인터페이스에서 삭제되거나 표시되지 않아서, 가끔 GUI를 재시작해 지워야 함- 이런 말 하기 그렇지만, PR은 분명 환영받을 것 같음. 물론 나도 정작 시간이 거의 없음
-
Fedora에서는 firewalld/firewall-config를 만지작거리는 것보다 이걸 추천할 수 있음
dnf가 업데이트할 때마다 대륙 곳곳을 뒤지는 건 어떻게 처리해야 할까?
https://news.ycombinator.com/item?id=41124755
그냥 허용할 수도 있지만, 그러고 싶지는 않음
-
Docker 컨테이너에서 API나 웹 서비스를 돌릴 때 이런 식의 기능이 있으면 좋겠음
containerA: 모든 아웃바운드 트래픽 허용
containerB: 클라이언트에 응답하는 경우를 제외하고 아웃바운드 트래픽 차단
containerC:updates.example.com에만 접근 가능
이건 그냥 컨테이너별 iptables인가? 기존 이미지에 iptables를 끼워 넣을 수는 있겠지만 일이 많아 보임. 아니면 호스트에서 iptables로 처리하는 방식일까?- netfilter, 즉 iptables가 프런트엔드로 쓰는 것은 커널 하위 시스템이라 호스트의 모든 컨테이너에 전역적으로 적용된다는 점을 덧붙이고 싶음
-
Android 폰에도 이런 게 있을까? 괜찮은 추천이 궁금함
- NetGuard가 있음. 다만 편의 기능 대부분은 소액 결제 뒤에 있음
https://netguard.me - GrapheneOS는 적어도 특정 앱의 인터넷 트래픽 차단은 가능함. 다만 포트 범위나 특정 도메인 단위로는 못 함
- 안타깝게도 진짜 방화벽은 모두 루트 권한이 필요함
AFWall+를 오래 썼는데, 앱마다 Wi-Fi, 셀룰러, LAN을 허용하거나 차단하는 제어가 깔끔함. iptables/nftables 프런트엔드라 원하는 만큼 규칙을 커스터마이즈할 수 있음: https://github.com/ukanth/afwall
Android 2+부터 동작함
루트가 없으면 Adguard 같은 VPN 방식 솔루션만 가능함
통계가 필요하면 GlassWire의 Android 버전도 있음. 베타만 써봐서 현재 상태는 모르지만 확인해볼 만함 "Rethink: DNS + Firewall + VPN"앱에 비슷한 기능이 있음- AFWall+
위에서 언급된 NetGuard에서 이걸로 갈아탔음
- NetGuard가 있음. 다만 편의 기능 대부분은 소액 결제 뒤에 있음
-
Arch와 OpenSUSE 패키지도 있으면 좋겠음
- Arch Linux에는 공식 패키지가 있음. 다만 어떤 이유인지 eBPF 모듈은 포함하지 않아서 AUR에서 별도로 받아야 함
- Arch의 extra 저장소에
opensnitch가 있고, AUR에는opensnitch-ebpf-module이 있음
-
UFW 같은 것과 비교하면 어떤가? 핵심은 진행 중인 활동을 보는 UI인지 궁금함
- OpenSnitch는 네트워크 활동이 생기면 물어봄
임의의 앱이 텔레메트리 호출 같은 걸 하면, 이 실행 파일에서 이 주소로의 연결만 허용할지, 이 주소는 항상 허용할지 같은 식으로 세밀하게 화이트/그레이리스트를 정할 수 있고, 한 번만, 15초 동안, 재부팅 전까지 같은 기간 옵션도 있음
쓰고 신뢰하는 앱들을 허용 목록에 넣는 초기 장벽만 넘기면 꽤 좋고, 앱이나 게임이 뭘 하는지 몰랐던 부분을 잘 보여줌 - 내가 아는 한 UFW는 애플리케이션 방화벽이 아니라 시스템 전체 포트 번호만 차단/허용함
- OpenSnitch는 네트워크 활동이 생기면 물어봄
-
이걸 macOS로 포팅할 계획이 있을까? 한동안 Little Snitch를 썼는데, 결제와 무관한 이유로 오픈소스를 더 선호함
- LuLu를 써보면 됨
-
여러 번 간헐적으로 써보려 했지만, 무작위 크래시가 너무 많이 나서 사용하기가 꽤 어려웠음