…って書く程でもないですけどね。しかも「たった一つ」じゃないし! SSH がアタックされてログが酷いことになってるよー(泣)とお嘆きのサーバ管理者は多いと思います。簡単にできてその割りに効果的な対策は一つ。SSH のポート番号を変えてやることです。アタックされること自体が大きく減るので、確率的にもセキュリティは破られにくくなります。ついでにログの増加量も劇的に削減できるのでオススメです。
クラッカーが使用するアタック プログラムは 22 番ポートが空いていない時点で大抵諦めてくれるので(自分だったらそうプログラムする)、ポート番号を変えるだけで効果は絶大です。ところで SSH は複数のポートで待ち受けできるので、私の場合、自宅のサーバでは 3022 番と 22 番の両方のポートを SSH 用に開けていて、外向けルータの NAT 設定で 3022 番ポートだけをサーバに向けてあります。これで、自宅内では普通に 22 番ポートで、そして外からは 3022 番ポートを使って SSH にアクセスできるようにしています。
しかし、それでも中には暇なクラッカーが居て、ポート スキャンを行って SSH のポートを探し出し、果敢にアタックしてくる連中が少数ながら居ます。そんな時、UNIX では必ず存在するユーザ名 root は格好の標的になります。アクセス ログに残ったアタックの形跡を見ると、大抵、ユーザ名 root に対してパスワードの辞書攻撃、もしくはブルート フォース攻撃を仕掛けてくることがわかっています。そこで、SSH でログインできるユーザ名を限定し、root でのログインはできないようにすると安全です。
PermitRootLogin no AllowUsers username
更に、root 以外のユーザ名の辞書攻撃を防ぐためにも、通常のユーザ名+パスワードによる認証自体を使用不可にし、公開鍵認証のみのログインに切り替えておくことで安全にすることができます。これで辞書攻撃もブルート フォース攻撃も一切通用しなくなります。
PasswordAuthentication no PubkeyAuthentication yes RhostsRSAAuthentication no
SSH へのアタックは、アタック プログラムを利用して短時間に多数の接続要求を送ってくることが一般的です。そこで、SSH の設定で MaxStartups
ディレクティブを設定するのが役立ちます。MaxStartups
ディレクティブは、コロン区切りで 3 つの数字を設定します。
MaxStartups 3:50:10
これで同時に 3 つまでの接続要求は通常通り処理しますが、4 つを超える接続要求は 50% の確率でこれを拒否し、10 以上の接続要求は全て拒否する、という意味になります。接続するユーザが少人数に限られていたり、そもそも SSH でログインしての作業をあまり必要としないサーバでは、MaxStartups にはできるだけ小さい値を設定しておくのが良いでしょう。