iptablesで久しぶりにハマった
これまで、/etc/sysconfig/iptablesを直に編集してサービスをrestartする方法で設定変更してたのだけど、iptables -A コマンドを使うようになって、ハマッた。
iptablesで
# iptables -A INPUT何がし -p tcp --dport 80 -j ACCEPT
ということで、192.168.0.2(仮名)のhttpのportを開けたはずなのに
# telnet 192.168.0.2 80 Trying 192.168.0.2... telnet: connect to address 192.168.0.2: No route to host
とか言われる。
で、tcpdumpでモニタしつつ別のサーバからもう一度port 80にtelnetしてみたら、
# tcpdump host 192.168.0.2 (中略) 18:09:38.683204 IP 192.168.0.3.wfremotertm > 192.168.0.2.http: S 4123505778:4123505778(0) win 584018:09:38.689310 IP 192.168.0.2 > 192.168.0.3: ICMP host 192.168.0.2 unreachable - admin prohibited, length 68
といわれた。
で、/etc/sysconfig/iptables を見てみると、
-A INPUT何がし -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 80 -j ACCEPT
の前に
-A INPUT何がし -j REJECT --reject-with icmp-host-prohibited
が鎮座ましましておりまして、、、こいつがパケット撥ねてたらしい..orz..
(icmp-host-prohibitedってのは、エラーのタイプを指定しているだけで、このルールまで、どの行のルールにもマッチしなければ問答無用にREJECTなのだ。つまり、この下にある行は無意味)
もともとこの行はデフォルトの設定の最後の行なのだけれど、
2008/4/20追記:
icmp-host-prohibitedとかのエラータイプはICMP(pingとかのプロトコル:RFC792)で規定されてる。
iptables -A INPUT何がし xxxルール
とかiptablesコマンドで設定してやると、このルールの後にくっついちゃう。そりゃそうだ、-Aって、、APPENDだもん...
それまでは、自分のサーバからのアクセスでしか試していなかったので、気づかなかったよ。デフォルトで空いているポートは、ずっと前にあったわけだし...
アホすぎ>自分
今後はiptalbes -Iとするのが安全かな。。。