文档章节

Debian系统关闭iptables的conntrack跟踪

anglix
 anglix
发布于 2015/11/12 19:27
字数 419
阅读 439
收藏 1

测试脚本

#!/bin/bash
# /opt/iptables-switch.sh status | disable | enable
ipt_mod_conf="/etc/modprobe.d/iptables.conf"
ipt_mod_list="ip_vs iptable_nat nf_nat_ipv4 ipt_MASQUERADE nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack iptable_filter ip_tables xt_tcpudp xt_multiport xt_length xt_addrtype x_tables"
nf_max=$(sysctl -e -n net.nf_conntrack_max)
nf_cur=$(sysctl -e -n net.netfilter.nf_conntrack_count)
ipt_hsize=$(grep 'MemTotal' /proc/meminfo | awk '{printf("%d",$2/16)}')
fuck_ipt_mod(){
echo '# disable iptables conntrack modules' > ${ipt_mod_conf}
for ipt_mod in ${ipt_mod_list}; do
	echo "blacklist ${ipt_mod}" >> ${ipt_mod_conf}
    modprobe -r ${ipt_mod}
done
}
clean_ipt_rule(){
iptables -F
iptables -Z
iptables -X
for ipt_table in $(cat /proc/net/ip_tables_names 2>/dev/null); do
    iptables -t ${ipt_table} -F
    iptables -t ${ipt_table} -Z
    iptables -t ${ipt_table} -X
done
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
}
ipt_enable(){
echo "options nf_conntrack hashsize=${ipt_hsize}" > ${ipt_mod_conf} # /sys/module/nf_conntrack/parameters/hashsize
for ipt_mod in ${ipt_mod_list}; do
	modprobe -q -r ${ipt_mod} && modprobe -a ${ipt_mod}
done
dmesg --reltime | grep nf_conntrack | tail -2 2>/dev/null
sysctl -e -w net.nf_conntrack_max=4194304
sysctl -e -w net.ipv4.netfilter.ip_conntrack_max=4194304
sysctl -e -w net.netfilter.nf_conntrack_max=4194304
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_established=1200
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
sysctl -e -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
}
case "$1" in
status)
    if [[ -z ${nf_max} ]]; then
        echo 'nf_conntrack disabled.'
    else
        echo "nf_conntrack used: ${nf_cur}/${nf_max}."
    fi
    ;;
disable)
    clean_ipt_rule
    fuck_ipt_mod
    $0 status
    ;;
enable)
    ipt_enable
    $0 status
;;
*)
    echo "Usage: $0 {status|disable|enable}"
    exit 2
    ;;
esac
exit 0

开启防火墙

  • 启用防火墙,并监控 nf_conntrack 状态:
/opt/iptables.sh enable
watch -n 1 -d '/opt/iptables.sh status'

施加压力

  • 找台机器给 ssh 加压:
watch -n 0.1 -d 'curl -s demo.higkoo.com:22'

查看防火墙状态

故障重现

  • 由于测试压力小,手动调小 nf_conntrack_max
sysctl -w net.netfilter.nf_conntrack_max=20
  • 然后故障就重现了: 防火墙满了
  • 不用的话就 disable 防火墙,脚本中的 enable 会开启并做 iptables 优化
sudo /opt/iptables.sh status
sudo /opt/iptables.sh enable
sudo /opt/iptables.sh disable

脚本测试

啥也别说了,都写在脚本里了。

© 著作权归作者所有

共有 人打赏支持
anglix

anglix

粉丝 31
博文 35
码字总数 17615
作品 0
珠海
系统管理员
nf_conntrack: table full, dropping packet. 终结篇

“连接跟踪表已满,开始丢包”!相信不少用iptables的同学都会见过这个错误信息吧,这个问题曾经也困扰过我好长一段时间。此问题的解决办法有四种(nfconntrack 在CentOS 5 / kernel <= 2.6....

kisops
2013/08/07
0
2
nf_conntrack的一些测试

查看nf_conntrack相关数值: cat /proc/sys/net/netfilter/nfconntrackmaxsysctl net.netfilter.nfconntrackbuckets cat /proc/sys/net/netfilter/nfconntracktcptimeoutestablishedcat /pro......

362475097
2017/01/15
0
0
nf_conntrack: table full, dropping packet 连接跟踪表已满,开始丢包 的解决办法

nf_conntrack: table full, dropping packet 连接跟踪表已满,开始丢包 的解决办法 中午业务说机器不能登录,我通过USM管理界面登录单板的时候发现机器没有僵死,然后一看日志,g一下子就明白...

a591244761
2014/04/11
0
0
iptables踩坑记

1:第一坑:众所周知nf_conntrack,下面会有介绍补坑方法。 2:连环坑: 要解决第一个坑,需要修改内核参数,如: net.netfilter.nfconntracktcptimeoutestablished = 600 net.netfilter.nfc...

wyl410505
2016/02/17
0
0
关于ip_conntrack跟踪连接满导致网络丢包问题的分析

我们的线上web服务器在访问量很大时,就会出现网络连接丢包的问题,通过dmesg命令查看日志,发现如下信息: kernel: ip_conntrack: table full, dropping packet.kernel: printk: 1 messages...

南非蚂蚁
2016/01/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部