SSHのログを監視して怪しいIPを止める
/var/log/secure(または/var/log/messages)をみると適当な名前でログインを試みられている形跡があるので、自動で監視してアクセスを禁止にする.
必要なもの
Swatchのインストール
Perl5はインストールしておく.
perlで必要なもの
- DateManip
- Bit-Vector
- Date-Calc
- Time-HiRes
- File-Tail
- Time-Date
それぞれはtar.gzを解凍したフォルダで
perl Makefile.pl
make
make test
make install
でインストールする.swatch本体も同様にインストールする.
swatchの設定
http://www.atmarkit.co.jp/flinux/rensai/root04/root04b.htmlを参考に、
------------------- swatchrc ----------------
watchfor /Failed/
echo
exec /root/sshstop.sh
mail=xxx@yyy.jp,subject=[swatch]sshd_Failed
--------------------------------------------
とした.これを適当なファイル(/etc/swatchrc)にして適当な場所に保存する.
メールを送るためにpostfixを起動させておく(特に設定はいらない).
exec /root/sshstop.shは後述.
IPtablesを書き換えてアクセスを禁止にするスクリプトを作成する
iptalbesの設定ファイルの上らへんを別のファイル(/etc/sysconfig/iptables.head)に保存しておく.
---------------iptables.head------------------
*mangle
:PREROUTING ACCEPT [28:2403]
:INPUT ACCEPT [28:2403]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [27:4374]
:POSTROUTING ACCEPT [27:4374]
COMMIT
# Completed on Tue Jan 17 23:06:18 2006
# Generated by iptables-save v1.2.10 on Tue Jan 17 23:06:18 2006
*nat
:PREROUTING ACCEPT [2:100]
:POSTROUTING ACCEPT [2:351]
:OUTPUT ACCEPT [2:351]
COMMIT
# Completed on Tue Jan 17 23:06:18 2006
# Generated by iptables-save v1.2.10 on Tue Jan 17 23:06:18 2006
*filter
:FORWARD ACCEPT [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-------------------------------------------
スクリプト
#!/bin/sh
THRESHOLD=20
IPTABLES="/etc/sysconfig/iptables"
IPTABLES_HEAD="/etc/sysconfig/iptables.head"
DATE=`date "+%s"`
IPTABLES_TMP="/tmp/iptables.${DATE}"
cp $IPTABLES_HEAD $IPTABLES_TMP
cat /var/log/secure|grep "Failed password"|grep sshd|sed -e "s/ * / /g"|sed -e "s/invalid user //g"|cut -d" " -f11|sort|uniq -c|
while read COUNT IP
do
if [ $COUNT -ge $THRESHOLD ]
then
echo $COUNT $IP
echo "-A INPUT -p tcp -m tcp -s $IP --dport 22 -j REJECT" >> $IPTABLES_TMP
fi
done
echo "-A INPUT -j ACCEPT" >> $IPTABLES_TMP
echo "COMMIT" >> $IPTABLES_TMP
if ! cmp $IPTABLES $IPTABLES_TMP
then
mv $IPTABLES_TMP $IPTABLES
sleep 5
( /etc/init.d/network stop
/etc/init.d/iptables restart
/etc/init.d/network start )|nkf -j|
cat - $IPTABLES|mail -s [sshstop]modified_iptables xxx@yyy.jp
else
rm $IPTABLES_TMP
fi
-----------------------------------------------------
赤字はシステムによって変更が必要かもしれないところ.
同一IPからの失敗がTHRESHOLDの値を越えると自動的に
アクセスを禁止する.これを/root/sshstop.shに保存して
実行権限をつける.
swatchの起動
swatch -c /etc/swatchrc -t /var/log/secure &
または
swatch -c /etc/swatchrc -t /var/log/messages &
で実行する(ログイン失敗のメッセージが/var/log/secureか/var/log/messagesのどちらにはいるのかよくわからない.同じシステムでも違う場合がある).起動時に有効にするには/etc/rc.localに記述する.



Last modified: Wed Jan 18 02:55:05 JST 2006