SSH ブルートフォース攻撃 対策

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 REJECT
eth0/port 22に入ってくるアドレス(変数$addrとしている部分)でリジェクト (既に設定されているeth0は余計かも)する。 これらの処理を一定時間でループする。netstat -tn でsshに対し大量に TIMEWAITしているアドレスをフィルタするという手もある。これらをハイブリッ ドにする手もある。 まとめ
  • Step 1: SSH用のフィルタ用チェーンを作る
  • Step 2: auth.logからフィルタすべきIPアドレスを取り出す
  • Step 3: それをフィルタリングするために先のSSH用チェーンに加える
  • Step 4: 一定時間後にSSH用チェーンをクリアしてStep 2へ戻る
  • もうちょっと複雑にしたものが自分のサイトでは動いているが、完全にサーバ 環境依存に作っているので、他のサーバーでは動かない。なので、ここではア イデアだけをメモっておく。


    キーワード: SSH ブルートフォース パスワード 攻撃 アタック iptables フィルタ

    目次へ

    すずきひろのぶ hironobu at h2np dot net 更新日: