iptables踩坑记
1:第一坑:众所周知nf_conntrack,下面会有介绍补坑方法。
2:连环坑:
要解决第一个坑,需要修改内核参数,如:
net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576
这几个参数是基于nf_conntrack模块的,如果nf_conntrack在系统中没有被加载,则上面三个选项就恢复成默认值。
/etc/init.d/iptables stop这个命令会将nf_conntrack模块移除,运行stop命令后使用sysctl -a 你会发现nf_conntrack的三个选项恢复成了默认值。
然后你再一次启动/etc/init.d/iptables start ,而此时nf_conntrack还是保持默认值。系统大量报错。。。介,介,介,你踩到iptables精心设计的“连环坑”。
修改:
NF_MODULES_COMMON=(x_tables nf_nat nf_conntrack) # Used by netfilter v4 and v6
为
NF_MODULES_COMMON=(x_tables nf_nat) # Used by netfilter v4 and v6
即可。
对于“连环坑”,遇到是有条件的:
即是:系统中不存在ipv6包
因为nf_conntrack_ipv6 是依赖nf_conntrack的,这样iptables脚本使用modprobe -r nf_conntrack 卸载不掉该模块,就不会恢复nf_conntrack默认值
3:自埋坑
在上面“连环坑”中,我们通过修改/etc/init.d/iptables的脚本配置,stop时候不卸载nf_conntrack模块,解决不会恢复nf_conntrack默认值的问题。今天就遭此一坑。
我们线上的中间件服务器的访问量非常巨大,使用nf_conntrack_max = 1048576参数后,瞬间跑满。请求无法到达1.31,按照以前的方法我执行/etc/init.d/iptables stop,而因为我修改了脚本stop的时候,不会移除nf_conntrack模块,悲剧了。而此时,我们手动移除modprobe -r nf_conntrack 报错"模块正在使用"。。。 情急之下我卸载了iptables, 模块依旧存在,于是修改了内核参数:net.nf_conntrack_max = 10485760 刚开始正常,过一会,机器直接重启。。。
如此看来,修改/etc/init.d/iptables 中的NF_MODULES_COMMON选项是不正确的,这样会导致出问题的时候,你执行/etc/init.d/iptables stop都不会好转。我们必须想别的途径。
我们分析iptables启动过程:
执行iptables start --->启动nf_conntrack模块 ---> 应用iptables策略。
执行iptables stop --->卸载nf_conntrack模块(sysctl的nf_conntrack 选项恢复默认值)--->停止iptables 进程
我们之前的解决方案是:
执行iptables start --->启动nf_conntrack模块 ---> 应用iptables策略。
执行iptables stop --->停止iptables 进程 (不卸载nf_conntrack)
最后的解决方案:
执行iptables stop --->卸载nf_conntrack模块(sysctl的nf_conntrack 选项恢复默认值)--->停止iptables 进程
执行iptables start --->启动nf_conntrack模块 (加载/etc/sysctl中的配置)---> 应用iptables策略。
方法是:
sed -ri 's/IPTABLES_SYSCTL_LOAD_LIST=.*/IPTABLES_SYSCTL_LOAD_LIST="net.nf_conntrack"/g' /etc/init.d/iptables
最后,奉劝诸位同学,对于大流量大并发的机器。放弃对nf_conntrack的引用才是正解。当kenel的nf_conntrack参数的值设置不合理当执行/etc/init.d/iptables stop时候直接会导致机器重启,介,我亲身经历过!
方法一:删除连接跟踪模块`lsmod | grep nf_conntrack`,不使用连接状态的跟踪功能。
rmmod nf_conntrack_ipv4 rmmod nf_conntrack_ipv6 rmmod xt_state rmmod xt_CT rmmod xt_conntrack rmmod iptable_nat rmmod ipt_REDIRECT rmmod nf_nat rmmod nf_conntrack
# 禁用 nf_conntrack 模块 blacklist nf_conntrack blacklist nf_conntrack_ipv6 blacklist xt_conntrack blacklist nf_conntrack_ftp blacklist xt_state blacklist iptable_nat blacklist ipt_REDIRECT blacklist nf_nat blacklist nf_conntrack_ipv4
方法二:
使用祼表,添加“不跟踪”标识。
iptables -t raw -A PREROUTING -p tcp -m tcp --dport 8983 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp -m tcp --sport 8983 -j NOTRACK
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8983 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
或者,直接将所有访问,忽略跟踪:
iptables -t raw -A PREROUTING -p tcp -j NOTRACK
iptables -t raw -A PREROUTING -p udp -j NOTRACK
iptables -t raw -A OUTPUT -p tcp -j NOTRACK
iptables -t raw -A OUTPUT -p udp -j NOTRACK
参考:
http://my.oschina.net/kisops/blog/150995
转载于:https://blog.51cto.com/linuxadmin/1742720
iptables踩坑记相关推荐
- android 重新编译内核,[原创]华为内核重新编译踩坑记
华为内核重新编译踩坑记 前几天有朋友找我帮他跟一个加密,由于js太乱了,想从app入手,于是打算用frida脱壳,结果发现报错 Failed to attach: remote_write PTRAC ...
- python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django
<>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...
- 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题
❝ 本系列每篇文章都是从一些实际的 case 出发,分析一些生产环境中经常会遇到的问题,抛砖引玉,以帮助小伙伴们解决一些实际问题.本文介绍 Flink 时间以及时区问题,分析了在天级别的窗口时会遇到的 ...
- Spring @Transactional踩坑记
@Transactional踩坑记 总述 Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务 ...
- 服务器重新部署踩坑记
服务器重新部署踩坑记 Intro 之前的服务器是 Ubuntu 18.04 ,上周周末想升级一下服务器系统,从 18.04 升级到 20.04,结果升级升挂了... 后来 SSH 始终连不上,索性删除 ...
- IdentityServer 部署踩坑记
IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...
- windows container 踩坑记
windows container 踩坑记 Intro 我们有一些服务是 dotnet framework 的,不能直接跑在 docker linux container 下面,最近一直在折腾把它部署 ...
- Spark踩坑记——数据库(Hbase+Mysql)转
转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
- android小程序_小程序踩坑记
小程序踩坑记 希望这个文章能尽量记录下小程序的那些坑,避免开发者们浪费自己的生命来定位到底是自己代码导致的还是啥神秘的字节跳变原因. 前记 小程序大多数坑是同一套代码在不同平台上表现不一致导致的,微信 ...
最新文章
- 循环map_python函数 map函数—比for还好用的循环
- % %和ltscripte runat=server的区别
- 文巾解题 182. 查找重复的电子邮箱
- python—操作MySQL查询表中数据
- POJ--2104 K-th Number (主席树模版题)
- 数据库表命名 单数复数_数据是还是数据是? “数据”一词是单数还是复数?
- 加速国内 Github 访问,下载的9种方案!
- 自动驾驶汽车自主决策与规划技术(一):里程定位于全局定位简介
- 相干光通信系统的调制与解调
- 对DNN的一些高层架构设想
- go语言结构体标签的意义
- 不填写内容用哪个斜杠代替_python3用单反斜杠代替双反斜杠
- Error pulling origin: error: The following untracked working tree files would be overwritten by...
- Git----远程仓库之添加远程库02
- SegmentFault 社区访谈 | 有位公子在奇舞
- 吴伯凡-认知方法论-我的休息
- 预祝大家平安夜圣诞节快乐
- Hadoop常用命令介绍
- openwrt STA+AP共存模式
- AR模型,MA模型,ARMA模型,GARCH模型