各プログラムのインターネットアクセスを制御する方法


60

ソフトウェアを使用して、どのプログラムがインターネットに接続するかを制御したいと思います。この動作は「ファイアウォール」という言葉に関連していることは知っていますが、誰かがパーソナルファイアウォールを要求すると、一部のLinuxユーザーは非常に怒っています。そのようなプログラムを要求してあなたを怒らせたくありません。
Windowsでパーソナルファイアウォールが約束する「ポートを保護する」などはしたくありません。私は調べましたiptablesが、それは私の要件に合いません。

ここで優れた答え(「ワインアプリケーションのインターネットアクセスをブロックする方法」)を見つけましたが、これを設定するのは非常に不快です。

インターネットにアクセスできるかどうかを各プログラムに尋ねるソフトウェアはありますか?


Macには、これを行うリトルスニッチと呼ばれるソフトウェアがあります。Windowsバージョンもあると思います
...-Alvar

回答:


6

ドイツ語のUbuntuフォーラム(英語に翻訳されたGoogle)にPerlスクリプトがあります。私はそれを試したことはなく、スクリプトを詳しく調べませんでしたが、多分それはあなたのために動作します。説明はドイツ語のみであるため、翻訳サービス(Google翻訳など。上記参照)が必要になる場合があります。


それを見ていきます。おもしろいし、正しいツールかもしれません。残念ながら、GUIはありませんが、私を止めることはできません:)
guerda

35

まだこの種のアプリケーションを探している場合、私は現在そのアプリケーションを正確に開発しています:http : //douaneapp.com/ https://gitlab.com/douaneapp/Douane

私のアプリケーションは未知のアプリケーションをブロックし(承認されたアプリケーションの新しいバージョンはブロックされます)、トラフィックを許可するか拒否するかを尋ねます。

ウェブサイトを見てください;-)

スクリーンショット


クール!私もPPAを見ましたが、そこにアプリケーションが作成されているにもかかわらずそこにパッケージはありません。また、読みやすいサイト名に解決されたIPを表示できるのだろうか?そして、コンパイルの指示に従います。そこでubuntu depパッケージに関する多くのヒントを見ました。checkinstallを使用して.debパッケージのローカルコピーを作成し、アップグレードを簡単に管理(削除/インストール)します。checkinstallを使用して配布可能ファイルを作成することもできます。
アクエリアスパワー14年

Github(github.com/Douane/Douane/issues)で機能リクエストを開くことができます:)
ZedTuX 14年

2
ええ、それはまさに私が必要なもののようです!! しかし、Ubuntuにインストールするパッケージが見つかりません。
アゼラファティ

まだUbuntu用のパッケージではありませんか?
アンワー

1
Douaneapp.comが帰ってきた!:)
ZedTuX

26

問題を解決する便利な解決策を見つけました。インターネットの使用を決して許可されないグループを作成し、このグループのメンバーとしてプログラムを開始します。

  1. グループを作成しますno-internet。このグループに参加しないでください

    sudo addgroup no-internet
    
  2. グループに属するすべてのプロセスno-internetがネットワークを使用できないようにするルールをiptablesに追加します(ip6tablesIPv6トラフィックも防止するために使用します)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. sudo -g no-internet YOURCOMMAND代わりに実行しますYOURCOMMAND

sudoを使用するラッパースクリプトを簡単に作成できます。以下を追加することにより、パスワードプロンプトを取り除くことができます

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

または、 sudo visudo

iptables-saveおよびiptables-restoreを使用して、ファイアウォールルールを永続化します。


1
あなたのガイドを試してみましたが、sudo -g no-internet firefoxデフォルトよりも速く接続します。機能しません。
ケン

1
@kennここでうまくいくとしか言えません。ルールを作成するときに何か間違ったことをしていると思います。ルールを保存しない、スクリプトを実行可能にするなどしない。
ティム

私は再起動し、運で再びルール上適用
KENN

1
firefoxを使用しても、私にとっては完璧に機能しました。ありがとうございました!
コスタノス

1
Ubuntu 19.04では、これも私には機能しないようです。再起動の間に変更を保存するには、iptables-persistentをインストールする必要がありました。(したがって、上記のソリューションに追加することをお勧めします)。ただし、sudo -g no-internet firefoxは、Firefoxによるインターネットへのアクセスを制限しません。概念的には、このソリューションは機能するはずです。見落とされている根本的なものはありますか?たとえば、この作業を行うにはipv4とipv6の両方をセットアップする必要がありますか?
PJシン

5

Ubuntuには既にファイアウォールがありますがufw、デフォルトでは無効になっています。コマンドラインまたはそのフロントエンドであるgufwで有効にして使用できます。gufwは、Ubuntu Software Centreから直接インストールできます。

特定のアプリケーションへのインターネットアクセスをブロックする必要がある場合は、LeopardFlowerを試すことができます。これはまだベータ版であり、Ubuntuソフトウェアセンターでは利用できません。


4

別のユーザーでプログラムを実行すると、自分ではなくそのユーザーの設定ファイルが使用されます。

ファイアウォールルールの変更を必要とせず、変更sudoされた環境で同じユーザーの下で(を介して)実行されるソリューションmy_usermy_app次のとおりです。ユーザーと実行するアプリは次のとおりです。

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

詳細についてはman unshareこの回答を参照してください。

Linux GUIファイアウォール

GUIファイアウォールを探している場合、OpenSnitchで良い結果が得られています。ubuntuリポジトリにはまだ存在せず、実稼働レベルとは呼びませんが、githubページのビルド手順に従うことでうまくいきました。


3

@psusi:人々が悪い情報や役に立たない情報に手を出さないことを本当に願っています。IPTablesではこれを行うことができますので、私はそれを「無謀」とはほとんど考えません。ユースケースを理解せずに「NO」と言うだけでは、やや気になりません。 http://www.debian-administration.org/article/120/Application_level_firewalling

bodhi.zazenの編集

注-このオプションは2005年にIPTABLESから削除され、この回答が投稿される8年前に削除されました

参照 -http ://www.spinics.net/lists/netfilter/msg49716.html

コミット34b4a4a624bafe089107966a6c56d2a1aca026d4著者:Christoph Hellwig 日付:Sun Aug 14 17:33:59 2005 -0700

[NETFILTER]:ipt {、6}所有者のtasklist_lockの不正使用を削除

修正不能で壊れているため、cmd / sid / pidマッチングを削除し、tasklist_lockへの変更をロックする方法を妨げます。

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
これにフラグを立てることを検討している人へ:これは代わりにコメントではなく、尋ねられた質問答えます。@ user141987ただし、これを拡張してiptables、アプリケーションごとの制限を実装するための設定方法に関する詳細情報を提供することをお勧めします。回答に重要な情報を含めることをお勧めします(参照用にリンクを提供します)。
エリアケイガン

2
iptablesはアプリケーションでフィルタリングしません。
パンサー

そのようなオプションがないため、その記事は誤った情報のようです。過去にそのようなオプションを作成する要求が拒否された理由は、それが本質的に信頼できないためです。アプリケーションは単に名前を変更できます。
-psusi

3
@psusi「カーネルがCONFIG_IP_NF_MATCH_OWNERでコンパイルされている場合、コマンドごとにパケットを許可または拒否するようにiptablesファイアウォールを構成できます」と言っていますか?それとも、ほとんどのカーネルにオプションが含まれていないというだけですか?これが間違っている場合、それを暴く情報源はありますか?(また、アプリケーションごとのファイアウォールの制限の主な目的は、信頼できないアプリケーションの実行を完全に安全にしようとすることではないことに注意してください。 )
エリアカガン

このオプションは、この答えが与えられる8年前の2005年にカーネルから削除されました-spinics.net/lists/netfilter/msg49716.html。反対の主張は不正確ですが、iptablesでアプリケーションフィルターをかけることはできません。
パンサー

3

別のオプションはfirejailです。アプリケーションがネットワークを表示できるかどうかを制御するサンドボックス内でアプリケーションを実行します。

firejail --net=none firefox

このコマンドは、インターネットにアクセスせずにFirefoxブラウザを起動します。Ubuntuリポジトリのfirejailディストリビューションは古くなっていることに注意してください-firejailホームページから最新のLTSバージョンをダウンロードしてください。


2

ここに投稿された解決策が良いものであることがわかりました。インターネットアクセスを許可するユーザーグループを作成し、このグループのみにアクセスを許可するようにファイアウォールルールを設定します。アプリケーションがインターネットにアクセスする唯一の方法は、このグループのメンバーによって実行される場合です。でシェルを開くと、このグループの下でプログラムを実行できますsudo -g internet -s

上記でリンクした投稿の内容を要約するには:

  1. 以下をシェルに入力して、「インターネット」グループを作成します。 sudo groupadd internet

  2. 以下のスクリプトを実行するユーザーがのsudoグループに追加されていることを確認してください/etc/group。このファイルを変更することになった場合、以下のスクリプトが機能する前にログアウトしてからログインする必要があります。

  3. 次を含むスクリプトを作成し、実行します。

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. 上記のスクリプトを実行すると、インターネットにアクセスできるアプリケーションを実行できるシェルが作成されます。

このスクリプトは、ファイアウォールルールを保存および復元するために何もしないことに注意してください。スクリプトを変更してiptables-saveiptables-restoreシェルコマンドとシェルコマンドを使用することができます。


1

良くも悪くも、Linuxは異なるアプローチを使用します。この機能を提供するシンプルなグラフィカルインターフェイスはありません。このトピックに関する多くの議論がインターネット上にあり、グーグル検索で興味深い議論を見つけることができます。議論は興味深いものの、これまでのところ、この機能を記述して保守したいプログラマーの専用グループはありませんでした。

Linuxでこの機能を提供するツールは、Apparmor、Selinux、およびTomoyoです。

これらのツールはどれも簡単に習得できず、すべてに長所と短所があります。SELinuxの学習曲線は急勾配ですが、個人的にはSELinuxが好きです。

見る:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

すでに参照されているアプリケーションleopardflowerがありました(ある)。ステータス/メンテナンスがわかりません。




0

いいえ、できません。また、ファイアウォールの従来の定義の一部でもありません。それは、Microsoftが根本的に壊れたOSのセキュリティ問題を紙に書こうとしてかなり最近思いついたものです。許可されていないプログラムが別のプログラムを実行するだけで、その方法でアクセスできるため、Linuxコミュニティでは無能で実行不能と見なされます。

プログラムを実行したときにネットワーク上でプログラムが何をしているか気に入らない場合は、そのプログラムを実行しないでください。


7
Microsoftのファイアウォールは、この機能を提供した最初の主要なファイアウォールではありませんでした。それを提供する最初のWindowsファイアウォールでさえありませんでした。BlackIce Defender、ZoneAlarm、およびその他のさまざまなWindows用のソフトウェアファイアウォールは、Windows Internet Connection Firewallが数年前に導入される以前のものです。さらに、Linuxコミュニティにはそのようなコンセンサスはありません。AppArmor(またはSELinux)を使用してアプリケーションの動作を制限することがよくあります(AppArmorをこの目的に適合させることができるかどうか疑問に思います...)。どのアプリがインターネットにアクセスできるかを制御するのが「間違っている」理由はありません。
エリアケイガン

そして、他のいくつかの答えが証明できるように、アプリケーションごとのファイアウォールの制限はかなり可能です。この機能はiptables / netfilterに組み込まれています!
エリアケイガン

いいえ、アプリケーションごとにnetfilterもiptablesもフィルタリングできません。ユーザーおよびポートでフィルタリングできますが、アプリケーションごとではありません。
パンサー

「単純に別のものを実行できる」???? それから明らかに、ターゲットプログラムの子プロセスをブロックしないそのようなプログラムの作成者は非常に欠陥があります。
trusktr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.