wiki:linux/iptable

iptables

ルールの追加方法

追加したい場所を確認

# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    cali-INPUT  all  --  anywhere             anywhere             /* cali:Cz_u1IQiXIMmKD4c */
2    KUBE-FIREWALL  all  --  anywhere             anywhere
3    KUBE-EXTERNAL-SERVICES  all  --  anywhere             anywhere             ctstate NEW /* kubernetes externally-visible service portals */
4    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
5    ACCEPT     icmp --  anywhere             anywhere
6    ACCEPT     all  --  anywhere             anywhere
7    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
8    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

INPUTチェインの8行目でリジェクトされる前にルールを追加する。

# iptables -I INPUT 8 -p tcp --dport 8080 -j ACCEPT

下記のコマンドで追加すると、ルールが追加されている。

# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    cali-INPUT  all  --  anywhere             anywhere             /* cali:Cz_u1IQiXIMmKD4c */
2    KUBE-FIREWALL  all  --  anywhere             anywhere
3    KUBE-EXTERNAL-SERVICES  all  --  anywhere             anywhere             ctstate NEW /* kubernetes externally-visible service portals */
4    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
5    ACCEPT     icmp --  anywhere             anywhere
6    ACCEPT     all  --  anywhere             anywhere
7    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
8    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:webcache
9    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

デバッグ

上記のルールの追加を利用して、ドロップする前にログを出力するルールを追加する。

# iptables -I INPUT 8 -j LOG --log-prefix "IPTABLES DROP:" --log-level=info
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    cali-INPUT  all  --  anywhere             anywhere             /* cali:Cz_u1IQiXIMmKD4c */
2    KUBE-FIREWALL  all  --  anywhere             anywhere
3    KUBE-EXTERNAL-SERVICES  all  --  anywhere             anywhere             ctstate NEW /* kubernetes externally-visible service portals */
4    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
5    ACCEPT     icmp --  anywhere             anywhere
6    ACCEPT     all  --  anywhere             anywhere
7    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
8    LOG        all  --  anywhere             anywhere             LOG level info prefix "IPTABLES DROP:"
9    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

ドロップされたパケットがあると、/var/log/messagesに表示される。

Jul 13 09:54:40 master1 kernel: IPTABLES DROP:IN=eth0 OUT= MAC=00:0d:3a:4d:fc:d2:74:83:ef:85:23:fc:08:00 SRC=10.0.0.8 DST=10.0.0.7 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=46332 DF PROTO=TCP SPT=39658 DPT=2379 WINDOW=29200 RES=0x00 SYN URGP=0

上記の例では、2379にアクセスされているのが分かる。iptablesで2379を空けてやると通信がうまくいくようになる。