mod_evasive DOSSystemCommand不工作

我试图让mod_evasive发射一个脚本来添加一个iptables规则来拒绝违规的主机。 我已经尝试了这两个答案的build议,但我仍然无法得到它的工作。 除了链接的post之外,我正在尝试运行本文所述的脚本。

我的Apacheconfiguration有这个

DOSSystemCommand "sudo -u root /root/scripts/ban_ip.sh %s"

脚本有这个

 #!/bin/sh IP=$1 IPTABLES=/sbin/iptables $IPTABLES -A banned -s $IP -p TCP -j DROP echo "$IPTABLES -D banned -s $IP -p TCP -j DROP" | at now + 5 minutes 

我创build了一个“禁止”链(我也试图把它添加到INPUT链无济于事)

我的/ etc / sudoers看起来像这样:

apache ALL=(root) NOPASSWD: /root/scripts/ban_ip.sh *

我禁用了SELinux,以确保它不会阻碍。 我可以su apache --shell=/bin/bash并运行sudo /root/scripts/ban_ip.sh 10.10.10.10 ,它工作得很好。

但是当源代码在mod_evasion中被标记为恶意时,它会拒绝403s的主机,但是它从不运行该脚本,所以我在这里没有获得任何优势。

还有什么我可以尝试得到这个工作?

我的系统工作! 🙂

Requeriments:

  • 须藤
  • 可选:heirloom-mailx(在我的情况)

注意:您可以使用其他邮件代理并修改脚本。

现在我的configuration:

mod_evasive(/etc/apache2/mods-enabled/mod-evasive.conf)

 <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 10 DOSSiteCount 150 DOSPageInterval 2 DOSSiteInterval 2 DOSBlockingPeriod 10 DOSSystemCommand "sudo /usr/local/bin/ddos_system.sh %s" DOSLogDir "/tmp" </IfModule> 

sudoers文件

 www-data ALL=NOPASSWD: /sbin/iptables *, /usr/bin/at * 

ddos_system.sh(复制到/ usr / local / bin)

 #!/bin/bash #set -x [ -z $1 ] && (echo "Usage: $0 <sourceip>"; exit 1) [ -x /usr/bin/at ] || (echo "Please, install 'at'"; exit 1) ############# ## OPTIONS # SOURCEIP="$1" HOSTNAME=$(/bin/hostname -f) BODYMAIL="/tmp/bodymailddos" MODEVASIVE_DOSLogDir="/tmp" FROM="Anti DDOS System <[email protected]>" # Multiple accounts separated by commas TO="[email protected] [email protected]" # Time-units can be minutes, hours, days, or weeks BANNEDTIME="1 minute" # ## ############ # Custom mail message { echo "Massive connections has been detected from this source IP: $SOURCEIP The system has blocked the IP in the firewall for $BANNEDTIME. If the problem persist you should block that IP permanently. - Anti DDOS System -" } > $BODYMAIL /sbin/iptables -I INPUT -s $SOURCEIP -j DROP echo "/sbin/iptables -D INPUT -s $SOURCEIP -j DROP" | at now + $BANNEDTIME cat $BODYMAIL | /usr/bin/mail -r "$FROM" -s "DDOS Attack Detected - $HOSTNAME" $TO rm -f "$MODEVASIVE_DOSLogDir/dos-$SOURCEIP" 

MINI FAQ

问:最后一行呢? (rm -f …)

答:当mod_evasive检测到一些攻击时,它在名为“dos- [sourceip]”(例如dos-8.8.8.8)的“​​DOSLogDir”中创build文件(locking文件)并执行一次“DOSSystemCommand”直到该文件消失。 所以当你执行“iptables”时,你应该删除下一个检查的locking文件。

在Debian 7testing

祝你好运,问候。

我尝试了Beast响应的方法(谢谢!!),不得不改变这个片段使其工作:

 /sbin/iptables -I INPUT -s $SOURCEIP -j DROP echo "/sbin/iptables -D INPUT -s $SOURCEIP -j DROP" | at now + $BANNEDTIME 

基本上我不得不把sudo添加到命令/ sbin / iptables和脚本里面:

 sudo /sbin/iptables -I INPUT -s $SOURCEIP -j DROP echo "sudo /sbin/iptables -D INPUT -s $SOURCEIP -j DROP" | sudo at now + $BANNEDTIME 

我花了一段时间才注意到这一点,所以我希望在这里张贴可以帮助别人尝试这个解决scheme。