Linux的netfilter

net filter

连接跟踪表参数

连接跟踪表tcp超时时间,默认120秒:

sysctl net.netfilter.nf_conntrack_tcp_timeout_time_wait
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

连接跟踪表大小设置:

$ sysctl net.netfilter.nf_conntrack_max=131072       //跟踪表的总容量
$ sysctl net.netfilter.nf_conntrack_buckets=65536    //跟踪表的桶数量

连接跟踪表内存开销计算,连接跟踪对象大小为376,链表项大小为16:

nf_conntrack_max* 连接跟踪对象大小 +nf_conntrack_buckets* 链表项大小
= 1000*376+65536*16 B
= 1.4 MB

conntrack查看连接跟踪表的内容

conntrack查看连接跟踪表的内容, -L 表示列表,-o 表示以扩展格式显示:

$ conntrack -L -o extended
ipv4     2 tcp      6 7 TIME_WAIT src=192.168.0.2 dst=192.168.0.96 sport=51744 dport=8080 src=172.17.0.2 dst=192.168.0.2 sport=8080 dport=51744 [ASSURED] mark=0 use=1
ipv4     2 tcp      6 6 TIME_WAIT src=192.168.0.2 dst=192.168.0.96 sport=51524 dport=8080 src=172.17.0.2 dst=192.168.0.2 sport=8080 dport=51524 [ASSURED] mark=0 use=1

统计总的连接跟踪数

$ conntrack -L -o extended | wc -l
14289

统计TCP协议各个状态的连接跟踪数

$ conntrack -L -o extended | awk '/^.*tcp.*$/ {sum[$6]++} END {for(i in sum) print i, sum[i]}'
SYN_RECV 4
CLOSE_WAIT 9
ESTABLISHED 2877
FIN_WAIT 3
SYN_SENT 2113
TIME_WAIT 9283

统计各个源IP的连接跟踪数

$ conntrack -L -o extended | awk '{print $7}' | cut -d "=" -f 2 | sort | uniq -c | sort -nr | head -n 10
  14116 192.168.0.2
    172 192.168.0.96

参考