web-dev-qa-db-ja.com

iptablesシェルスクリプトを理解する

状況:

私は最近、iptablesと連携してLinux OSとの間のすべてのインターネットアクセスをブロックする次のシェルスクリプトを見つけました。ただし、グループにあった端末は開かれていません。 internetと呼ばれる:

コード:

これは複雑に聞こえるかもしれませんが、簡単です。まず、次のように「インターネット」グループを作成します。

 Sudo groupadd internet 

次に、これをスクリプトに保存します。

 #!/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

ソース:https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm

質問:

起こっている出来事の次の解釈は正しいですか?

  • Sudo groupadd internetインターネットと呼ばれるグループが作成されます
  • Sudo iptables -Fiptablesの現在のルールがすべてクリアされます
  • Sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPTこれで問題が発生しました...-A OUTPUTターミナルにルールを追加/追加するように指示し、ドキュメントに従って-p is "チェックするルールまたはパケットのプロトコル"なので、-p tcptcpプロトコルのみを反映するルールを設定しているようですが、youtube/twitchでストリームを視聴したい場合はどうすればよいですか? udpを含める必要がありますか?含まれている場合、どのように含めますか?

    次に、-m(一致用)があります。ドキュメントを読みましたが、何をするのかわかりません。今のところ、何が-m owner --gid-owner internet -j 手段。 コメントから# accept packets for internet groupコードの機能は理解していますが、その結論に到達するために、各要素が何をしているのかを理解したいと思います。

1
Webeng

あなたの解釈は正しいです。

すべてをUDPパケットにも適用する場合は、同じルールセットをもう一度追加する必要がありますが、-p udpの代わりに-p tcpを使用します。または、このオプションを省略して、すべてのパケットにルールを適用します(ただし、ICMPパケットにはいくつかの落とし穴がある可能性があるため、両方の種類のルールを追加する方がおそらく安全です)。ただし、最初にTCPaccessにアクセスする必要があります(例:Youtube)。したがって、Youtubeからのストリーミングを使用する場合でもUDP、あなたはここまで到達することは決してないので、あなたはストリームを見ることができないでしょう。

オプション-mは、使用する一致の種類を選択します。さまざまな基準で一致させることができ、一致するモジュールでさえiptables(man iptables-extensions)の拡張機能もあります。ここで、-m ownerはパケットの所有権によって一致を選択し、--gid-ownerはグループの所有権と一致するように指定します。したがって、両方のオプションを合わせると、「このルールは、グループinternetの誰かから送信されるパケットにのみ適用されます」という意味になります。

オプション-j(元々は「ジャンプ」)は、ルールが一致したときに何をするかを指定します。別のチェーンにジャンプするか、ACCEPT(ルールの処理を停止してこのパケットを送信する)、またはREJECT(ルールの処理を停止してこのパケットを無視する)を行うことができます。

次の2つのルールは、送信アプリケーションがどのグループに属していても、特別な宛先(-d)のパケット(ACCEPT)を許可し、最後のルールは、前のルールと一致しなかったすべてのパケット(REJECT)をドロップします。したがって、実際のブロッキングを行うのはこの最後のルールです。

インターネット上にはiptablesのチュートリアルがたくさんあります。詳細を知りたい場合は、少しグーグルして好きなものを選んでください。私が過去に有用だと思ったいくつかのランダムなリンク:

2
dirkt