🔐

SSHdの設定

2022/09/03に公開

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の他のオプション
https://qiita.com/ine1127/items/b50b9a8f831736cf14ea

ChallengeResponseAuthenticationについての解説
https://unskilled.site/sshd_configの設定項目の理解を目指す/

SSHデーモンを起動したら

外部からSSHログインを狙ってたくさんのアクセスがあります。(ログを確認すると恐ろしい量のログイン失敗が記録されています)
パスワードログインをdeny(鍵認証)にしておけば大丈夫だと思いますが、秘密鍵が漏洩する可能性はゼロではありません。念の為の予防策も講じて起くと楽しいと思います。

秘密鍵にはかならずパスワードを付ける

秘密鍵が漏れる可能性はゼロではありません。もし万が一、漏洩した場合に備えて、パスワードは必ずつけておきましょう。

待ち受けポートの変更

sshのデフォルトの待ち受けポートは22番ですが、これを30022や60022などに変更しましょう。
経験上、ポート番号が変更されているだけで、もうログイン試行してきません。

fail2ban

規定回数ログインを失敗したら、そのIPアドレスからのログインをブロックします。
debianは、そのままでは起動できなかったので、以下の記事を参照。
https://zenn.dev/tomoakinagahara/articles/cedcc6a6bd5730#fail2ban

ハニーポット

ニセモノの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