web-dev-qa-db-ja.com

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

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

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

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

57
guerda

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

6
Florian Diesch

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

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

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

screen shot

33
ZedTuX

I found 問題を解決する便利なソリューション。インターネットの使用を決して許可されないグループを作成し、このグループのメンバーとしてプログラムを開始します。

  1. グループno-internetを作成します。 notこのグループに参加する

    Sudo addgroup no-internet
    
  2. グループno-internetに属するすべてのプロセスがネットワークを使用するのを防ぐルールをiptablesに追加します(ip6tablesを使用してIPv6トラフィックも防ぎます)

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

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

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

または、Sudo visudoと同様の何か

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

26
Tim

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

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

5
heiko81

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

ファイアウォールルールを変更する必要のないソリューションを次に示します。ユーザーがmy_userで、実行するアプリがmy_appである環境を変更して、同じユーザー(Sudo経由)で実行します。

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

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

Linux GUIファイアウォール

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

4
ccpizza

@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の不正使用を削除

修正不可能なbroken以来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>
3
user141987

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

上記でリンクした投稿の内容を要約すると、

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

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

  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-saveおよびiptables-restore Shellコマンドを使用するようにスクリプトを変更することもできます。

2
Mark

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

firejail --net=none firefox

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

2
Dimitar II

ヒョウの花 を試してください。 GUIとアプリケーションごとの制限があります。

1
brand

カーネルバージョン2.6.24までのiptablesにありました。2.x-2.6.24マシンを実行していて、カーネルが準拠している場合は、それを実行できます。何らかの理由で彼らはそれを取り出したので、マイクロソフトではない。 http://cateee.net/lkddb/web-lkddb/IP_NF_MATCH_OWNER.html

1
not really

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

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

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

見る:

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

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

1
Panther

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

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

0
psusi