| Swatchで不正アクセス遮断(Swatch+iptables) |
このページでは、SWATCHで各システムのログファイルを監視し、特定のパターンにマッチした場合iptablesと連係しアクセスを遮断させます。
※iptablesにてアクセスをブロックするまでの回数や、動的IP対策としてアクセス制限を行う時間は任意で設定が可能
| Swatchのインストール |
swatchに必要なperlモジュールをインストール 必要なのが下記モジュール Bit::Vector Date::Calc File::Tail Time::HiRes TimeDate ←TaimDateに関してはDate::Parseのインストールで補った。 cpanで下記モジュールをインストールします。 # cpan ← cpan起動 cpan> install Bit::Vector ← 途中色々と聞かれるのでそのまま「Enter」 cpan> install Date::Calc cpan> install File::Tail cpan> install Time::HiRes cpan> install Date::Parse それぞれ結構時間が掛かります。。。 cpan> exit ← 終了 最新版はこちらで確認 # wget http://downloads.sourceforge.net/swatch/swatch-3.2.3.tar.gz ← SWATCHをダウンロード # tar fvxz swatch-3.2.3.tar.gz ← 展開 # cd swatch-3.2.3 ← 移動 # perl Makefile.PL # make # make test # make install ← インストール # rm -rf swatch-3.2.3.tar.gz ← DLファイル削除 # apt-get install jwhois ← whoisコマンドのインストール (不正IP連絡時にwhois情報をメール通知するので必要) |
| アクセス遮断スクリプトの作成 |
不正アクセスの累計回数が、スクリプトで指定した回数に達した場合、iptablesにて24時間アクセスを遮断する
# vi /usr/bin/swatch.sh ← スクリプト作成 i キー(入力モード) #!/bin/bash
PATH=/bin:/sbin:/usr/bin
LANG=C
# IPブロック時メール送信先(送信しない場合はコメントアウト)
mail=root
# 不正アクセスをブロックするまでの回数
max=3
# ログを標準入力から取得
read LOG
# ログからIPアドレスを抽出
IPADDR=`echo $LOG|cut -d " " -f $1`
echo "$IPADDR"|grep "^[0-9]*\." > /dev/null 2>&1
if [ $? -eq 0 ]; then
IPADDR=`echo "$IPADDR"|sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d`
else
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アドレスが指定した累積不正アクセス数に達した時と
# 引数でBlockと指定された場合アクセス規制
if [ "$cnt" -ge "$max" ] || [ $# -eq 2 -a "$2" = "Block" ]; 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 "IP Block!" $mail
# ブロック済不正IPアドレス別ログファイル削除
rm -f /var/log/swatch/$IPADDR
echo "`date` $IPADDR $cnt Block!"
else
echo "`date` $IPADDR $cnt"
fi
編集したら Esc キー(コマンドモード):wqで保存# chmod 700 /usr/bin/swatch.sh ← スクリプトに実行権限を与えます |
| Swatchの設定 |
# mkdir /etc/swatch ← 設定ファイル用ディレクトリ作成 # vi /etc/logrotate.d/swatch ← ログローテーション設定ファイル作成 i キー(入力モード)
/var/log/swatch/swatch.log {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/swatch restart > /dev/null || true
endscript
}
編集したら Esc キー(コマンドモード):wqで保存 |
| FTPサーバー(ProFTPd)の不正接続を監視する |
ログインに失敗した場合この様な(530)ログが出力されます。
[01/Mar/2009:22:46:40 +0900] : nobody 111.222.333.444 "PASS (hidden)"
530
このログのIPアドレスの場所を設定ファイルで指定して、アクセス遮断スクリプトへ渡します。
IPアドレスの場所は、左側からスペースを区切りに数えた場所です。
※下記設定内容は当サイトのProFTPd編のログ設定(auth.logの出力)を行っている事が前提
# vi /etc/swatch/proftpd-auth.conf ← ProFTPd用の設定ファイルを作成 i キー(入力モード) #監視ログの場所を指定
# logfile /var/log/proftpd/auth.log
#監視したい文字列を記載
watchfor /530$/
#ログのIPアドレスの場所を指定し、アクセス遮断スクリプトへ渡す
pipe "/usr/bin/swatch.sh 5"
編集したら Esc キー(コマンドモード):wqで保存 |
この他のサーバーに関しては今後、更新していくつもりです。
まずはFTPサーバーのみとさせていただきます。
| Swatchの起動スクリプトDLと自動起動設定 |
# cd /etc/rc.d/init.d/ ← 起動スクリプトDL先へ移動 # wget http://vine.1-max.net/rpm/swatch ← 当サイトから起動スクリプトDL # cd ← 戻る # chmod +x /etc/rc.d/init.d/swatch ← 実行権付加 # /etc/rc.d/init.d/swatch start ← SWATCH起動 # chkconfig --add swatch ← SWATCH起動スクリプトをcheconfigへ登録 # chkconfig swatch on ← SWATCH自動起動設定 # chkconfig --list swatch ← SWATCH自動起動設定確認 swatch 0:off 1:off 2:on 3:on 4:on 5:on 6:off ← ランレベル2〜5がonか確認 |
| 動作確認 |
ネットで「FTP接続テスト」で検索すれば色々とテスト環境を公開されていますので、そういったテスト環境を利用してテストを行います。
ユーザー名、パスワードは実在しないものを設定してアクセス遮断スクリプトで指定したブロック回数までテストを行ってください。
次にテストを行ってアクセスが遮断されれば成功です。
次に件名が「IP Block!」でログの情報とWhois情報が記載されたメールがroot宛に送信されていると思います。
これら2つが確認できれば問題なく動作しています。
Copyright c Vine Linuxで自宅サーバー. 2004 All Rights Reserved.