ローカルで発信されたすべてのアウトバウンドトラフィックを許可するiptablesルール?


11

私は誰かが次のiptablesルールで私を助けることができるかどうか疑問に思っていました:

ローカルで発生する(iptablesを実行しているサーバー上など)トラフィックのANYおよびALLを許可します。

DNS、HTTPなど...それすべて。iptablesを実行しているサーバーによって開始された接続はすべて許可する必要があります。

現在、基本的にOUTPUTデフォルトポリシーACCEPTを使用しています。これは正しいです?入力がブロックされているので、これは、私たちの側がOUTPUTポリシーに到達する前に接続がドロップされるため、接続(許可されているものを除く)を開始できないことを想定していますか?

申し訳ありませんが、私のiptablesスキルは弱いです;)

誠にありがとうございます。

回答:


26

そのためには2つのルールが必要です。

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

いくつかのメモ。

  • あなたが持っているかもしれない既存のルールはこれを既に行っているかもしれませんが、異なって見えます。
  • これは-I、これらのルールを最初に強制するために使用します。iptablesルールはトップダウンで評価されます。
  • -oそして-iフラグが「アウト」とそれぞれ「中」を意味します。eth0適切なイーサネットインターフェイス名に置き換えます。

私たちは両方を持っています:)私が言ったように私は2番目のものに言及するのに失敗しました... 明確化に感謝:)
anonymous-one

2
-d 0.0.0.0/0冗長であり、必要ありません。
zapstar 2018

すばらしい答えです。しかし、今はサーバーにpingを実行できますが、その理由がわかりません。説明できますか?
ダニエル

@Daniel送信トラフィックのみを許可する場合、ping応答は、ホストに到達したときにパケットフィルターによってドロップされます。これを防ぐには、すべての発信トラフィックと同じセッションに関連付けられている、または関連している着信トラフィックも許可する必要があります。つまり、ping応答はping要求に関連しているため、許可する必要があります。着信ping要求があり、発信pingがセッションテーブルに記録されていない場合、着信パケットはドロップされます。それが理にかなっていると思います!
バハマート

@bahamat:再試行した後、icmpトラフィックを明示的に許可する必要があることがわかりました。そして、私はサーバーにpingできることについて話していました。ここで、上記のルールを実装しました。それを再現することはできません。おそらくどこかで間違いを犯したのかもしれません。とにかくありがとう。
ダニエル

0

現在、基本的にOUTPUTデフォルトポリシーACCEPTを使用しています。

Netfilterはステートフルな接続の追跡を開始するための特別なルールを必要としないため、OUTPUTにはこれで十分です。

ただし、「デフォルトの拒否」ポリシーに従ってインバウンドトラフィックを除外したい場合は、INPUT-chain to をswitchで実行できますDROPiptables -P INPUT DROP

その後、すべてが2つのルールで設定されます

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

ループバックインターフェイスでの入力トラフィックを許可するルールに注意してください。ブログの「エンドユーザー向けの最小ファイアウォール」で指摘したように、明示的に許可しない限り、ループバックトラフィックは「確立された」状態チェックでは処理されません。たとえば、トラフィックeth0

この最小限のルールセットが「そのまま」ロードされることを保証するには、すでにそこにあるかもしれないルールに干渉せずにiptables-restore、SHELLセッションで利用すると便利です。

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

これを行う前に、自分のネットワーク接続を切断しないようにしてください1。すでに開いているSSHセッションは引き続き正常に機能するはずですが、新しいセッションを開こうとしても機能しません。

__

  1. もちろん、他のルールを追加して、そのような接続を許可することができます。単純なこともあるので-A INPUT -j ACCEPT -p tcp --dport 22-m stateここをいじる必要はありません。またlptables-restoreiptables-restoreそれを試す前に修正することを忘れないでください;)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.