一連のIPアドレスへの接続を制限する単純なiptables設定を作成しようとしています。ただし、OUTPUT ルールを構成しようとするたびに SSH 接続が終了します。
この問題を解決するために、すべての着信トラフィックを許可し、ポート53からIP 8.8.8.8への発信トラフィックのみを許可するとします。
これは私の起動iptables設定です。
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere ip-172-17-0-2.eu-central-1.compute.internal tcp dpt:9090
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
それでは、次のように発信トラフィックを制限したいと思います。
iptables -I OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
2番目のコマンドを実行するインスタンスでSSH接続がブロックされているため、サーバーを再起動する必要があります。
おそらく私はiptablesやsshの私の理解が間違っているかもしれません。私の考えは、OUTPUTチェーンがサーバーから始まる発信接続を制御し、ポート22でサーバーに接続する機能に影響を与えてはいけないということです。また、ポート 80 および 443 の他のすべての受信接続が終了するため、SSH だけではありません。
ベストアンサー1
今分かったようです。
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
これにより、サーバーから開始された接続からのすべてのトラフィックがブロックされます。ただし、着信接続によって開始された接続には適用されません。