web-dev-qa-db-ja.com

mod_evasiveDOSSystemCommandが機能しない

Mod_evasiveを取得してスクリプトを起動し、問題のあるホストを拒否するiptablesルールを追加しようとしています。私は両方の答えからの提案を試しました ここ しかし私はまだそれを機能させることができません。リンクされている投稿とは別に、私は概説されているようにスクリプトを実行しようとしています この記事で

私のApache設定にはこれがあります

_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
_

「禁止された」チェーンを作成しました(これを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で悪意のあるものとしてフラグが立てられると、403でホストを拒否しますが、スクリプトを実行することはないため、ここでは実際には何の利点も得られません。

これを機能させるために他に何を試みることができますか?

3
Safado

私のシステムは動作します! :)

必要条件:

  • 須藤
  • オプション:heirloom-mailx(私の場合)

注:他のメールエージェントを使用して、スクリプトを変更できます。

今私の設定:

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

Q:最後の行はどうですか? (rm -f ...)

A:mod_evasiveが攻撃を検出した場合「DOSLogDir」に「dos- [sourceip]」(例:dos-8.8.8.8)という名前のファイル(ロックファイル)を作成し、そのファイルが消えるまで「DOSSystemCommand」を1回実行します。したがって、「iptables」を実行するときは、次のチェックのためにロックファイルを削除する必要があります。

Debian7でテスト済み。

頑張ってください。

6
Beast

私はビーストレスポンスからのアプローチを試しました(ありがとう!!)そしてそれを機能させるためにこのフラグメントを変更しなければなりませんでした:

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

基本的に、スクリプト内でコマンドにSudoを追加する必要がありました/ sbin/iptablesおよびat

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

これに気付くのに少し時間がかかりましたので、ここに投稿することで他の人がこの解決策を試すのに役立つことを願っています。

3
Scops

私はそれを機能させるためにビーストによる上記の答えをなんとか使用しましたが、いくつかの調整が必要でした。

Sudoersファイル(/ etc/sudoers)にこの行を追加する必要があります。そうしないと、スクリプトが実行されませんでした。

www-data ALL=NOPASSWD: /usr/local/bin/ddos_system.sh *

これらのコマンドは、適切なアクセス許可を与えてスクリプトを保護するためにも必要です。

mkdir /var/log/mod_evasive
chown www-data /var/log/mod_evasive

chown root /usr/local/bin/ddos_system.sh 
chmod 700 /usr/local/bin/ddos_system.sh

また、Sudoコマンドを追加するためにスクリプトを変更する必要はありませんでした。

使った

DOSLogDir           "/var/log/mod_evasive"

また、このパスを使用するようにスクリプトを更新しました。

0
otterslide