iptablesでは、関連したパケットを追跡するために/proc/net/ip_conntrackというファイルを作り、パケットの情報を記録しておきます。
このip_conntrackに記録できる上限数を決めているのが/proc/sys/net/ipv4/ip_conntrack_max。
システムで自動的に設定されるデフォルト値は搭載されているメモリーによって異なり、1GBで30000強、2GB以上で65536ぐらいになります。
1GBのメモリーを積んでいる場合、1時間あたりのアクセス数が100,000ページビュー程度までならデフォルト値でも問題ないのですが、
ぞれ以上になってくるとip_conntrack_maxの値を超えてしまい、パケットが捨てられてしまうという事態に陥ります。
ip_conntrack_maxの値を超えると、コンソールに以下のようなメッセージが出力されます。
ip_conntrack: maximum limit of 65536 entries exceeded
/proc/net/ip_conntrackを見ると、ESTABLISHEDが大量に保存されている
# cat /proc/net/ip_conntrack tcp 6 431999 ESTABLISHED src=192.168.100.50 dst=192.168.10.11 sport=62856 dport=22 packets=2107 bytes=129391 src=192.168.10.11 dst=192.168.100.50 sport=22 dport=62856 packets=2254 bytes=161844 [ASSURED] mark=0 secmark=0 use=1 tcp 6 431867 ESTABLISHED src=182.48.51.190 dst=192.168.10.11 sport=44108 dport=22 packets=1493774 bytes=185262756 src=192.168.10.11 dst=182.48.51.190 sport=22 dport=44108 packets=1491669 bytes=201699448 [ASSURED] mark=0 secmark=0 use=1
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count # cat /proc/sys/net/ipv4/ip_conntrack_max 65536 # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 432000
# cat /proc/net/nf_conntrack | wc -l 14471 # cat /proc/sys/net/netfilter/nf_conntrack_count 14475 # cat /proc/sys/net/netfilter/nf_conntrack_max 65536 # cat /proc/sys/net/nf_conntrack_max 65536
# cp -a /etc/sysctl.conf /etc/sysctl.conf.org # vi /etc/sysctl.conf net.ipv4.netfilter.ip_conntrack_max = 1210856 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 43200
net.netfilter.nf_conntrack_max = 1210856 net.nf_conntrack_max = 1210856
# sysctl -p または # sysctl net.ipv4.netfilter.ip_conntrack_max=1200000 # sysctl net.nf_conntrack_max=1200000
# cat /proc/sys/net/ipv4/ip_conntrack_max 1210856 # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 259200 3日 172800 2日 86400 1日 43200 半日
# sysctl net.netfilter.nf_conntrack_max net.nf_conntrack_max net.netfilter.nf_conntrack_generic_timeout net.netfilter.nf_conntrack_max = 1210856 net.nf_conntrack_max = 1210856 net.netfilter.nf_conntrack_generic_timeout = 600
kernel: nf_conntrack: table full, dropping packet