我使用的是 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 以使其生效。