网站首页 > 博客文章 正文
原创不易
前篇:iptables 使用conntrack ctstate 提高防火墙处理效率
前篇谈到了iptables使用conntrack ctstate提高防火墙效率的问题,有朋友私信:在web服务器上启用了iptables常常出现“ip_conntrack: table full, dropping packet”,这种情况原因是什么?应该怎么处理?
我们先看一下iptables对出入站的数据包的处理过程图:
iptables整个处理过程可以说是十分繁琐的。
数据包进入,先经过raw表,进入到图中“Connection (state) Tracking”位置,开启连接跟踪处理,也就是从这个位置起iptables就会建立跟踪表来跟踪记录每一个连接情况,当服务器连接量较多,跟踪表空间消耗完,就会出现“ip_conntrack: table full, dropping packet”错误提示。
有没有办法解决这个问题呢?
一、通用解决方法:扩表及调整tcp超时时间
1、扩表:加大ip_conntrack跟踪表的大小
(1)先查看原来的跟踪表大小:
cat /proc/sys/net/netfilter/nf_conntrack_max
(2)/etc/sysctl.conf添加项目
net.netfilter.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_buckets = 49152 #计算哈希表大小(通常为 max 的 1/8)
(3)执行生效
sudo sysctl -p
(4)实时查看当前连接数
watch -n 1 "cat /proc/sys/net/netfilter/nf_conntrack_count"
2、调整tcp超时时间
(1)/etc/sysctl.conf添加项目
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
(2)实时监控超时连接
watch -n 1 "conntrack -L | grep -E 'TIME_WAIT|FIN_WAIT'"
(3)超时时间建议值
established 状态:默认 432000 秒(5天),若设置过短(如 300 秒)可能导致长连接异常中断。推荐值:至少保留 3600(1小时),根据业务需求调整。
time_wait 状态:默认 60 秒,用于处理延迟的 TCP 报文。设置 120 秒是安全的,但需确保服务器能处理大量短连接。
close_wait 状态:默认 60 秒,表示等待应用层关闭连接。设置过低可能导致连接强制终止。
fin_wait 状态:默认 120 秒,确保 TCP 连接正常终止。
3、注意问题
(1)如果系统是老版本的请如下修改(新版本使用 nf_conntrack 替代 ip_conntrack):
判断新老:cat
/proc/sys/net/ipv4/ip_conntrack_max,有数值提示就是老版本。
vi /etc/sysctl.conf
net.ipv4.ip_conntrack_max = 393216
net.ipv4.netfilter.ip_conntrack_max = 393216
修改ip_conntrack timeout时间
vi /etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
(2) 如果设定参数不生效,可能是模块没加载
sudo modprobe nf_conntrack # 加载模块
sudo sysctl -p # 重新加载配置
二、釜底抽薪:用好raw表
回到iptables处理过程图,能看到“Connection (state) Tracking”位置总是在raw(prerouting,output)之后。如果将压力非常大的服务(tcp 80)在raw表中标明其服务不再进行跟踪处理了不就解决了吗?你想的很对!这就是iptables raw表的主要用途。
(1)绕过连接跟踪:raw表用于在连接跟踪机制(conntrack)之前处理数据包,通过 NOTRACK 标记可以直接跳过连接跟踪表。
(2)性能优化:适用于高并发场景(如Web服务器、游戏服务器),可避免 conntrack 表溢出导致的性能瓶颈或丢包。
(3)示例:设置 raw 表规则(跳过HTTP/HTTPS流量跟踪)
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp --sport 80 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp --dport 443 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp --sport 443 -j NOTRACK
(4)测试HTTP服务访问,观察 conntrack 表中无相关条目
conntrack -L | grep 80
通过以上配置,你的服务器可以在高并发场景下显著减少 conntrack 的开销。
- 上一篇: memcache安装与调优部署文档(Linux)
- 下一篇: 就3张图,直接搞懂TCP的11种状态!
猜你喜欢
- 2025-05-03 什么是TCP?什么是UDP?它们有什么区别?
- 2025-05-03 Linux:TCP 大量连接状态为CLOSE_WAIT
- 2025-05-03 面试常问!TCP 三次握手与四次挥手详解
- 2025-05-03 TCP可靠传输的一点知识(简述tcp可靠传输的工作原理)
- 2025-05-03 图解TCP、UDP,流量控制,拥塞控制,一次看懂
- 2025-05-03 一篇文章读懂HTTPS及其背后的加密原理
- 2025-05-03 TCP三次握手和四次挥手详解(tcp三次握手的作用)
- 2025-05-03 面试必备TCP(二):四次挥手(四次挥手面试题)
- 2025-05-03 简述:TCP四次挥手(断开连接)(tcp 4次挥手)
- 2025-05-03 腾讯云国际站:为什么需要调整TCP内核参数?
你 发表评论:
欢迎- 07-08Google Cloud Platform 加入支持 Docker 的容器引擎
- 07-08日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 07-08美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- 07-08GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 07-08谷歌推出Cloud Dataproc,缩短集群启动时间
- 07-08Infovista与Google Cloud携手推进射频网络规划革新
- 07-08比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- 07-08BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- 最近发表
-
- Google Cloud Platform 加入支持 Docker 的容器引擎
- 日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 谷歌推出Cloud Dataproc,缩短集群启动时间
- Infovista与Google Cloud携手推进射频网络规划革新
- 比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- NCSA和Google Cloud合作开发AI驱动的网络防御系统,加强泰国网络空间的安全性
- SAP将在沙特阿拉伯 Google Cloud 上推出BTP服务
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)