次のことを許可するマシンのファイアウォールを設定しています:
- 特定の IP アドレスからの着信 SSH 接続。
- リダイレクトを除く ICMP。
少なくとも現在のテストが完了するまでは、DROP ではなく REJECT を使用することを選択しました。
*filter
# Allow all loopback (lo0) traffic and reject traffic to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
# Reject ICMP redirect.
-A INPUT -p icmp --icmp-type 5 -j REJECT
# Allow ICMP (the types which are not rejected).
-A INPUT -p icmp -j ACCEPT
# Allow SSH connections from specific address
-A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT
# Allow inbound traffic from established connections, including ICMP error returns.
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Log what was incoming but denied (optional but useful).
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7
# Reject all other inbound.
-A INPUT -j REJECT
# Log any traffic which was sent to you for forwarding (optional but useful).
-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 7
# Reject all traffic forwarding.
-A FORWARD -j REJECT
COMMIT
マシンは NAT ルーターの背後にあり、ポート 22 が NAT ルーターに転送されます。
許可されていない IP アドレスから接続しようとすると、ホストへの接続は 1 分ほど後にタイムアウトします。
ssh: connect to host x.x.x.x port 22: Connection timed out
これは予想通りですか? REJECT によってすぐに接続が失敗すると思っていました。REJECT ICMP パケットが接続マシンに戻らないためでしょうか?