SSHでパスワードは止めて公開鍵方式しか許さないようにすること。当然root でのログインも許さないこと。限られたユーザしか使わないようにすること。 パスワードは複雑なものにすること。...と言うのは簡単。でも実際にはどう してもパスワードで運用しなければならない場合だってある。たとえパスワー ドが安全で絶対にログインなんてできなくても、数十時間もサーバに対し無駄 なトラフィックと負荷を与え続けるブルートフォースは無視できない。
と、いうあなたへ、ちょっとしたアイデア。
| 準備 |
iptablesに専用のチェーンをつける。これはSSHのフィルタリングのみに使うチェーンだ。
iptables -A INPUT -p tcp --destination-port 22 -i eth0 -j SSHFILTERブート時にロードできるようにしておくと良い。 |
| 実際のフィルタリング |
パスワードエラーか、逆引きできないアドレスかどちらかで調べてみる
grep -e 'Failed password for' -e 'Could not reverse map address' /var/log/auth.logあとは、このIPアドレス部分を抜き出すだけ。 rubyやperlで(\d+)\.(\d+)\.(\d+)\.(\d+)にマッチするパターンを抜き出せば良い。 単純に1回か2回程度のエラーは見逃してやってもいい。そうじゃないと1、 2度失敗したらアウトとするなら、自分もひょんな失敗で入れなくなってしま う情けないことになる(経験者談)。 /sbin/iptables -A SSHFILTER -p tcp --syn --source $addr -i eth0 -j REJECTeth0/port 22に入ってくるアドレス(変数$addrとしている部分)でリジェクト (既に設定されているeth0は余計かも)する。 これらの処理を一定時間でループする。netstat -tn でsshに対し大量に TIMEWAITしているアドレスをフィルタするという手もある。これらをハイブリッ ドにする手もある。 まとめ |
もうちょっと複雑にしたものが自分のサイトでは動いているが、完全にサーバ 環境依存に作っているので、他のサーバーでは動かない。なので、ここではア イデアだけをメモっておく。
キーワード: SSH ブルートフォース パスワード 攻撃 アタック iptables フィルタ
目次へ
すずきひろのぶ hironobu at h2np dot net 更新日: