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で進められている
1件のコメント
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を通し、そうでなければブロックする、という設定にできるのではと思う。ただ、かなり面倒そうではあるたとえば
curlが実行され、親のリストをさかのぼる途中で/usr/bin/trustedというプロセスに出会ったら、このcurl呼び出しを許可するよう宣言できるべきだ。そうすれば bash スクリプトの親が/usr/bin/trustedである限り、そのスクリプトからのcurl実行を許可できるこれが結局NixOSへ移るきっかけになった
以前アプリケーションファイアウォールを使っていたときは設定が多く、アップデートでパスが変わるとよく壊れ、新しいコンピュータへ移るたびにすべてやり直す必要があって、churn と無駄が大きかった
パッケージマネージャーと統合したら、そうした問題はなくなった。許可リストの初期設定さえ終えれば、nix 設定に新しいパッケージを追加するときに少し作業するだけで済む
nix 設定に許可リストを追加するのが面倒なら、次の再起動までだけ維持される一時的な許可リストを入れればよい。学習曲線は急で作業も多かったが、今では保守がとても楽だ
過剰に多数の接続を作る雑なアプリを見つけるのに向いている。Thunderbird、お前のことだ
気に入っているが、小さな不便もある。期限切れの一時ルールがインターフェースから削除されない、または表示されないため、時々 GUI を再起動して消す必要がある
Fedora では firewalld/firewall-config をいじり回すより、これを勧められる
dnfがアップデートのたびに大陸中を探し回るのはどう処理すればいいのだろう?https://news.ycombinator.com/item?id=41124755
そのまま許可することもできるが、そうしたくはない
Docker コンテナで API や Web サービスを動かすとき、こういう機能があるとよさそう
containerA: すべてのアウトバウンドトラフィックを許可containerB: クライアントに応答する場合を除き、アウトバウンドトラフィックをブロックcontainerC:updates.example.comにのみアクセス可能これは単にコンテナごとの iptables なのだろうか? 既存イメージに iptables を組み込むことはできそうだが、手間が多そう。あるいはホスト側で iptables によって処理する方式だろうか?
Android スマホにもこういうものはある? よいおすすめが知りたい
https://netguard.me
AFWall+ を長く使っていたが、アプリごとに Wi-Fi、セルラー、LAN を許可/ブロックする制御がきれいにできる。iptables/nftables のフロントエンドなので、好きなだけルールをカスタマイズできる: https://github.com/ukanth/afwall
Android 2+ から動作する
ルートがなければ Adguard のような VPN 方式のソリューションしか使えない
統計が必要なら GlassWire の Android 版もある。ベータしか使ったことがないので現在の状態は分からないが、確認する価値はある
"Rethink: DNS + Firewall + VPN"アプリに似た機能がある上で言及されていた NetGuard からこれに乗り換えた
Arch と OpenSUSE のパッケージもあるとよい
opensnitchがあり、AUR にはopensnitch-ebpf-moduleがあるUFW のようなものと比べるとどうなのか? 核心は進行中のアクティビティを見るUIなのか気になる
任意のアプリがテレメトリ呼び出しのようなことをすると、この実行ファイルからこのアドレスへの接続だけを許可するか、このアドレスは常に許可するか、といった形で細かくホワイト/グレーリストを設定でき、1回だけ、15秒間、再起動までといった期間オプションもある
使っていて信頼しているアプリを許可リストに入れる初期のハードルさえ越えればかなりよく、アプリやゲームが何をしているのか知らなかった部分をよく見せてくれる
これを macOS に移植する計画はあるのだろうか? しばらく Little Snitch を使っていたが、支払いとは無関係の理由でオープンソースのほうを好む
何度か断続的に使おうとしたが、ランダムクラッシュが多すぎて、使うのはかなり難しかった