网站首页 > 博客文章 正文
原创不易
前篇: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内核参数?
你 发表评论:
欢迎- 368℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 347℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 343℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (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)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)