我正在运行 CentOS 5.3,并想禁用 nf_conntrack 模块以提高 haproxy 的网络性能。我正在运行带有一些简单规则的 iptables。我实际上不需要连接跟踪。
我在 Rackspace 云服务器上运行,因此无法运行自定义内核。我尝试运行 modprobe,但不起作用。
[mmarano@w1 w1]$ sudo modprobe -n -r nf_conntrack
FATAL: Module nf_conntrack is in use.
[mmarano@w1 w1]$ uname -a
Linux w1.somewhere.com 2.6.24-23-xen #1 SMP Mon Jan 26 03:09:12 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux
[mmarano@w1 w1]$ cat /etc/redhat-release
CentOS release 5.3 (Final)
我想在删除它之后继续运行 iptables,所以我不能完全放弃所有的 netfilters。有人有什么想法吗?
答案1
删除对 iptables 中状态模块的任何引用。因此,没有类似
-A 输入 -m 状态 --状态相关,已建立 -j 接受
状态模块需要 nf_conntrack (ip_conntrack) 模块
删除 /etc/sysconfig/iptables-config 中的以下行(如果存在)
IPTABLES_MODULES="ip_conntrack_netbios_ns"
该模块需要 ip_conntrack,而我们正试图放弃它。
重新加载 iptables,但不包含您的状态规则。
sudo iptables -F
# 添加你的真实规则
删除模块。我不得不使用:
sudo modprobe -r xt_NOTRACK nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state
sudo modprobe -r nf_conntrack
确认你没有对 /proc/net/nf_conntrack 的引用
答案2
那么将模块添加到怎么样
/etc/modprobe.d/blacklist.conf
?你有没有尝试过:
rmmod -f modulename
虽然:
-f --force 这个选项非常危险:除非 CONFIG_MODULE_FORCE_UNLOAD 在内核编译时被设置。 使用此选项,您可以删除正在使用的模块, 或不是设计为可移除的,或已被标记为 不安全(参见 lsmod(8))。
答案3
如果您正在运行 Haproxy,则需要 iptables 中的两种类型的规则来禁用端口 80 中的 conntrack:一种用于从客户端到您的平衡器的连接,另一种用于从平衡器到后端的连接。
这是一个有效的例子:
iptables -t raw -I PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -I PREROUTING -p tcp --sport 80 -j NOTRACK
iptables -t raw -I OUTPUT -p tcp --dport 80 -j NOTRACK
iptables -t raw -I OUTPUT -p tcp --sport 80 -j NOTRACK
答案4
这些将完全禁用连接跟踪。
iptables -t raw -I PREROUTING -j NOTRACK
iptables -t raw -I OUTPUT -j NOTRACK