page_adsence

2016年2月20日土曜日

超便利、watch iptablesコマンド

個人の開発環境の話なのですが、dockerで80番ポートを使用していたためホストマシン上で80番ポートが使えなかったので、
とりあえず8080番ポートを使おうと思ったのですが、iptalbesをオフにしたらdockerの設定が使えなくなってしまう関係でオフに出来ない状況に陥りました。
ローカルの開発環境でiptablesとかで接続出来ないと、面倒なので今までは設定オフにしちゃってたんですが、
dockerを使っている関係でそういう訳にもいかず、iptablesの設定でハマっていたのですが、同僚の人に便利なコマンドを教えてもらいました。
watch iptables -xnvL
というコマンド。
今まで使ったことないコマンドだったのですが、パケットがどの段階でどこに行っているのかが分かります。
watch iptables -xnvL
Every 2.0s: iptables -xnvL                                                                                                           Wed Feb 17 10:25:31 2016

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts        bytes          target          prot   opt in    out     source               destination
   19053  1507938   ACCEPT          all        --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
            0                 0   ACCEPT          icmp   --  *      *       0.0.0.0/0            0.0.0.0/0
            0                 0   ACCEPT          all        --  lo     *       0.0.0.0/0            0.0.0.0/0
          14         2264   ACCEPT          tcp      --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
          24         1408   ACCEPT          tcp      --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
     1012       84278   IN_LOGGING  all        --  *      *       0.0.0.0/0            0.0.0.0/0
            0                 0   REJECT          all         --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
見るべき点はpktsとbytes部分を特に注目してみる。
iptablesは順番が結構シビアで、間違えると思うように動いてくれないのですが、このコマンドを使うと、どこで落ちているのかよく分かる。
修正前は、
REJECT      all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:webcache
となっていたのですが、自分の認識だと上に書いた設定を下に書いた設定で上書き出来るんじゃなかったかなという朧気な記憶を元に記述したのですが、案の定間違っていました・・・。
修正前の状態を見てみると、REJECTされているパケットが・・・。
watch iptables -xnvL
Every 2.0s: iptables -xnvL                                                                                                           Wed Feb 17 10:21:20 2016

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts        bytes          target          prot   opt in    out     source               destination
   19053  1507938   ACCEPT          all        --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
            0                 0   ACCEPT          icmp   --  *      *       0.0.0.0/0            0.0.0.0/0
            0                 0   ACCEPT          all        --  lo     *       0.0.0.0/0            0.0.0.0/0
          14         2264   ACCEPT          tcp      --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
            0       94822   REJECT          all         --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
            0                0   ACCEPT          tcp      --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
            0                0   IN_LOGGING  all        --  *      *       0.0.0.0/0            0.0.0.0/0
設定の上書きではなく、条件にマッチしなかったものが順次下に行くといった挙動でした・・・。
うろ覚えで作業するものではありませんでした・・・。