Hatena::ブログ(Diary)

Sogolosphere Log RSSフィード

2008-01-19

[] iptablesのipt_recentでSSHの辞書攻撃対策

ここのところ、SSHのログが*1

> grep -ce "\(Jan 17 .*Invalid user\)\|\(Jan 17 .*not allowed\)"  /var/log/auth.log
9684

とまぁ、こういう状態で。。。

どういうわけか、ウチに来るのは朝方が多いので、HDDへのカタカタというアクセス音で安眠妨害されるなど、マシン以外のところで実害が出てたりしました。

マシンのほうはマイナーなユーザ名のAllowUsersの限定の上に鍵認証オンリーなので、とくに関係ないんですが・・・。


そこで、対応のほうを調べていたのですが、いろいろあるようですね。

CRONで一定時間おきにログ検査:

ログ検査の結果、不正アクセス条件を満たすホストをアクセス拒否する手法。ある意味、一番シンプルかもしれない。ipt_recentの方法に切り替えるまでは、自作のスクリプトで5分程度おきにログチェックしてiptablesに拒否ルールを挿入してました*2

tcp-wrapperを使う:

hosts.allowからsshd : ALL : spawn...したスクリプトでログをチェック、不正アクセス条件を満たせばiptablesに拒否ルール追加というもの。

参考サイト:玄箱で SSH 辞書攻撃対策:Fullcover.Blog:So-netブログ

ipt_recentモジュールを活用:

一定時間内のアクセス試行の回数が一定数以上の場合、アクセス拒否

参考サイト:iptables の ipt_recent で ssh の brute force attack 対策


ほかにも、デーモンで動くツールなどが検索しているとひっかかるのだけど、一番お手軽そうなのは、最後のipt_recentを利用する方法ではないかと。

ただ、上述の参考サイトの「弱点」のところでも挙がっているのですが、IPアドレスだけを判断基準にしているので扱いには注意が必要ですね。


推測の話:


ipt_recentモジュールを使った対策ですが、SYNパケットの回数で判断してるということは、ログインが「成功」した場合でもカウントされるのではないかな。

つまり、これって、仮にあるホストにこちらのホストのユーザが100人いて、偶々、そのうちの5人が一分間の間に集中的にログインしても、アクセス拒否の条件が成立してしまうのじゃないだろうか・・・・と。

*1:[追記 08/01/26] 集計方法が不適切だったので訂正

*2アクセス拒否の方法は、iptables以外にもhosts.allowに拒否設定を書く方法もある

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/sogolosphere/20080119/1200749847