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
以前のバージョンを選択してみてください。一時的に私に効果的です。