22(ssh)、80(http)、443(https)を除くすべてのポートをブロックしようとしました。私の現在のINPUTルールはこれらです。
> 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にアクセスできません。私は今どうすればいい?
私もこうやってみました。言及されたポートを許可し、policy DROPを作成しましたが、よくわかりません。同じことが起こります。
> 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
作成したポリシールールは、外部ホストがあなたの 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トラフィックを許可します。そうしないと、ドメイン名を解決できません。
他の人がコメントで指摘したように、ウェブサイトにアクセスするためのようなINPUTルールは必要ありません。これらのポートでサービスをローカルで実行している場合にのみ、これらのルールが必要になります。代わりにアウトバウンドトラフィックを制限したい場合は、これらのルールをOUTPUTチェーンに入れる必要があります。
さらに、すべてのインバウンドトラフィックをドロップしているため、すべての接続が失われています。 Webサーバーに接続すると、キャッチオールドロップのために、返されるデータ(具体的には、TCP 3ウェイハンドシェイク)がINPUTチェーンにドロップされます。これを修正するには、これらのリターン接続を許可するルールを追加する必要があります。
iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
update-alternatives --config iptables
を試して、レガシーバージョンを選択してください。とりあえず働いてくれました。