由于前几天我收到我的服务器DDOS atacks。 我已经在Apache中安装mod_evasive,它的工作原理正确! 它写日志,并发送与IP地址的电子邮件。
但有一个问题:Apache不会在iptables中添加DROP规则(或者至less不会出现)
我在Plesk中使用apache,configuration文件是这样的:
DOSHashTableSize 3097 DOSPageCount 1 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 600 DOSSystemCommand "sudo /sbin/iptables -A INPUT -s %s -j DROP" DOSEmailNotify "[email protected]" DOSLogDir "/var/log/evasive/"
这是我的“sudoers”文件:
apache ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT -s [0-9.]* -j DROP
但是这并没有帮助。
提前致谢。
允许apache使用root权限运行iptables听起来像是一个非常糟糕的主意 – 我认为你已经拥有root权限。 如果是我,我会使用代理程序(如fail2ban)筛选日志并编写规则。
我写visudo这个:
你有没有检查这是部署到/ etc / sudoers?
从手册页:
如果Cmnd具有关联的命令行参数,那么Cmnd中的参数必须完全匹配命令行上用户给出的参数(或者如果有的话,匹配通配符)
你使用了一个正则expression式,而不是通配符。 尝试:
apache ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT --dport 80 -s * -j DROP
尽pipe更好的想法是将function封装在脚本中,而不是直接调用iptables。 (注意我已经明确地设置了端口,以避免你locking自己 – 我认为你有ssh访问)。
在“ visudo ”中,将ALL更改为root,并跳过iptables的参数:
apache ALL=(root) NOPASSWD: /sbin/iptables
确保领先的apache是运行Web服务器的用户的名字。 (用ps -ef|egrep -e 'apache|http'
然后改变你的DOSSystemCommand
DOSSystemCommand "sudo -u root /sbin/iptables -A INPUT -s %s -j DROP"
更好的解决scheme:制作一个由root拥有的脚本,其他人不能修改,使脚本运行iptables,并让apache调用脚本(在sudo中启用该脚本而不是iptables)。