如何在不重新编译内核的情况下禁用 CentOS 5.3 中的 nf_conntrack 内核模块

如何在不重新编译内核的情况下禁用 CentOS 5.3 中的 nf_conntrack 内核模块

我正在运行 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

  1. 删除对 iptables 中状态模块的任何引用。因此,没有类似

    -A 输入 -m 状态 --状态相关,已建立 -j 接受

    状态模块需要 nf_conntrack (ip_conntrack) 模块

  2. 删除 /etc/sysconfig/iptables-config 中的以下行(如果存在)

    IPTABLES_MODULES="ip_conntrack_netbios_ns"

    该模块需要 ip_conntrack,而我们正试图放弃它。

  3. 重新加载 iptables,但不包含您的状态规则。

    sudo iptables -F

    # 添加你的真实规则

  4. 删除模块。我不得不使用:

    sudo modprobe -r xt_NOTRACK nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state

    sudo modprobe -r nf_conntrack

  5. 确认你没有对 /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

相关内容