
TCP (SSH および FTP) の 21 と 22 を除くすべてのポートをブロックするルールを設定しようとしています。しかし、このスクリプトを実行しようとすると、インスタンスからロックアウトされ、アクセスできなくなります。これがスクリプトです:
# Flush the FW Rules
iptables -F
iptables -X
# Block all traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
# Allow ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
スクリプトでは、SSH と FTP の受信要求と送信要求の両方を設定していますが、なぜアクセスできないのでしょうか?
答え1
- チェーン内のルールでは、宛先ポート ( ) ではなく、送信元ポート
OUTPUT
の一致 ( ) を指定する必要があります。--sport
--dport
- とにかく、チェーン
DROP
内のポリシーはOUTPUT
一般的な慣行ではありません。 - iptables チュートリアルとサンプルルールセットを読んでください。
- 接続が失われるのを避けるには、ツール
iptables-save
をより適切に使用してくださいiptables-apply
。
答え2
状態追跡を設定し、-A OUTPUT ... -j ACCEPT
行をなくす必要があります。
IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
明示的な出力フィルタリングを使用しているのは良いことですが、実装するにはさらに作業が必要です。