2005年11月02日
SSHへの大量不正アクセスを遮断
最近、SSHを外部へ開くようになってから、大量のブルートフォースアタックを食らうようになりました。
ここんとこ流行っている手口らしく、ググってみると同じアタックに悩まされている人が結構多いみたいです。
これ、やり方がかなり強引で、3アタック/5secくらいの短い周期で、想定されるIDを使って長時間アタックを仕掛けてきやがります。酷い時は6時間くらい連続でやられた事もあります。
パスワードを使わないログイン認証しか試してこないので、うちの鯖に対しては永遠に無駄な努力でしかないんだけど、大量のログを残していってくれるのでHDDに優しくないし気持ち悪い。
そんなわけで、SSHへのアクセス制限を設けることにしました。
対策には、linux-users ML の、[linux-users:104973] Re: SSHの大量不正アクセスログで紹介されているシェルスクリプトを使わせてもらいました。(Kentaro Shinto氏に感謝!)
うちでは、多少手を加えて以下のとおりにしてあります。
/etc/hosts.allow に以下の内容を追加
sshd : ALL : spawn ( /usr/local/bin/block_ssh_attack.sh %c 120 5 ) : allow
以下のファイルを /usr/local/bin/block_ssh_attack.sh に作成
元のスクリプトをそのまま使うと、ログインに一回失敗しただけで問答無用のアクセス制限をかけられてしまうので、以下の内容で若干手を加えています。
・IDを間違えても、パスワード入力作業をして跳ねられた場合は制限無効 (ウィルスはパスワード打たない & typoの多い自分用^^;)
・明らかにウィルスやクラッカーのしわざと判断できるアタックについては、120分間廊下に立ってなさい。
・上記以外は5分間のアクセス拒否
しかし、手を加えた部分がかなりのやっつけ仕事風味っすね…。何ぶんシェルスクリプトをいじったのは生まれて始めてなもんで、こんな程度でも試行錯誤の連続でした。他の人が書けばもっと綺麗になると思うんだけど、ちゃんと動いてるからこれで良しとしてます…。
あと、IPv4-mappedアドレスとIPv4アドレスの扱いがごっちゃになってるのもアレですが、とりあえず今はこれで良し。吐き出されるログはIPv4-mappedなのに、host名を逆引きするとIPv4で出力されるんだよね。BIND9でIP6の設定してないのが原因だと思うんだけど、設定がよくわからんのです。わはは……そのうち直さねば…。
…と、やっとの思いで鯖に組み込んで、完璧(人´∀`).☆.。.:*・°なんて思っていたら、iptables単体でルールを設定する方法を見つけてしまいました。この方がスマートで鯖への負荷も少なそうです…。まぁ…でもスクリプトだとホワイトリストや切り分けができるからいいかな。と、自分を納得させる事にします。シェルスクリプトの勉強にもなったしね。
このエントリーのトラックバックURL:
