[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:104973] Re: SSHの大量不正アクセスログ


進戸と申します。

On Wed, 25 May 2005 17:08:38 +0900
banister125 <banister125@xxxxxxxxxxxxx> wrote:

>はじめまして。望月と申します。
>
>あるサイトの管理を行っておりOSはRedHat9を使用しております。
>今月に入りsshdに関する以下のようなログが/var/log/secuerファイルに書き込
>まれており、最初はいたずら程度に考えていたのですが、今月に入り一日何百件
>も来るようになり、本格的に対策を考えております。


私も同じような大量のアクセスログが気になったので、/etc/hosts.allowに
sshd : ALL : spawn ( /usr/local/bin/block_ssh_attack.sh %c 5 ) : allow
を加え、シェルスクリプト /usr/local/bin/block_ssh_attack.sh を以下に示す内容で作
成します。

ログを見て、一定行数遡って、接続元ホストがsshの認証に失敗しているホスト
があれば、iptables で接続をブロックします。
WHITELIST変数に書かれたホストはブロックしません。

atでスケジュールして、一定時間後にブロックを解除するという仕組みです。

最初の接続や同一の接続の中でのログインの試みはログに出ますが、ログの量と
いう意味では効果があります。
あと、アタックできる回数も減るので万が一パスワードが破られてしまうような
確率も下がるはずです。

尚、egrepで検索しているログのパターンは自分の環境に合わせて編集する必要
があります(変数化すべきですね)。


#!/bin/sh

# arg1 : ip addr ( can be given by tcpd )
# arg2 : suspend time in minutes

export NUMLOGBACK=30
export LOGFILE=/var/log/secure
export SSHPORT=22
export WHITELIST="hosta.example.org hostb.example.org"
export MAILCMD=mail

export IPADDR=$1
export SUSPENDMIN=$2


whitelist()
{
    #echo "checking white list ${IPADDR?}"
    for i in $WHITELIST;do
    #host $i | awk '{ print $4 }'
        host $i | awk '{ print "x" $4 "x" }' | grep "x${IPADDR?}x" > /dev/null && return 0;
    done
    #echo "not in white list"
    return 1;
}

tail -${NUMLOGBACK?} ${LOGFILE?} | \
    egrep -i "sshd.*(Illegal user [-a-zA-Z0-9\.]+|Failed password for (root|invalid user [-a-zA-Z0-9\.]+)|Did not receive identification string) from ${IPADDR?} " > /dev/null && \
      export MATCH=TRUE

[ x$MATCH = xTRUE ] && whitelist && export MATCH=TRUE

if [ x$MATCH = xTRUE ]; then
    # echo "match"
    iptables -L -n | grep "REJECT.*${IPADDR?}" > /dev/null
    if [ $? != 0 ]; then
        #echo "not in the list"
        iptables -A INPUT -s ${IPADDR?} -p tcp --dport ${SSHPORT?}:${SSHPORT?} -j REJECT
        echo "iptables -D INPUT -s ${IPADDR?} -p tcp --dport ${SSHPORT?}:${SSHPORT?} -j REJECT" | \
            at "now+${SUSPENDMIN?}min" > /dev/null

        logger -p authpriv.info -t SSHBLOCK "blocking ip ${IPADDR?} for ${SUSPENDMIN?} minutes"

        echo "blocking ssh from ip `host ${IPADDR?}`" | $MAILCMD -s sshd-block-${IPADDR?} root

    fi
else
        echo `host ${IPADDR?}` | $MAILCMD -s sshd-${IPADDR?} root
        logger -p authpriv.info -t SSHBLOCK "ip ${IPADDR?} allowed"
fi


-- 
Kentaro Shinto

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: