sshguard――OpenSSHを保護するツール

もし辞書を使って力ずくで攻撃されたら――SSHに対するこの種の攻撃は珍しくないため、そう心配する人は多いだろう。しかし、こうした攻撃からSSHを守ってくれる新しいツールsshguardが登場した。まだベータ段階だが、十分に使えそうだ。

TelnetやFTPなどといった第1世代のネットワーク・プロトコルでは、ログイン手順は平文で処理される。したがって、そのセキュア版としてOpenSSHが登場したのは当然だろう。だが、Telnetの代わりにSSHを使っているからといって十分とはいえず、慎重に用いるべき点は同じだ。SSHに使うパスワードが弱いと、辞書を利用した力ずくの攻撃で、パスワードを平文で送ったのと同じくらいやすやすと解読されてしまうからだ。

そのポート22を力ずくの攻撃から保護しようと考え出されたのがsshguardだ。このツールはSSHへのログイン要求を監視し、攻撃があるとそのIPアドレスを遮断するルールをファイアウォールに設定する。デフォルトでは、ログインの失敗が20分間に4回繰り返されると攻撃と見なし阻止する(ログインを要求したIPアドレスをブロックするルールをファイアウォールに設定する)。その後、7分から10.5分までの間で無作為に選ばれた時間を経過すると、ブロックされたIPアドレスは再びファイアウォールの通過を許されるようになる。

インストール

一般的なLinuxシステムへのインストールの仕方を紹介しておこう。まず、最新バージョンをダウンロードし、「tar xjf sshguard-0.9.tar.bz2」コマンドで展開する。ここから先の手順はプラットフォームごとに異なるので、以下の説明のほか、sshguard-0.9ディレクトリーにあるREADMEをよく読むこと。

次に、「python scons.py -Q FIREWALLTYPE=iptables」コマンドを入力し、コンパイルする。コンパイルが終わったら、rootで「python scons.py -Q FIREWALLTYPE=iptables install」コマンドを実行し、インストールする。

sshguardを使うにはインストールしただけではだめで、あと3つの手順が必要だ。まず、iptablesにsshguard用の動的ルールを作成しなければならない。rootで次のコマンドを実行する。

iptables -N sshguard
iptables -A INPUT -p tcp --dport 22 -j sshguard

次に、sshguardがログイン要求を検知できるようにしなければならない。方法はいくつかあるが(README参照)、ここでは、開発者本人が最も易しく最も効率的だという方法を紹介しよう。次のtailコマンドを使う方法だ。

tail -n0 -F /var/log/auth.log | /usr/local/sbin/sshguard &

このtailコマンドは再起動の度に実行しなければならない。それを避けたいなら、私の場合のように、シングル・ユーザー・システムの場合はホーム・ディレクトリーの.bashrcファイルにこのコマンドを追加しておけばよい。マルチユーザー・システムの場合はシステム管理者に相談すること。

そして、iptablesに動的ルールを追加・削除できるようにsshguardのパーミッションを設定しておかなければならない。chmodコマンドを使って、sshguardがrootで動作するように設定する。

chmod +s /usr/local/sbin/sshguard

テスト

これで、sshguardは動作するはずだ。「sudo /usr/sbin/sshd」コマンドでsshdを再起動し、テスト・マシンに外部からSSHでログインする。インストールが正しく行われていれば、このログインによってsshguardが起動される。これは、次のコマンドを実行しsshguardのインスタンスが動いていることを確認すればわかる。次のように、表示されるはずだ。

ps ax |grep sshguard
27729 pts/1  Sl   0:00 /usr/local/sbin/sshguard

LAN上の別のマシンからテストしてみた。わざとパスワードを間違えて数回ログインを試みると、予期したとおりにそのマシンからはsshguardで保護されたデスクトップに接続できなくなった。そして、数分経過すると再びログイン可能になった。iptablesの動的ブロック・ルールは所期どおり機能しているようだ。

開発途中であるせいか、解説書は貧弱。とはいえ、sshguardは有用なツールだ。SSHへの力ずくの攻撃に対抗する手段として、検討する価値はある。

開発者について

sshguardを書いたMichele Mazzucchi(24)はイタリア出身の大学院生で、ITコンサルタント。sshguardを作った理由を当人は次のように説明している。「満足できるツールがなかったからです。手に入るものはどれもクロス・ファイアウォールでなかったり、システムに入り込みすぎだったり、信頼性がなかったりでした」

今後の予定は――

  • ファイアウォールのバックエンドを充実させること(リモート・アプライアンスなど)
  • IPアドレスだけではなく、ログ・エントリーにあるホスト名をサポートすること
  • コンテキストによらない「攻撃」の定義

また、大手プラットフォーム向けにパッケージを作るのを手伝ってほしいという。当人は現在FreeBSDへの移植を進めており、Debian、Gentoo、Fedora向けなどのパッケージにまで手が回らないのだそうだ。関心のある方は、プロジェクトのホームページへ。

NewsForge.com 原文