我が家のネットワークでは、iptablesサーバからフォワードしてWebサーバに接続するようにしているんですが
いつの間にかiptablesのFORWARDチェーンが働いてませんでした。
具体的にはDROPするように設定したIPアドレスからガンガンアクセスしてました。
# iptables -nvxL
上記のコマンドを実行すると、iptablesで設定した各ルール毎に該当したパケットがカウントされている筈だったんですが
FORWARDチェーンだけが全て0になってました。
色々と調べてみたところ、br_netfilterモジュールをロードしていなかったせいで
bridgeしたインターフェースのパケットをフィルタリングしてませんでした。
# cat /var/log/messages
May 1 10:00:01 HOGE kernel: bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter
# lsmod |grep br_netfilter
br_netfilter 22248 0
bridge 107106 1 br_netfilter
本来なら、ロードしたモジュールからbr_netfilterが出てくるはずなんですがありませんでした。
手動でbr_netfilterをロードさせて、bridgeしたパケットをフィルタリングできるようにします
# modprobe br_netfilter
OS起動時、自動でbr_netfilterモジュールをロードするようにします
# vi /etc/sysconfig/modules/br_netfilter.modules 以下を記入 #!/bin/sh /sbin/modprobe br_netfilter >/dev/null 2>&1
パーミッションを変更します
# chmod 755 /etc/sysconfig/modules/br_netfilter.modules
上記で復旧している筈ですが、下記でカーネルパラメータの状態を確認します
# sysctl -a |grep net.bridge.bridge-nf-call net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1
値が”0″になっている時は下記のコマンドを実行します。
# sysctl -w net.bridge.bridge-nf-call-ip6tables=1 # sysctl -w net.bridge.bridge-nf-call-iptables=1 # sysctl -w net.bridge.bridge-nf-call-arptables=1
また、念のために起動時のカーネルパラメータの設定を確認します
# cat /usr/lib/sysctl.d/00-system.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
上記で値が”1″に設定されていることを確認します。そもそも記入がない場合とかは追加します。
==============================================================================================
全然気づかなかった・・・・。
たぶんkernelをアップデートした時に設定が消えてしまったんだろうなぁ。