ip_conntrackの設定を変更しても初期値に戻る場合
概要
iptablesでは、パケットを解析するために ip_conntrack(nf_conntrack)というファイルを作って、そのパケットの情報を記録します。
このip_conntrack(nf_conntrack)に記録できる上限数を決めているのが、その上限を超えると新規セッショを弾きます。その際に /var/log/messages 等に以下のエラーを吐きます。
また、CentOS 6.xでは、「nf_conntrack」と名前が変更されてますので、エラーログの内容も変更されてます
その場合は、ip_conntrack(nf_conntrack)が溢れている状態です。
# CentOS 5.x $ sudo cat /var/log/messages Jul 7 10:00:46 testsv kernel: ip_conntrack: table full, dropping packet # CentOS 6.x Jul 7 10:00:46 testsv kernel: nf_conntrack: table full, dropping packet.
ip_conntrack(nf_conntrack)の 最大値を変更すれば、最大値が変更されますが、サーバーの再起動やiptablesを再起動すれば、初期値に戻るケースがありました。その際の対応策を紹介します
ip_conntrack(nf_conntrack)の最大値を変更する
ip_conntrack(nf_conntrack)の最大値を変更する方法を紹介します
現在のip_conntrack(nf_conntrack)の最大値を確認
現在の設定でのip_conntrackの最大値は以下のコマンドで確認できます。
Cent OSのバージョンで、参照している場所が違いますので注意して下さい。
# CentOS 5.x $ sudo cat /proc/sys/net/ipv4/ip_conntrack_max 65536 CentOS 6.x $ sudo /proc/sys/net/netfilter/nf_conntrack_max net.nf_conntrack_max = 65536
ip_conntrack(nf_conntrack)の最大値を変更する
/etc/sysctl.conf の ip_conntrack_max(net.nf_conntrack_max) の値に変更したい最大値を設定します
# CentOS 5 $ sudo vi /etc/sysctl.conf net.ipv4.netfilter.ip_conntrack_max = 2000000 # sysctlでも良いですが、CentOS 5.xではiptablesの初期化でsysctlの内容をみない場合もケースあるので、 /etc/modprobe.d/nf_conntrack.confを変更したほうが良いみたいです # CentOS 6 $ sudo vi /etc/sysctl.conf net.nf_conntrack_max = 2000000 # 設定を反映します $ sudo /sbin/sysctl -p
設定が反映されたか確認します
# CentOS 5.x $ sudo cat /proc/sys/net/ipv4/ip_conntrack_max 2000000 CentOS 6.x $ sudo /proc/sys/net/netfilter/nf_conntrack_max net.nf_conntrack_max = 2000000
iptabel を再起動すると、ip_conntrack(nf_conntrack)が初期される場合の対処法
OSを再起動または、iptablesを再起動すると、ip_conntrack(nf_conntrack)の最大値が初期値(65536)に戻るケースがありました。
他のサイトではCentOS 5.xだとこの事象が発生しCentOS 6.x だと発生しないと記載されているWEBサイトがありましたが、私が運用しているCentOS 6.x でも、iptablesを再起動すると、ip_conntrack(nf_conntrack)の最大値が初期値(65536)に戻るケースが発生しました。
iptablesを再起動すると、ip_conntrack(nf_conntrack)が初期値になるか確認してみます
# iptablesのバージョンを確認します $ rpm -qa | grep iptables iptables-1.4.7-14.el6.x86_64 iptables-ipv6-1.4.7-14.el6.x86_64 # ip_conntrack(nf_conntrack)の最大値を確認します $ sudo cat /proc/sys/net/netfilter/nf_conntrack_max 2000000 # iptablesを再起動します $ sudo /etc/init.d/iptables restart iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ] # ip_conntrack(nf_conntrack)の最大値が初期値に戻っています $ sudo cat /proc/sys/net/netfilter/nf_conntrack_max 65536
iptables
を再起動すると、「Unloading iptables modules [ ok ] 」となり、iptables
モジュールアンロードされて初期値に戻ります。
iptables
モジュールをアンロードしないように「/etc/sysconfig/iptables-config」のファイル内の「IPTABLES_MODULES_UNLOAD="no"」と設定して、モジュールがアンロードされないようにします
# iptables-config ファイルを編集します $ sudo vi /etc/sysconfig/iptables-config IPTABLES_MODULES_UNLOAD="no" # 設定を反映します $ sido /sbin/sysctl -p # ip_conntrack(nf_conntrack)の最大値が変更されたか確認します $ sudo cat /proc/sys/net/netfilter/nf_conntrack_max 20000 # iptabelを再起動して、最大値が初期値に戻ってないか確認します $ sudo /etc/init.d/iptables restart $ sudo cat /proc/sys/net/netfilter/nf_conntrack_max 20000
ディスカッション
コメント一覧
まだ、コメントがありません