3 ポイント 投稿者 GN⁺ 2024-08-11 | 1件のコメント | WhatsAppで共有
  • OpenSnitchはGNU/Linux向けのアプリケーションファイアウォールで、アプリケーションの外部接続を対話的にフィルタリングすることに重点を置いている
  • システム全体で広告・トラッカー・マルウェアドメインをブロックでき、GUIからnftablesベースのシステムファイアウォールも設定できる
  • GUIは入力ポリシーの設定、インバウンドサービスの許可といったシステムルールの構成をサポートし、複数ノードを中央管理できる
  • インストールはdeb/rpmパッケージをダウンロードしてaptまたはdnfで導入した後、opensnitch-uiを実行するかアプリケーションメニューからGUIを開く方式
  • 予期しない接続を捕捉した事例を共有するShow and tellの議論スペースとSIEM連携機能を提供し、運用環境での接続監視に活用できる

OpenSnitchができること

ファイアウォールとノード管理機能

ダウンロードとインストール

  • deb/rpmパッケージはGitHub Releasesからダウンロードできる
  • debパッケージのインストール:
    • sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
  • rpmパッケージのインストール:
    • sudo dnf install opensnitch*.rpm
  • インストール後にopensnitch-uiを実行するか、アプリケーションメニューからGUIを起動する
  • 詳細なインストール情報はドキュメントを参照

利用例と参加

プロジェクト情報

1件のコメント

 
GN⁺ 2024-08-11
Hacker News のコメント
  • OpenSnitch を対話型ファイアウォールとして本格的に使おうと何度も試したが、OpenSnitch のせいというより、そもそも解決可能なのかも分からない問題がある
    たとえばターミナルで curl を実行すると、毎回許可するか判断するか、恒久的に許可リストへ入れる必要がある
    ところが curlwget のような汎用ツールを許可してしまうと、侵害されたマシン上のマルウェアもそのツールを使って、ファイアウォールの通知なしにインターネットへ出ていけるので、扉が全開になる

    • サブドメインのワイルドカードやサブネットを使えば、かなり早く安定したルールセットが蓄積され、その後は新しいエンドポイント要求をたまに確認するだけで済む
      新しいアクセスが発生したら許可するか聞いてくれるという安心感は、初期の手間をかける価値があるし、慣れれば管理もかなり楽になる
      期限付きルールもよく使う。たとえばインストーラーを信頼して一時的に自由にさせたい場合、実行ファイルに対して近い将来に期限切れになるルールを開けておく。オプションは恒久、再起動まで、次の30秒、次の5分などで、エンドポイントが多い作業もずっと単純になり、恒久的な穴を残さない
    • dev ユーザーにはすべての curl/wget トラフィックを許可し、normal ユーザーでは引き続き検知するようにもできそう
      開発作業は su -c curl … dev で実行するような形
      悪意あるプログラムが通常ユーザー空間で実行されているなら、アプリケーションファイアウォールが curlwget の使用を適切に捕捉できる
      毎回パスワードを入力するのは面倒なので、PAM を YubiKey や生体認証に設定することもできるし、このユーザーはログイン不可でパスワードもないようにすべき
    • これは少し変に聞こえる。本当に心配なら curlwget は名前を変えることもできる
      モバイルではアプリケーションレベルのファイアウォールを使っているが、プログラム名を許可リストに入れるのではなく、特定のプログラムが特定のドメイン/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 や Web サービスを動かすとき、こういう機能があるとよさそう
    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 からこれに乗り換えた
  • Arch と OpenSUSE のパッケージもあるとよい

    • Arch Linux には公式パッケージがある。ただし何らかの理由で eBPF モジュールは含まれておらず、AUR から別途入手する必要がある
    • Arch の extra リポジトリに opensnitch があり、AUR には opensnitch-ebpf-module がある
  • UFW のようなものと比べるとどうなのか? 核心は進行中のアクティビティを見るUIなのか気になる

    • OpenSnitch はネットワーク活動が発生すると尋ねてくる
      任意のアプリがテレメトリ呼び出しのようなことをすると、この実行ファイルからこのアドレスへの接続だけを許可するか、このアドレスは常に許可するか、といった形で細かくホワイト/グレーリストを設定でき、1回だけ、15秒間、再起動までといった期間オプションもある
      使っていて信頼しているアプリを許可リストに入れる初期のハードルさえ越えればかなりよく、アプリやゲームが何をしているのか知らなかった部分をよく見せてくれる
    • 私の知る限り UFW はアプリケーションファイアウォールではなく、システム全体のポート番号だけをブロック/許可する
  • これを macOS に移植する計画はあるのだろうか? しばらく Little Snitch を使っていたが、支払いとは無関係の理由でオープンソースのほうを好む

    • LuLu を試すとよい
  • 何度か断続的に使おうとしたが、ランダムクラッシュが多すぎて、使うのはかなり難しかった