3 điểm bởi GN⁺ 2024-08-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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 apt hoặc dnf, sau đó chạy opensnitch-ui hoặ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ì

Tính năng tường lửa và quản lý node

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-ui hoặ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

Thông tin dự án

1 bình luận

 
GN⁺ 2024-08-11
Ý 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 curl trong 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ễn
    Nhưng nếu cho phép các công cụ đa dụng như curl hay wget, 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ở toang

    • Nếu dùng wildcard cho subdomain hoặc subnet, bạn sẽ khá nhanh chóng tích lũy được một bộ quy tắc ổn định, rồi sau đó chỉ thỉnh thoảng cần xem xét các yêu cầu endpoint mới
      Cả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
    • Có vẻ cũng có thể cho phép toàn bộ lưu lượng curl/wget đối với người dùng dev, còn với người dùng normal thì vẫn tiếp tục phát hiện
      Công việc phát triển có thể chạy theo kiểu su -c curl … dev
      Nế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 curlwget một cách phù hợp
      Việ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
    • Nghe hơi kỳ. Nếu thật sự lo thì cũng có thể đổi tên curl hoặc wget
      Tô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
    • Tôi nghĩ có thể cấu hình kiểu nếu lệnh cha là lệnh đáng tin cậy, ví dụ bash/zsh do người dùng sở hữu, thì cho curl đi qua, còn không thì chặn. Dù vậy trông có vẻ khá rườm rà
    • Vấn đề như vậy có thể giải quyết được. Một số EDR lớn hoạt động theo cách tương tự có thể khai báo quan hệ cha/con của file thực thi cần chặn
      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ọi curl này. Khi đó, miễn là cha của script bash là /usr/bin/trusted, việc chạy curl trong 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ễ

    • Tôi tò mò không biết việc này có được triển khai bằng tùy chọn OpenSnitch Nix trên search.nixos.org/options không
  • 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

    • Nói thế này hơi ngại, nhưng PR chắc chắn sẽ được hoan nghênh. Tất nhiên bản thân tôi cũng gần như không có thời gian
  • 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

  • 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 outbound
    containerB: chặn lưu lượng outbound, trừ trường hợp phản hồi client
    containerC: chỉ có thể truy cập updates.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?

    • Tôi muốn bổ sung rằng netfilter, tức thứ mà iptables dùng làm frontend, là phân hệ kernel, nên nó áp dụng toàn cục cho mọi container trên host
  • Android phone có cái nào như vậy không? Muốn nghe đề xuất ổn

    • NetGuard. Tuy nhiên phần lớn tính năng tiện lợi nằm sau khoản mua nhỏ
      https://netguard.me
    • GrapheneOS ít nhất có thể chặn lưu lượng Internet của từng ứng dụng cụ thể. Nhưng không làm được theo dải port hoặc domain cụ thể
    • Đáng tiếc là mọi tường lửa thật sự đều cần quyền root
      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
    • Ứng dụng "Rethink: DNS + Firewall + VPN" có chức năng tương tự
    • AFWall+
      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

    • Arch Linux có gói chính thức. Tuy nhiên vì lý do nào đó module eBPF không được bao gồm, nên phải lấy riêng từ AUR
    • Trong kho extra của Arch có opensnitch, còn AUR có opensnitch-ebpf-module
  • So 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

    • OpenSnitch sẽ hỏi khi có hoạt động mạ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
    • Theo tôi biết, UFW không phải tường lửa ứng dụng mà chỉ chặn/cho phép số port trên toàn hệ thống
  • 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

    • Thử dùng LuLu xem
  • 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