Iptables - 特定のポートを許可し、他のポートをブロックするのに問題がある

Iptables - 特定のポートを許可し、他のポートをブロックするのに問題がある

22(ssh)、80(http)、443(https)を除くすべてのポートをブロックしてみました。現在の入力ルールは次のとおりです。

> iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere            

httpおよびhttpsポートを許可してから、他のすべてのポートをブロックする必要があります。しかし、それはすべてをブロックします。たとえば、ポート80と443を使用してFacebookにアクセスしようとすると機能しません。 Facebookにアクセスできません。今どうすればいいですか?

私もこれを試しました。記載されているポートを許可して続行してください。ポリシーの拒否、確かではありませんが。同じことが起こります。

> iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

答え1

作成したポリシールールには、次のことが許可されます。外部接続するホストあなたのTCPポート22、80、443、しかし、独自のトラフィックを含む他のトラフィックはありません!このホストがこれら3つのポート以外のポートにアクセスするのを本当にブロックし、外部ホストがホストにアクセスしたくない場合別の言葉OUTPUT、ルールチェーンの代わりにルールチェーンにルールを配置してINPUTから、入力チェーンにCONNTRACKルールを追加することで開始されていない接続を防ぐことができます。

-P INPUT DROP
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m udp -p udp --sport 53 -j ACCEPT
-A OUTPUT -i lo -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A OUTPUT -m udp -p udp --dport 53 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 443 -j ACCEPT

私は通常、いくつかの内部プログラムが必要になる可能性があるため、ループバックアダプタを動作させることができます。また、DNS トラフィックも許可します。それ以外の場合は、ドメイン名を解決できません。

答え2

他の人がコメントで指摘したように、WebサイトにアクセスするためにINPUTルールは必要ありません。これらのルールは、そのポートでローカルでサービスを実行する場合にのみ必要です。アウトバウンドトラフィックを本当に制限するには、これらのルールをOUTPUTチェーンに入れる必要があります。

また、すべての着信トラフィックが破棄されるため、すべての接続が失われます。 Webサーバーへの接続を確立すると、返されたデータ(特にTCP 3ウェイハンドシェイク)は、catch-all削除によってINPUTチェーンから削除されます。この問題を解決するには、次の戻り接続を許可するルールを追加する必要があります。

iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

答え3

update-alternatives --config iptables以前のバージョンを選択してみてください。一時的に私に効果的です。

関連情報