なんだかよくわからない題名ですが、先日syslogに「authentication failed」が永遠と出てるのを見てね、情熱的だ!うん、機械でやってるんだけど、ブルートフォースなんだけど、ログ出力の勢いから情熱を感じてしまったのでこんな題名です。
先週の日曜日、情熱的なアタックを受けました。別に珍しいことでは無いんだけど、たまたまリアルタイムにログがベロベロ止まらないのを見たのでこの手の対応策でも考えてみようかと思います。
今回たまたま目についたのがスペインからのアクセスだったけど、他の国(アジア)からのほうが多いのでこのまま放置しとくのも気分的によくないし、くだらないことに時間使うのも勿体無いし。という事で・・久しぶりにシェル作るよ!
まずは経緯から
日曜日の22時くらい:
音楽を聞きながらブログの更新でもしようかと思ったら音楽途切れるし、Wordpressの動きが遅いし〜。
サイト見に行ってみたら、いつも遅いけどそれ以上に遅い。
ナニコレと思ってターミナル起動。
syslog確認「tail -f syslog」・・「ベロベロ情熱ベロベロ」・・うおぁぁぁ。ログが止まりません。—ブルートフォースです。
速攻でiptableでこのIPアドレスをDROPする(通信拒否する)。
で、調べてみた
20:17分に情熱アタックを開始されて21:58分に気がついて緊急対応。
別のIPで来るかと思って数分間監視。
1時間以上に渡り1800回以上の認証エラー
ドメイン情報を調べてみる→「country: ES」=スペイン。フムフム・・スパニッシュ情熱アタックです。。
反省点
ファイルサーバ、ウエブサーバ、SSHについてはそれなりにこの手の対応はしていたけど、メールサーバの対応は抜けていた。
何事もないうちに気がつけてよかった。。
で、スパニッシュアタッカーをジャパニーズの情熱ブロック(あえて手作り)で対応する
どうするかというと
リアルタイムでアクセス拒否するシェル(β版)と同じ方法で対応する
(実はこいつ影で結構役に立っていたりする。忘れた頃にやってくる「ZmEu」アクセスを次から次へと破棄してメールしてくれる!)
具体的には「inotify」を使って「mail.warn」を監視。ログに「出てはいけない文字列※」を5回出したIPアドレスはこのサーバとの全ての通信を拒否する
「inotify」はファイルシステムの更新、読取、作成があった場合に操作内容を通知してくれる。
※出てはいけない文字列
・authentication failed
・その他必要に応じて
処理概要
ログファイル:/var/log/mail.warnを監視して、このファイルに更新が発生した時「authentication failed」(認証エラー)の文字列があるか判定する
認証エラーがあり、それが5回発生していた場合はそのIPアドレスを取得し「iptables」にアクセスを拒否するように登録する
アクセス拒否として登録したIPアドレスは「whois」で国名を取得してルート宛にメール送信する。
本体のシェル
inotifywait-syslog.sh
iptablesの設定はシステムの再起動でクリアされてしまうので、累積リストから登録するシェルを作成しておく。
iptables-setup3.sh
設置方法
システムの起動時に実行させておく場合は
/etc/rc.localの「exit 0」の前に「/hoge/hoge2/inotifywait-syslog.sh &」を記載する
ログの一部
——————— Postfix Begin ————————
****** Summary *************************************************************************************
1850 SASL authentication failed
17.188K Bytes accepted 17,600
17.188K Bytes delivered 17,600
======== ==================================================
5 Accepted 100.00%
——– ————————————————–
5 Total 100.00%
======== ==================================================
1871 Connections
1839 Connections lost (inbound)
1871 Disconnections
5 Removed from queue
5 Delivered
28 Timeouts (inbound)
****** Detail (10) *********************************************************************************
1850 SASL authentication failed ————————————————————–
1850 9x.21x.6x.7x unknown
1850 LOGIN
1850 authentication failure
1839 Connections lost (inbound) ————————————————————–
1830 After AUTH
6 After EHLO
3 After CONNECT
5 Delivered ——————————————————————————-
5 brokendish.org
28 Timeouts (inbound) ———————————————————————-
26 After AUTH
2 After EHLO