SSHdの設定
SSHとは
SSHとは、LinuxサーバーやFreeBSDサーバーに、遠隔からログインするための機能です。
Telnetとの違いは、通信が暗号化されている点です。その他にもトンネリングやポートフォワードなどの機能があります。
この記事では、SSHサーバー(ログインされるサーバー側)の設定について解説します。
SSHdとは
SSHでログインする為には、サーバー側にSSHサーバー(デーモン)が起動している必要があります。末尾のdは、デーモンのdです。
この記事の読みどころ
- sshサーバー(sshd)の設定
- sshd待ち受けポートの変更
- Fail2Banの紹介
- ハニーポットの紹介
SSHdの設定
sshサーバーの設定は、明示的に指定しないとデフォルトで ON
になっている設定があります。
怖いので明示的に指定しましょう。基本的に以下の設定を末尾に追加すればOKです。
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
設定ファイル
/etc/ssh/
にあります。
ssh_config
は、クライアントの設定。(ssh)
sshd_config
が、サーバーの設定。(sshd←dはデーモンのこと)
設定ファイルが正しいか確認する
-
-t
: 設定ファイルが正しいかチェックする
エラーがあればエラー内容が表示されます。
何もエラーが表示されなければ設定に問題はありません。多分
sudo sshd -t
PermitRootLogin
rootでログイン可能か指定します。デフォルトは多分 YES
です。恐ろしいので NO
に変更します。オプションは他にもありますので、文末にリンクを掲載します。
PasswordAuthentication
パスワードでのログインを許可するか指定します。デフォルトは多分 YES
です。恐ろしいので NO
に変更します。公開鍵認証を利用しましょう。
PermitEmptyPasswords
空パスワード(パスワード未設定)を許可するか指定します。デフォルトは多分 NO
ですが、恐ろしいので明示的に NO
を指定します。(知らないうちにデフォルト値が変わる可能性もあります)
ChallengeResponseAuthentication
複雑な方法でパスワード認証する設定らしい。デフォルトは多分 NO
です。これを YES
にすると、公開鍵認証でログインできません。NO
にしましょう。
RSAAuthentication
プロトコル1の RSA公開鍵認証を許可するか。デフォルトは多分 YES
です。
PubkeyAuthentication
プロトコル2の RSA/DSA公開鍵認証を許可するか。デフォルトは多分 YES
です。
AuthorizedKeyFile
デフォルト値は .ssh/authorized_keys
です。
このファイルに、許可する公開鍵(id_rsa.pub)の文字列を登録します。
パーミッションは0600
でないとエラーになります。
PermitRootLoginの他のオプション
ChallengeResponseAuthenticationについての解説
SSHデーモンを起動したら
外部からSSHログインを狙ってたくさんのアクセスがあります。(ログを確認すると恐ろしい量のログイン失敗が記録されています)
パスワードログインをdeny(鍵認証)にしておけば大丈夫だと思いますが、秘密鍵が漏洩する可能性はゼロではありません。念の為の予防策も講じて起くと楽しいと思います。
秘密鍵にはかならずパスワードを付ける
秘密鍵が漏れる可能性はゼロではありません。もし万が一、漏洩した場合に備えて、パスワードは必ずつけておきましょう。
待ち受けポートの変更
sshのデフォルトの待ち受けポートは22番ですが、これを30022や60022などに変更しましょう。
経験上、ポート番号が変更されているだけで、もうログイン試行してきません。
fail2ban
規定回数ログインを失敗したら、そのIPアドレスからのログインをブロックします。
debianは、そのままでは起動できなかったので、以下の記事を参照。
ハニーポット
ニセモノのsshデーモンを待機させて、ニセモノ側にログインを試行させます。
- Kippo: Kippoは、元々SSH専用のハニーポットとして開発されましたが、現在はCowrieに統合されています。
- Cowrie: CowrieはSSHとTelnetをサポートするハニーポットです。攻撃者の入力やファイル転送の試行を記録し、分析することができます。
- Dionaea: Dionaeaは、複数のプロトコル(包括的にSSHを含む)をサポートするハニーポットです。
ログを確認する
ログは以下にあります。CentOSはredhat系、ubuntuはdebian系。
- redhat系: /var/log/secure
- debian系: /var/log/auth.log
ログインの失敗を確認する
sudo grep "Failed password" /var/log/auth.log
追記されるログをリアルタイムで確認する
sudo tail -f /var/log/auth.log
ログインの失敗というのは頻繁にあって、一番多いログインの失敗は、既にroot
ユーザーで使うsudo
です。
Discussion