Swatch
ログ監視ツール。
sshdに対する不正アクセスを動的に防ぐ
sshdのログを監視し、特定のパターンが見つかったときに、接続元IPからのアクセスを禁止するルールをパケットフィルタに追加する。アクセス禁止は一定時間後に自動解除することも可能。
必要なもの
- Swatch
- iptables
- at (自動解除する場合)
予めディレクトリを作成
mkdir /var/log/swatch
起動スクリプト
vi /etc/init.d/swatch
|
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して下さい。
関連
参考
- void GraphicWizardsLair( void ); // sshdに無差別にアクセスしているIPを動的検知してファイアーウォールに登録する
Swatch+ipfilter/ipfw
- Protect SSH From Hackers
Swatch+route+at
パケットフィルタリングツールをインストールする必要がないので良さそう。ただ、loに繋ぐってどうなんでしょう。それと、man routeするとrejectの項には "This is NOT for firewalling." って書いてあるし。。。 - [linux-users:104973] Re: SSHの大量不正アクセスログ
シェルスクリプト+iptables+at
- ギャラクシードリンク 宇宙味
シェルスクリプト+pf
気になる
- 2005年 9月 (1)。 /etc/hosts.denyを書き換えることについての考察
- BlockHosts - automatic blocking of abusive ssh hosts | A C Zoom
同上。マニュアルにThis script was inspired by: DenyHostsって書いてある。