基礎から学ぶ!最初にやるべきSSHのセキュリティ設定【全コマンド例付き】

ターミナル画面のイメージ画像

CentOSやUbuntuなど、Linux/Unix系のOSをインストールした直後に必ず行う設定といえば、SSHに関する設定です。今回は、本格的にSSHを使う前にやっておきたい設定を、コマンド例つきで、なるべく初心者の人にもわかりやすいように紹介します。

なお、コマンド例はCentOSのものとなります。

なぜSSHの設定をしなければいけないのか

SSHは、OSインストール時のデフォルトの設定でも動くには動きます。しかし、セキュリティが甘い状態で動作しているのです。

このままの状態でSSHを使っていくと、サイバー攻撃の被害を受けてしまうリスクが上がります。SSHを乗っ取られると、最悪の場合、サーバに対しておよそ何でもできてしまうので、攻撃者に自分のサーバーで好き放題されてしまいます。

これを防ぐために、よりセキュリティの高い設定をするのがサーバー管理上必須となります。

SSH設定前の予備知識

sshd_config というファイルがサーバー側の設定ファイルなので、基本的にこれを変更していきます。

ファイルパスは、/etc/ssh/sshd_config です。

ssh_config というファイルが同じディレクトリにありますが、これは違うので注意。

sshd_config の読み方

書式

設定の種類 設定値

という書式で1行に1つづつ設定を並べていきます。設定の種類と設定値の間には半角スペースを1つ入れます。

設定と設定の間に空行を置いても問題ありません。

コメント

先頭が # ではじまる行はコメントとして扱われます。コメントは設定とは認識されず、行頭に # と書くことで設定に対する注釈を書いたり、その行の設定を無効にすることができます。

以下の例では、1行目と4行目がコメントとして認識されます。

1行目は2行目に関する注釈で、4行目の設定内容は無効になります。

#SSHのポート番号を10022番に変更する
port 10022

#HostKey /etc/ssh/ssh_host_dsa_key

設定にあたっての注意点

設定ファイルを書き換えるだけでは設定が反映されない

設定ファイルを書き換えたうえで、sshdを再起動することではじめて設定が反映されます。

設定が完了し、動作確認がとれるまで既存のSSHコネクションは切断しない

設定が中途半端であったり、間違っているまま既存のコネクションを切断すると、最悪の場合再度サーバーに接続することができなくなります。

一方、sshdを再起動して新たな設定を反映させても、既存のコネクションには影響がないので、仮に間違った設定をしてしまっても既存のコネクションを使って設定を修正することができます。

コネクションの切断は、SSHターミナルの画面を閉じたり、ネットワーク接続が切れたりした場合に起こりますので注意しましょう。(接続しているPCがスリープモードになるだけでも切断される場合があります)

SSHの設定方法

sshd_config の設定

ここからの操作を行うには、基本的にroot権限が必要なのでrootにスイッチして作業を行います。

$ su root

sshd_config を開き、設定項目を以下のように編集します。

$ vi /etc/ssh/sshd_config

以下の設定項目には、元から設定ファイルに書かれている項目と書かれていない項目がありますが、書かれているものは設定値を変更し、書かれていないものは新しく追記してください。

各設定項目の詳細説明は以下に続きます。

#sshdがリッスンするポート番号の変更
port <22以外の任意のポート番号>

#rootでのログインを禁止
PermitRootLogin no

#公開鍵認証を有効化
PubkeyAuthentication yes

#パスワード認証を無効化
PasswordAuthentication no

#チャレンジレスポンス認証を無効化
ChallengeResponseAuthentication no

#接続をSSH version2 のみに限定する
Protocol 2

sshdが待ち受けるポート番号の変更

sshdが接続を待ち受けるポート番号は、デフォルトでは22番です。これは周知の事実なので、手あたり次第22番ポートに接続しようとする攻撃が多いです。これを回避するのがこの設定の目的です。

sshd_config 上の設定

#例:sshdが待ち受けるポート番号を10022番に変更する
port 10022

変更するポート番号は0~65535の中から選べますが、ほかのサービスが使っているポート番号とかぶらないようにしましょう。特に0~1023番ポートはかぶりやすいので大きめの番号を使ったほうが無難かもしれません。

ファイアウォールの開放(firewalld)

SSHで使用するポート番号を変更したら、それに合わせてファイアウォールに許可設定をし、接続を許可します。firewalldを利用している場合の設定方法を示します。

#firewalldの場合(CentOS7のデフォルトはこっち)
#--permanent: 設定を恒久的に変更する(指定しなければ、OS再起動で元に戻る)
$ firewall-cmd --add-port=<変更したポート番号>/tcp --permanent
$ firewall-cmd --reload

–permanent を指定すると設定が即時反映されないので、firewalldをリロードしてやる必要がある点に注意。

ファイアウォールの開放(iptables)

ファイアウォールにiptablesを利用している場合の設定方法を示します。

$ iptables -I INPUT -p tcp --dport <変更したポート番号> -j ACCEPT
#設定を恒久的に変更する
$ service iptables save

SSH接続クライアントの設定変更

使用しているSSH接続クライアントの設定で、接続するポート番号を、変更したポート番号に変更するのを忘れないようにしましょう。

rootでのログイン禁止

この設定を行う理由は主に2つ

  • 万が一、攻撃者へrootユーザーでのアクセスを許すと特に被害が大きいため
  • 基本的にどのサーバにもrootユーザーは存在するため、rootログインを許すと攻撃者がユーザー名を推測する手間が省けてしまうため

sshd_config 上の設定

PermitRootLogin no

root以外のユーザーがいない場合は、適宜作ってください。

#例:新規ユーザー tanaka の作成
$ useradd tanaka

#パスワードの設定
$ passwd tanaka

SSH接続クライアントの接続ユーザーの設定を変更するのも忘れないように。

公開鍵認証の有効化

公開鍵認証とは、「公開鍵」「秘密鍵」と呼ばれるファイルを生成し、秘密鍵を持っている端末からのみログインを許可する認証方式です。

デフォルトのパスワード認証の場合、パスワードが漏洩すれば不正アクセスを許してしまいますが、公開鍵認証の場合、鍵ファイル + 鍵ファイルに掛けたパスワード が漏洩しない限り不正アクセスを許すことはありません。

公開鍵と秘密鍵を生成して配置する方法は色々あるのですが、今回は環境を選ばず、操作が簡単な方法を紹介します。※1操作を簡単にするため今回は鍵ペアをサーバで生成し、秘密鍵を接続側へ持ってくるという方法をとっていますが、本来は接続側で鍵ペアを生成して公開鍵をサーバーへ登録するのがベターです。

具体的な手順は、5分でSSHの公開鍵認証を有効化する方法【ファイル転送ソフト不要】を参照してください。

接続をSSH version2 に限定する

SSHには、バージョン1と2が存在します。バージョン1には脆弱性があるので、接続のプロトコルをバージョン2に限定します。※2OpenSSH バージョン7.4 (リリース:2016年12月)でSSH version1 のサポートが終了したので、比較的新しいサーバではこの設定は不要です。とはいえ、バージョン7.4以降でこの設定を追加しても特にエラー等にはならないので、問題にはなりません。

sshd_config の設定

Protocol 2

設定の反映&確認

すべての設定が完了したので、sshdを再起動して設定を反映します。

$ systemctl restart sshd

無事に再起動したら、設定を変更するのに使ったコネクション(画面)は切断せずに、別のウィンドウから新しい接続ができるか確認します。

正常に接続できなかった場合、接続済みのコネクションを使って設定に不備がないか確認・修正します。

正常に接続することができたら、コネクションを切断しても大丈夫です。

 

設定は以上です。

より発展的な設定

これらの設定で最低限のセキュリティは確保されると思われます。

OpenSSHにはこれ以外にも数多くの設定があります。より詳しく知りたい方は以下の記事を参照ください。

SSHのセキュリティをさらに高める設定

脚注   [ + ]

1. 操作を簡単にするため今回は鍵ペアをサーバで生成し、秘密鍵を接続側へ持ってくるという方法をとっていますが、本来は接続側で鍵ペアを生成して公開鍵をサーバーへ登録するのがベターです。
2. OpenSSH バージョン7.4 (リリース:2016年12月)でSSH version1 のサポートが終了したので、比較的新しいサーバではこの設定は不要です。とはいえ、バージョン7.4以降でこの設定を追加しても特にエラー等にはならないので、問題にはなりません。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です