SSHGuard使用時の iptables再起動の注意点と、SSHGuard起動・停止スクリプト

ALL
スポンサーリンク

以下で紹介した SSHGuard使用時の iptables再起動の注意点です。
また、SSHGuard起動・停止スクリプトを作りましたので、紹介します。

SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果
メールサーバへの総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処
apacheユーザ認証(HTTP認証)への総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処

SSHGuard使用時の iptables再起動の注意点ですが、iptables を再起動する場合、SSHGuardも停止・再起動する必要があります。
そうしないと、次の流れで問題が起こるからです。

(1) IPアドレス xx.xx.xx.xx から攻撃を受ける
(2) SSHGuard が xx.xx.xx.xx からの攻撃を検出する
(3) SSHGuard は xx.xx.xx.xx をブロックするルールを iptables に登録する
(4) iptables を再起動する。ここで、(3)で登録したルールは消える。
(5) 再度、IPアドレス xx.xx.xx.xx から攻撃を受ける
(6) SSHGuard は一度(3) で xx.xx.xx.xx をブロックするルールを iptables に登録したので、もう何もしない。
(7) ところが (4)で、そのルールは消えているので攻撃に無防備になっている。

この問題を避けるため、iptables を再起動する場合、SSHGuardも停止・起動する必要があります。

そこで、手軽に SSHGuard を停止・起動するスクリプトを作成しました。

以下、rootで作業します。

まず、次のファイルを作成して下さい。

/usr/local/sbin/exec_sshguard.sh

/usr/bin/tail -n0 -F /var/log/secure /var/log/httpd/access_log /var/log/httpd/ssl_access_log | /usr/bin/perl /usr/local/sbin/log2sshguardsig.pl | /usr/local/sbin/sshguard -l - >/dev/null 2>&1
exit 0

/etc/init.d/sshguard

#!/bin/sh
#
# SSHGuard      Start SSHGuard
#
# chkconfig: 2345 98 02
# description:  Starts and stops SSHGuard
#
start() {
    echo "starting SSHGuard:"
    sh /usr/local/sbin/exec_sshguard.sh &
    return 0
}
stop() {
    SHPID=`ps auxw|grep exec_sshguard | awk '{print $2}'`
    kill `ps ho pid --ppid=${SHPID}` >/dev/null 2>&1
    iptables -F sshguard
    echo "stopped SSHGuard:"
    return 0
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo $"Usage: $0 {start|stop}"
        exit 2
esac
exit 0

次のコマンドを実行します。

chmod +x /etc/init.d/sshguard
chkconfig --add /etc/init.d/sshguard

/etc/rc.local の以下行を削除します。

/usr/bin/tail -n0 -F /var/log/secure /var/log/httpd/access_log /var/log/httpd/ssl_access_log | /usr/bin/perl /usr/local/sbin/log2sshguardsig.pl | /usr/local/sbin/sshguard -l - >/dev/null 2>&1 &

以上で設定は完了です。

/etc/init.d/sshguard stop で SSHGuardを停止、/etc/init.d/sshguard start で開始します。
また、システム起動時にも自動的に SSHGuard が起動します。

iptables を再起動する場合、SSHGuardも停止・再起動する必要がありますが、次のようにします。

iptables停止時

/etc/init.d/iptables stop
/etc/init.d/sshguard stop

iptables開始時

/etc/init.d/iptables start
/etc/init.d/sshguard start

コメント