OpenSnitch, tường lửa ứng dụng tương tác cho GNU/Linux
(github.com/evilsocket)- OpenSnitch là tường lửa ứng dụng dành cho GNU/Linux, tập trung vào việc lọc tương tác các kết nối ra ngoài của ứng dụng
- Có thể chặn miền quảng cáo, trình theo dõi và mã độc trên toàn hệ thống, đồng thời cấu hình tường lửa hệ thống dựa trên nftables trong GUI
- GUI hỗ trợ cấu hình quy tắc hệ thống như thiết lập chính sách đầu vào, cho phép dịch vụ inbound, và có thể quản lý tập trung nhiều node
- Cách cài đặt là tải gói deb/rpm rồi cài bằng
apthoặcdnf, sau đó chạyopensnitch-uihoặc mở GUI từ menu ứng dụng - Cung cấp không gian thảo luận Show and tell để chia sẻ các trường hợp chặn được kết nối ngoài dự kiến, cùng tính năng tích hợp SIEM để dùng cho giám sát kết nối trong môi trường vận hành
OpenSnitch làm gì
- OpenSnitch là tường lửa ứng dụng GNU/Linux
- Chức năng cốt lõi là lọc tương tác các kết nối outbound của ứng dụng
- Hỗ trợ chặn miền quảng cáo, trình theo dõi và mã độc trên toàn hệ thống
Tính năng tường lửa và quản lý node
- Có thể cấu hình thiết lập tường lửa hệ thống trong GUI
- Xử lý các thiết lập dựa trên nftables
- Có thể thiết lập cấu hình chính sách đầu vào, cho phép dịch vụ inbound, v.v.
- Có thể quản lý nhiều node từ GUI trung tâm
- Hỗ trợ tích hợp SIEM
Tải xuống và cài đặt
- Có thể tải các gói deb/rpm từ GitHub Releases
- Cài đặt gói deb:
sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
- Cài đặt gói rpm:
sudo dnf install opensnitch*.rpm
- Sau khi cài đặt, chạy
opensnitch-uihoặc khởi động GUI từ menu ứng dụng - Xem tài liệu để biết thông tin cài đặt chi tiết
Trường hợp sử dụng và tham gia
- Các ví dụ OpenSnitch chặn được những kết nối ngoài dự kiến được tập hợp trong thảo luận Show and tell
- Nếu phát hiện kết nối ngoài dự kiến, có thể gửi dưới dạng thảo luận mới
Thông tin dự án
- OpenSnitch sử dụng giấy phép GPL3
- Có thể tài trợ trong mục Sponsor this project ở bên phải kho GitHub
- Có thể kiểm tra người bảo trì hiện tại trong lịch sử commit của nhánh master
- Có thể xem danh sách người đóng góp trong biểu đồ contributors
- Việc dịch thuật được thực hiện trên Weblate
1 bình luận
Ý kiến trên Hacker News
Tôi đã nhiều lần muốn dùng OpenSnitch như một tường lửa tương tác, nhưng có một vấn đề mà tôi thậm chí không chắc có giải quyết được không, và không hẳn là lỗi của OpenSnitch
Ví dụ, nếu chạy
curltrong terminal thì lần nào cũng phải quyết định có cho phép hay không, hoặc phải đưa vào danh sách cho phép vĩnh viễnNhưng nếu cho phép các công cụ đa dụng như
curlhaywget, thì mã độc trên một máy đã bị xâm nhập cũng có thể dùng các công cụ đó để ra Internet mà không có cảnh báo tường lửa, tức là cửa mở toangCảm giác yên tâm rằng khi có truy cập mới thì hệ thống sẽ hỏi có cho phép hay không khiến sự phiền phức ban đầu đáng để chịu, và khi đã quen thì việc quản lý cũng khá dễ
Tôi cũng thường dùng quy tắc hết hạn. Ví dụ nếu tin tưởng một trình cài đặt và muốn tạm thời để nó tự do, tôi mở một quy tắc cho file thực thi sẽ hết hạn trong tương lai gần. Các tùy chọn gồm vĩnh viễn, cho đến khi khởi động lại, 30 giây tiếp theo, 5 phút tiếp theo, v.v.; những tác vụ có nhiều endpoint cũng đơn giản hơn nhiều và không để lại lỗ hổng vĩnh viễn
curl/wgetđối với người dùngdev, còn với người dùngnormalthì vẫn tiếp tục phát hiệnCông việc phát triển có thể chạy theo kiểu
su -c curl … devNếu chương trình độc hại đang chạy trong không gian người dùng thông thường, tường lửa ứng dụng có thể bắt được việc dùng
curlvàwgetmột cách phù hợpViệc nhập mật khẩu mỗi lần thì phiền, nên cũng có thể cấu hình PAM với YubiKey hoặc xác thực sinh trắc học; người dùng này nên không thể đăng nhập và không có mật khẩu
curlhoặcwgetTôi dùng tường lửa cấp ứng dụng trên di động, nhưng không đưa tên chương trình vào danh sách cho phép; thay vào đó là cho phép một chương trình cụ thể truy cập một domain/địa chỉ IP cụ thể
Theo kinh nghiệm, cách dễ nhất để chặn chương trình hoặc mã độc liên lạc ra ngoài là chặn truy cập DNS. Tôi đã làm vậy suốt hàng chục năm và đến giờ vẫn hoạt động hoàn hảo. “99%” chương trình/mã độc liên lạc ra ngoài dựa vào DNS chứ không phải IP được hard-code
Những chương trình/mã độc hiếm hoi không cần DNS cũng dễ phát hiện, còn trong DNS thì chỉ cho phép các domain cụ thể. Ngày nay tôi cũng không dùng file zone cục bộ chứa các địa chỉ IP cần thiết nữa; proxy chuyển tiếp xử lý ánh xạ domain→IP. Danh sách cho phép mà proxy đọc giống file zone nhưng là file văn bản đơn giản hơn
bash/zshdo người dùng sở hữu, thì chocurlđi qua, còn không thì chặn. Dù vậy trông có vẻ khá rườm ràVí dụ, nếu
curlđược chạy và khi lần ngược danh sách tiến trình cha gặp một tiến trình/usr/bin/trusted, thì phải có thể khai báo cho phép lần gọicurlnày. Khi đó, miễn là cha của script bash là/usr/bin/trusted, việc chạycurltrong script đó có thể được cho phépĐây rốt cuộc là lý do khiến tôi chuyển sang NixOS
Trước đây khi dùng tường lửa ứng dụng, cấu hình rất nhiều; khi cập nhật làm đổi đường dẫn thì thường bị hỏng; mỗi lần chuyển sang máy tính mới lại phải làm lại tất cả, gây nhiều churn và lãng phí
Tích hợp với trình quản lý gói thì những vấn đề đó biến mất. Khi đã thiết lập ban đầu danh sách cho phép, mỗi lần thêm gói mới vào cấu hình nix chỉ cần thêm chút công việc
Nếu lười thêm danh sách cho phép vào cấu hình nix, có thể thêm danh sách cho phép tạm thời chỉ giữ đến lần khởi động lại tiếp theo. Đường học khá dốc và cũng tốn nhiều công, nhưng giờ thì bảo trì rất dễ
Rất hữu ích để phát hiện các ứng dụng cẩu thả tạo quá nhiều kết nối. Thunderbird, đang nói cậu đấy
Tôi thích nó, nhưng cũng có vài bất tiện nhỏ. Các quy tắc tạm thời đã hết hạn không bị xóa hoặc không được ẩn trong giao diện, nên thỉnh thoảng phải khởi động lại GUI để dọn chúng
Trên Fedora, tôi có thể khuyên dùng cái này hơn là loay hoay với firewalld/firewall-config
dnfmỗi lần cập nhật lại lục lọi khắp các châu lục?https://news.ycombinator.com/item?id=41124755
Có thể cứ cho phép, nhưng tôi không muốn vậy
Tôi ước có chức năng kiểu này khi chạy API hoặc dịch vụ web trong container Docker
containerA: cho phép toàn bộ lưu lượng outboundcontainerB: chặn lưu lượng outbound, trừ trường hợp phản hồi clientcontainerC: chỉ có thể truy cậpupdates.example.comĐây có phải chỉ là iptables theo từng container không? Có thể nhét iptables vào image hiện có, nhưng trông có vẻ nhiều việc. Hay là xử lý bằng iptables trên host?
Android phone có cái nào như vậy không? Muốn nghe đề xuất ổn
https://netguard.me
Tôi đã dùng AFWall+ lâu rồi; khả năng điều khiển cho phép hoặc chặn Wi‑Fi, di động, LAN theo từng ứng dụng rất gọn gàng. Vì là frontend cho iptables/nftables nên có thể tùy chỉnh quy tắc tùy ý: https://github.com/ukanth/afwall
Hoạt động từ Android 2+
Nếu không có root thì chỉ có các giải pháp kiểu VPN như Adguard
Nếu cần thống kê thì cũng có bản Android của GlassWire. Tôi mới chỉ dùng bản beta nên không biết tình trạng hiện tại, nhưng đáng để thử xem
"Rethink: DNS + Firewall + VPN"có chức năng tương tựTôi đã chuyển từ NetGuard được nhắc ở trên sang cái này
Giá mà cũng có gói cho Arch và OpenSUSE
opensnitch, còn AUR cóopensnitch-ebpf-moduleSo với thứ như UFW thì thế nào? Tôi tò mò điểm cốt lõi có phải là UI để xem hoạt động đang diễn ra không
Nếu một ứng dụng bất kỳ thực hiện cuộc gọi telemetry chẳng hạn, bạn có thể white/greylist rất chi tiết, như chỉ cho phép kết nối từ file thực thi này tới địa chỉ này, hay luôn cho phép địa chỉ này; cũng có các tùy chọn thời hạn như chỉ một lần, trong 15 giây, cho đến khi khởi động lại
Khi vượt qua rào cản ban đầu là đưa các ứng dụng bạn dùng và tin tưởng vào danh sách cho phép, nó khá tốt, và cho thấy rõ những điều bạn không biết ứng dụng hoặc game đang làm
Có kế hoạch port cái này sang macOS không? Tôi từng dùng Little Snitch một thời gian, nhưng vì những lý do không liên quan đến thanh toán, tôi thích mã nguồn mở hơn
Tôi đã thử dùng nhiều lần một cách gián đoạn, nhưng có quá nhiều crash ngẫu nhiên nên khá khó sử dụng