Home > Debian | UNIX > [Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール
[Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール
- swatchをインストール
# aptitude install swatch
- swatch自動起動スクリプト作成
# mkdir /var/log/swatch
# vi /etc/init.d/swatch
#!/bin/sh
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="swatch"
DAEMON="/usr/bin/swatch"
DESC="simple watcher"
CONFFILE="/etc/swatch.conf"
#LOGFILE="/var/log/secure"
LOGFILE="/var/log/auth.log"
PIDFILE="/var/run/swatch.pid"
SCRIPTDIR="/var/log/swatch"
OPTS="--config-file $CONFFILE --tail-file $LOGFILE --pid-file=$PIDFILE \
--script-dir=$SCRIPTDIR --awk-field-syntax --daemon"
test -x $DAEMON || exit 0
start() {
if [ ! -f "$CONFFILE" ]; then
echo "Error: $CONFFILE does not exist."
exit 1
fi
if [ ! -f "$LOGFILE" ]; then
echo "Error: $LOGFILE does not exist."
exit 1
fi
if [ -f "$PIDFILE" ]
then
echo "Error: $NAME is already running."
else
$DAEMON $OPTS
fi
}
stop() {
if [ -f "$PIDFILE" ]
then
PID=`cat $PIDFILE`
if ps h $PID > /dev/null
then
pkill -P $PID
else
echo "Error: $NAME is not running, but PID file exists. Deleting it."
fi
rm -f $PIDFILE
else
echo "Error: $NAME is not running."
fi
}
case "$1" in
start)
echo "Starting $DESC: $NAME"
start
;;
stop)
echo "Stopping $DESC: $NAME"
stop
;;
restart)
echo "Restarting $DESC: $NAME"
stop
sleep 1
start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
exit 0
# chmod a+x /etc/init.d/swatch
# update-rc.d swatch defaults 99
- swatchアクションスクリプト作成
# vi /usr/local/bin/swatch_action.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin
LANG=C
# 規制IPアドレス情報メール通知先設定
# ※メール通知しない場合は下記をコメントアウト
mail=root
# ログを標準入力から取得
read LOG
# ログからIPアドレスを抽出
IPADDR=`echo $LOG|cut -d " " -f $1`
echo "$IPADDR"|grep "^[0-9]*\." > /dev/null 2>&1
if [ $? -eq 0 ]; then
# IPアドレスから始まる場合
IPADDR=`echo "$IPADDR"|sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
else
# IPアドレス以外から始まる場合
IPADDR=`echo "$IPADDR"|sed -e 's/.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
fi
# IPアドレスをピリオドで分割
addr1=`echo $IPADDR|cut -d . -f 1`
addr2=`echo $IPADDR|cut -d . -f 2`
addr3=`echo $IPADDR|cut -d . -f 3`
addr4=`echo $IPADDR|cut -d . -f 4`
# IPアドレスがプライベートIPアドレスの場合は終了
if [ "$IPADDR" = "127.0.0.1" ]; then
exit
elif [ $addr1 -eq 10 ]; then
exit
elif [ $addr1 -eq 172 ] && [ $addr2 -ge 16 ] && [ $addr2 -le 31 ]; then
exit
elif [ $addr1 -eq 192 ] && [ $addr2 -eq 168 ]; then
exit
fi
# 不正アクセスログメッセージをIPアドレス別ログファイルに記録
echo $LOG >> /var/log/swatch/$IPADDR
# IPアドレス別ログファイルから累積不正アクセス数取得
cnt=`cat /var/log/swatch/$IPADDR | wc -l`
# 該当IPアドレスからの累積不正アクセス数が3以上の場合または
# 引数でlockと指定された場合アクセス規制
if [ $cnt -ge 3 ] || [ $# -eq 2 -a "$2" = "lock" ]; then
# 該当IPアドレスからのアクセスを拒否するルールを挿入
iptables -I INPUT -s $IPADDR -j DROP
# 上記ルールを24時間後に削除するスケジュールを登録
echo "iptables -D INPUT -s $IPADDR -j DROP > /dev/null 2>&1" | \
at now+24hour > /dev/null 2>&1
# アクセス規制IPアドレス情報をメール通知
[ "$mail" != "" ] && (cat /var/log/swatch/$IPADDR ; \
echo ; whois $IPADDR) | \
mail -s "$IPADDR $cnt lock!" $mail
echo "`date` $IPADDR $cnt lock!"
else
echo "`date` $IPADDR $cnt"
fi
chmod 700 /usr/local/bin/swatch_action.sh
- swatch設定
# vi /etc/cron.daily/logrotate
/etc/init.d/swatch restart > /dev/null ← ファイル最下部へ追加
# vi /etc/swatch.conf
# BINDのバージョン照会を検知したら該当ホストからのアクセスを24時間規制
# ※DNSサーバー(BIND)構築済であること
watchfor /query \'VERSION\.BIND\/TXT\/CH\' denied/
pipe "/usr/local/bin/swatch_action.sh 7 lock"
throttle=00:00:10
# アクセス無許可ホストからのDNS使用を検知したら該当ホストからのアクセスを24時間規制
# ※DNSサーバー(BIND)構築済であること
watchfor /named.*client.*query.*denied/
pipe "/usr/local/bin/swatch_action.sh 7 lock"
# アクセス無許可ホストからのSSHログイン失敗を検知したら該当ホストからのアクセスを24時間規制
# ※/etc/hosts.deny、/etc/hosts.allowでアクセス許可ホストを制限していることが前提
watchfor /sshd.*refused/
pipe "/usr/local/bin/swatch_action.sh 10 lock"
throttle=00:00:10
# アクセス許可ホストからのSSHログイン失敗を3回以上検知したら該当ホストからのアクセスを24時間規制
watchfor /sshd.*Invalid user/
pipe "/usr/local/bin/swatch_action.sh 10"
throttle=00:00:10
- swatch起動
# /etc/init.d/swatch start
Home > Debian | UNIX > [Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール