如何进行Linux Netfilter调优

发布时间:2021-10-22 11:23:04 作者:柒染
来源:亿速云 阅读:454

这篇文章将为大家详细讲解有关如何进行Linux Netfilter调优,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

如果您正在为高流量的 Web/DNS 服务器提供服务,并且最近使该服务器 PING 丢失并且并非所有 HTTP 请求都成功。您可以开始检查系统日志。并且如果您看到类似下面的内容,那么下面的指南将帮助您调整 Linux 服务器以正确处理流量负载。

Mar 22 21:25:55 localhost kernel: nf_conntrack: table full, dropping packet.
Mar 22 21:26:00 localhost kernel: printk: 11 messages suppressed.
Mar 22 21:26:00 localhost kernel: nf_conntrack: table full, dropping packet.
Mar 22 21:26:05 localhost kernel: printk: 16 messages suppressed.

状态查看

为了完成任务,NAT-server(一般指的是 iptables) 需要记录所有通过它的连接。无论是 “ping” 还是某人的 “ICQ”,NAT-server 都会记录在一个特殊的表中并跟踪所有会话。当会话关闭时,相关记录将从连接跟踪表中删除。这个记录表的大小是固定的,所以如果通过服务器的流量很大,但表太小,那么 NAT-server 就会开始丢弃数据包,中断会话。为了避免这样的麻烦,有必要适当增加连接跟踪表的大小。

临时调整

临时调整是临时性的,重启节点好配置值将会丢失。

sysctl -w net.netfilter.nf_conntrack_max=1048576
sysctl -w net.nf_conntrack_max=1048576

永久调整

要使其配置在重新启动后永久存在,需要将这些值添加到 sysctl.conf

echo 'net.netfilter.nf_conntrack_max' = 1048576 >> /etc/sysctl.conf
echo 'net.nf_conntrack_max = 1048576' >> /etc/sysctl.conf
sysctl  -p

如果服务器中的 RAM 少于 1 GB,建议不要设置太大的值。

哈希表(hash-table)

哈希表大小是只读的,不能在 /etc/sysctl.conf 文件中设置值。64 位 Linux 系统中,4G 内存默认 16384,8G 内存默认 65536,16G 翻倍,以此类推。

给哈希表扩容的影响

主要是内存使用增加,32 位系统还要关心内核态的地址空间够不够。

netfilter 的哈希表存储在内核态的内存空间,这部分内存不能 swap,操作系统为了兼容 32 位,默认值往往比较保守。

哈希表大小调整

需要通过内核模块的方式修改:

减少超时时间

NAT-server 只跟踪通过它的 活动 的会话。如果一个会话很长时间是空闲的,不活跃,它将会因为超值而被关闭。当会话关闭时,关于它的信息将被删除,以便连接跟踪表不会溢出。

但是,如果超时的默认值很大,流量较大时候,即使将 nf_conntrack_max 扩展到了极限,跟踪表仍然有溢出的风险。为此,必须在 NAT-server 上正确设置连接跟踪超时。

可以执行以下命令查看默认值:

sysctl -a | grep conntrack | grep timeout

对于通外网的服务器,考虑调整以下参数,减少 DDoS 的危害:

其他值得注意的参数:

这几个倒是比较合理,小于等于可能遇到的极端情况,但如果不想半关闭的连接的记录继续占着宝贵的哈希表,提早清了似乎也没什么问题:

调整参数

添加以下配置参数到 /etc/sysctl.conf 文件,最后执行 sysctl -p

net.netfilter.nf_conntrack_icmp_timeout=10
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
net.netfilter.nf_conntrack_tcp_timeout_established=600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
net.netfilter.nf_conntrack_tcp_timeout_last_ack=10

关于如何进行Linux Netfilter调优就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. Linux网络服务之Linux防火墙
  2. 如何进行Linux系统性能调优

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux netfilter

上一篇:如何使用js不同类型的工厂函数

下一篇:Vue3.x知识地图之学前了解与应用创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》