我试图改善我的服务器的性能,通过调整iptables不跟踪TCP连接的状态。 我正在看这个指南: http : //cotdp.com/2011/07/nginix-on-a-256mb-vm-slice-24000-tps/
但是,如果我做了以下任何事情,似乎所有传出连接都被切断:
删除这条规则: INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT添加这些:
iptables -t raw -I OUTPUT -j NOTRACK iptables -t raw -I PREROUTING -j NOTRACK
立即做出任何更改后,使“ping google.com”返回一个关于不能find“google.com”(即DNS停止parsing)的错误。
以下是在启动时加载的规则,但其他规则则由fail2ban添加:
*过滤 -Ainput-i lo -j接受 - input! -i lo -d 127.0.0.0/8 -j REJECT -Ainput-m状态 - 状态ESTABLISHED,相关-j接受 -A OUTPUT -j ACCEPT -Ainput-p icmp -j ACCEPT -Ainput-p tcp --dport ssh -j ACCEPT -A INPUT -p tcp --dport http -j ACCEPT -Ainput-p tcp --dport https -j ACCEPT -Ainput-p tcp --dport smtp -j ACCEPT -A INPUT -p tcp --dport ssmtp -j ACCEPT -Ainput-j拒绝 -A FORWARD -j拒绝 承诺
这是iptables的输出–list:
连锁input(政策接受) 目标人select源目的地 fail2ban-ssh tcp - 任何地方多端口dport ssh fail2ban-ssh-ddos tcp - 任何地方多端口dport ssh fail2ban-pam-generic tcp - 在任何地方 随时随地接受 拒绝所有 - 任何地方回环/ 8拒绝 - 与icmp-port-unreachable 接受所有 - 任何地方的任何地方状态RELATED,ESTABLISHED 接受icmp - 随时随地 接受tcp - 任何地方任何地方tcp dpt:ssh 接受TCP - 在任何地方tcp dpt:www 接受tcp - 任何地方任何地方tcp dpt:https 接受tcp - 任何地方任何地方tcp dpt:smtp 接受TCP - 在任何地方tcp dpt:ssmtp 拒绝所有 - 在任何地方拒绝 - icmp-port-unreachable 连锁FORWARD(政策接受) 目标人select源目的地 拒绝所有 - 在任何地方拒绝 - icmp-port-unreachable 链式输出(策略ACCEPT) 目标人select源目的地 随时随地接受 链fail2ban-pam-generic(1引用) 目标人select源目的地 随时随地返回 链fail2ban-ssh(1引用) 目标人select源目的地 随时随地返回 chain fail2ban-ssh-ddos(1引用) 目标人select源目的地 随时随地返回
你有一个阻止所有传入stream量的规则:
-A INPUT -j REJECT
而你停止连接跟踪,所以接受build立的连接数据包的规则不再起作用:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
所以你的DNS数据包出去了,没有被跟踪,然后被第一个规则拒绝。
您需要启用第二条规则的跟踪才能生效,或添加规则以允许来自“良好”来源的传入stream量。
Linux连接跟踪不只是跟踪TCP连接,还跟踪UDP伪连接和其他各种事情。
没有notrack规则会发生什么。
随着notrack规则会发生什么
那么如何解决这个问题? 要么你必须明确地允许响应stream量而不依赖于你的状态跟踪,或者你必须对你的notrack规则有更多的select。
对于明确允许响应stream量的DNS可能是合理的。 你知道你的DNS服务器是什么,你可能相信它。
如果您的服务器需要访问互联网上的资源,那么在没有连接跟踪的情况下进行连接就意味着使用防火墙效率低下的方法。
我希望只要将notrack应用于networking服务器,就可以获得很大的性能优势,而且可以减less很多的痛苦。 例如
iptables -t raw -I OUTPUT -p tcp --sport http -j NOTRACK iptables -t raw -I PREROUTING -p tcp --dport http -j NOTRACK