将大量 htaccess 拒绝规则移至 iptables

将大量 htaccess 拒绝规则移至 iptables

我使用的是 CentOS 5.7 64 位系统并运行 Apache。目前,我的网站有一个 .htaccess 文件,其中包含数千条“拒绝来自 IP”规则(从 cPanel 添加)。我的服务器最近负载很高,我怀疑是这些规则导致了问题。会吗?

我正在考虑将这些规则移至 iptables 包含文件,但不知道如何设置。有什么建议吗?谢谢。

转移以下内容

deny from 8.8.8.8

-A RH-Firewall-1-INPUT -i eth0 -s 8.8.8.8 -j DROP

SAR 结果

# sar -q

01:00:02 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
01:10:01 PM        41       359     42.59     39.85     26.52
01:20:11 PM        37       267     37.34     33.99     29.45
01:30:02 PM        19       242     24.99     30.76     30.85

# sar

01:00:02 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
01:10:01 PM       all     81.50      0.14     18.23      0.01      0.00      0.12
01:20:11 PM       all     78.41      0.00     16.96      0.01      0.00      4.62
01:30:02 PM       all     82.48      0.00     15.89      0.01      0.00      1.62
01:40:01 PM       all     84.48      0.01     15.05      0.00      0.00      0.46

最佳结果

top - 19:03:02 up  6:09,  1 user,  load average: 9.49, 15.19, 13.19
Tasks: 211 total,  34 running, 175 sleeping,   0 stopped,   2 zombie
Cpu(s): 77.2%us, 22.6%sy,  0.0%ni,  0.1%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   4117724k total,  1678008k used,  2439716k free,    79456k buffers
Swap:  8385848k total,        0k used,  8385848k free,   780952k cached

答案1

我不太确定您所看到的内容是否归因于您的拒绝规则,但这里有一行代码可以帮助您转移规则(至少是暂时的):

grep deny .htaccess | awk {'print $3;'} | while read i; do iptables -A RH-Firewall-1-INPUT -i eth0 -s ${i} -j DROP; done

请注意,这会将 DROP 规则直接放在主 INPUT 链的末尾,如果不重新启动 iptables,则很难取消这些规则。如果您想要更轻松地撤消某些操作,那么您可能应该先创建一个额外的表,如下所示:

iptables -A RH-Firewall-1-INPUT -j HTACCESS_TEST
grep deny .htaccess | awk {'print $3;'} | while read i; do iptables -A HTACCESS_TEST -i eth0 -s ${i} -j DROP; done

在此之后,您需要注释掉 .htaccess 中的拒绝行,并可能需要重新加载 Apache 以使其生效。

相关内容