SSHの件でアクセスが多いようなので

スクリプトだけではわかりにくいので説明〜。

まず

hosts.allow
sshd : ALL : spawn ( /usr/local/bin/block_ssh_attack.sh %a 5 ) : allow

これはsshd宛にアクセスがあった場合に
/usr/local/bin/block_ssh_attack.shを実行するという意味です。
%aはアクセス元のIPアドレスが入ります。
例えば1.1.1.1からのアクセスの場合
sh /usr/local/bin/block_ssh_attack.sh 1.1.1.1 5
が実行されます。

次にスクリプト部分、ほとんどパクリなので自分でも再確認の意味を含めて

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

シェルスクリプトとして使うための宣言と
第一引数はIP、第二引数は制限時間である宣言。

export NUMLOGBACK=30
export LOGFILE=/var/log/auth.log
export WHITELIST="hostb.example.org"
export MAILCMD=mail
export IPADDR=$1
export SUSPENDMIN=$2

読み込むログ行数、ログファイル名、ホワイトリスト
メール送信用コマンド、第一引数、第二引数の変数への代入

whitelist(){
for i in $WHITELIST;do
host $i | awk '{ print "x" $4 "x" }' | grep "x${IPADDR?}x" > /dev/null && return 0;
done
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

たぶんログにfrom <アクセス元>でのアクセス失敗がないかどうかのチェック。
Illegal user 〜
あるいは
Failed password for root
Failed password for invalid user 〜
Did not receive identification string
のログにマッチする感じだと思う。
もしログの形式が異なるならそれに合わせて修正ですね。

[ x$MATCH = xTRUE ] && whitelist && export MATCH=TRUE
if [ x$MATCH = xTRUE ]; then
pfctl -t invader -Tadd ${IPADDR?}
echo "pfctl -t invader -Tdelete ${IPADDR?}" | 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?}` ${SUSPENDMIN?} min" | $MAILCMD -s sshd-block-${IPADDR?} root

もし、ログに記録されていても、ホワイトリストにマッチすれば見逃す。
もしログに記録されていたIPと一致した場合には
pfctl を使ってinvader のグループにアクセスもとIPを追加。


ATコマンドを使い、指定時間後に
pfctl -t invader -Tdelete ${IPADDR?}
自動で削除。


ログとしての保存、およびrootへのメール送信。


このスクリプトを使用するためにはpfのインストールが必要です。
ここが非常に参考になりました
http://d.hatena.ne.jp/hiro-ueda/20041123