Swatch の変更点
ログ監視ツール。
-[[オフィシャル>http://swatch.sourceforge.net/]]
*sshdに対する不正アクセスを動的に防ぐ
sshdのログを監視し、特定のパターンが見つかったときに、接続元IPからのアクセスを禁止するルールをパケットフィルタに追加する。アクセス禁止は一定時間後に自動解除することも可能。
**必要なもの
-Swatch
-iptables
-at (自動解除する場合)
**予めディレクトリを作成
mkdir /var/log/swatch
**起動スクリプト
vi /etc/init.d/swatch
>
#code(bash,nonumber,nooutline){{
#!/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
-起動スクリプトや対象ログファイルの場所はディストリビューションによって違います。上はDebianでの例。RedHat系ではそれぞれ /etc/rc.d/init.d/swatch 、 /var/log/secure として下さい。
**ログローテート時にSwatchを再起動
ログローテート時に不具合が生じるので、Swatchを再起動するようにして下さい。
-Debianなら /etc/cron.daily/sysklogd の最終行に次を追加。
/etc/init.d/swatch restart > /dev/null
-RedHat系なら /etc/logrotated.d/syslog の /var/log/secure の項に次を追加。
postrotate
/etc/init.d/swatch restart > /dev/null
endscript
**設定
vi /etc/swatch.conf
>
watchfor /Did not receive identification string from/
exec "/sbin/iptables -A INPUT -s $12 -j DROP"
watchfor /Illegal user/
exec "/sbin/iptables -A INPUT -s $10 -j DROP"
# exec "echo '/sbin/iptables -D INPUT -s $10 -j DROP' | at now+30min"
watchfor /Authentication failure for root/
exec "/sbin/iptables -A INPUT -s $13 -j DROP"
<
-ログの書式は環境によって違います。上はDebian sargeでの例。
-コメント部を有効にすれば、Illegal userは30分で解除するようになります。
**起動
/etc/init.d/swatch start
**テスト方法
+/etc/swatch.confのDROPの箇所をACCEPTに変える
+Swatchを起動
+不正な感じでアクセス
+iptables -Lでルールが追加されていることを確認
+iptables -Fでルールを全消去
+Swatchを停止
+1.を元に戻す
**備考
-エラーログを監視しているだけなので、すんなり入られれば終わりです。
-/etc/ssh/sshd_configでの設定(待ちうけポートの変更、rootでのログインの禁止、パスワード認証から公開鍵認証への切り替えなど)も併せて行った方がいいと思います。
-iptablesを他の用途にも使っている方は専用のchainを作って下さい。
-攻撃者がIP Spoofingしていた場合、任意のIPをアクセス禁止にさせられてしまうかも???
-rebootで消えないように定期的にiptables-saveして下さい。
*関連
-[[Linux/OpenSSH]]
-[[Linux/Swatch]]
*参考
-[[void GraphicWizardsLair( void ); // sshdに無差別にアクセスしているIPを動的検知してファイアーウォールに登録する>http://www.otsune.com/diary/2004/10/29/7.html#200410297]]
>Swatch+ipfilter/ipfw
<
-[[Protect SSH From Hackers>http://home.gagme.com/greg/linux/protect-ssh.php]]
>Swatch+route+at~
パケットフィルタリングツールをインストールする必要がないので良さそう。ただ、loに繋ぐってどうなんでしょう。それと、man routeするとrejectの項には "This is NOT for firewalling." って書いてあるし。。。
<
-[[[linux-users:104973] Re: SSHの大量不正アクセスログ>http://search.luky.org/linux-users.a/msg04927.html]]
>シェルスクリプト+iptables+at
<
-[[ギャラクシードリンク 宇宙味>http://d.hatena.ne.jp/kanata_ail/20050802#1123032145]]
>シェルスクリプト+pf
<
**気になる
-[[Welcome to DenyHosts>http://denyhosts.sourceforge.net/]]
>sshdログを監視して不信なIPをtcp_wrapperを使ってアクセス禁止に(/etc/hosts.denyに追加)するPythonで書かれたツール
<
--[[2005年 9月 (1)。>http://tabesugi.net/memo/2005/91.html#061231]] /etc/hosts.denyを書き換えることについての考察
-[[BlockHosts - automatic blocking of abusive ssh hosts | A C Zoom>http://www.aczoom.com/cms/blockhosts]]
>同上。マニュアルにThis script was inspired by: DenyHostsって書いてある。
<
-[[SourceForge.net: Sentry Tools>http://sourceforge.net/projects/sentrytools/]]
>
<
*Amazon
#amazon(4873112044,left)
#amazon(4873112060,left)
#amazon(4873110793,left)
#amazon(4894714507,left)