8. SSHサーバーの設定
この章では、Oracle Linux 8でSSHサーバーを設定する作業について説明します。
SSHは、リモートからサーバーにアクセスして作業ができるものです。Windows用のクライアントソフトもありますから、いちいちサーバーの前に行かなくても、普段使っているWindowsマシンから、サーバーのメンテナンスが行えるようになります。
そして、Windows用のクライアントソフトでは、コピペで編集作業ができるようになるため、作業効率がぐっと上がります。頑張って設定してください。
また、このサーバーは、私の甥っ子のLinux勉強環境としても用意しているため、外部インターネットから接続できるようにします。そのため、暗号化通信でのみログインできるように、設定しています。
しかし、初期設定での22番ポートを用いて、外部からのSSH接続は、あまりお勧めしません。SSHの通常のポートである、22番ポートを開放すると、ここに遠隔操作ができるサーバーがありますよと、駅のプラットホームで大声を出して宣伝しているようなものです。それも、全世界に向けて。
よって、後述するポートの変更設定をしてから、外部に公開することをお勧めします。ポートを変えてしまえば、それが開いていることは外部から確認できても、SSH用なのかどうなのかが、すぐにはわからなくなりますので。
なお、SSHサーバーであるsshdはデフォルトでインストールされているため、インストール作業は不要です。
また、初期設定でファイアーウォールの受信許可にsshが入っているため、この設定変更も不要です。一応、ファイアーウォールの設定を確認してみてください。
sudo firewall-cmd --list-services
表示された中にsshがあれば大丈夫です。
ここから、SSHサーバーである、sshdの設定を行います。
設定ファイルである、sshd_configを編集します。
sudo vim /etc/ssh/sshd_config
参考書の注意書きにもありますが、/etc/ssh/ssh_configというファイルも存在します。sshdと、dを忘れないようにしてください。
45行目辺りにある、以下の行を変更します。
変更前
PermitRootLogin yes
変更後
#PermitRootLogin yes
PermitRootLogin no
これは、rootユーザーでのログインを禁止するものです。これが許可されていますと、万が一rootユーザーのパスワードが突破された場合、遠隔操作でシステムの全権限を与えることになり、恐ろしいほど危険です。必ず設定を忘れないようにしてください。
なにもそこまでしなくてもと、思う方もいるかもしれませんが、セキュリティは何重にもかけておくのが常識です。
防壁は人が作ったものである以上、完璧なものではありえません。必ずいつかは突破されるものとして、サーバーを運用しなくてはなりません。防壁を一つ破られたら、即座に全権限を与えてしまうようなサーバーでは、決して外部に公開すべきではありません。
75行目あたりにある、以下の行を変更します。
変更前
PasswordAuthentication yes
変更後
#PasswordAuthentication yes
PasswordAuthentication no
80行目あたりにある、以下の行を変更します。
変更前
ChallengeResponseAuthentication yes
変更後
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
これらの2つの設定は、通常のパスワード認証を拒否するものです。通常のパスワード認証では、パスワードが平文(暗号化されていない状態)で流れていくため、必ず拒否設定を忘れないようにしてください。
最終行にAllowUsersを以下のように追加します。
AllowUsers oluser@192.168.0.0/24
後ろの値は、接続を許可するユーザー名です。複数存在する場合は、空白で区切って追加していきます。ユーザー名の後ろの@から始まる部分は、接続を許可するIPアドレスの範囲です。その後ろの/24の部分は、サブネットマスクの長さです。本稿ではサブネットマスクの詳しい説明は省略しますので、詳しくは参考書を参照してください。
なお、複数のアドレス範囲から許可する場合も、この後ろに空白で区切って、oluser@12.34.56.78/32のように追記します。
保存してvimを終了してください。
次にSSHサーバーの待ち受けポートの変更を設定します。ここまでの設定では、標準ポートである22番ポートが外部に向けて開いていますので、攻撃者がよってくる可能性があります。
ここでは、参考書の例にならって、10022番ポートに変更する例を書いておきます。待ち受けるポート番号は、各人で変更してください。ただ、ポートはどこを使ってもいいわけではなく、すでに予約されているものも多数あります。こちらのwikiを参考にして、空いているところにしてください。
まず、前提条件として、参考書にはファイアーウォールの設定例だけが書いてありますが、これだけでは設定できませんでした。SSHサーバーのポート番号を変更しようとすると、エラーになりました。
いろいろと調べた結果、セキュリティ機能であるSELinuxの設定を変更しないといけませんでした。SELinuxについての詳しい説明は、参考書を参考にしてください。
SELinuxのポリシーにポート番号を追加します。なお、semanageコマンドは、ユーティリティをインストールしないと使えません。詳しくは前の章を参照してください。
sudo semanage port --add --type ssh_port_t --proto tcp 10022
変更できたかどうかは、以下のコマンドで確認できます。
sudo semanage port --list | grep ssh
以下のように表示されていれば、成功です。
ssh_port_t tcp 10022, 22
なお、設定完了後に、SELinuxの設定からTCP 22番ポートを削除しようとしましたが、エラーが表示されてできませんでした。最初からポリシーで定義されているものは、削除できないようです。
次に、ファイアーウォールの設定を変更します。参考書にもありますが、/usr/lib/firewalld/services/ディレクトリの中は、システムの参照用ですので、変更してはいけません。必ず/etc/firewalld/services/にコピーして編集します。ただ、参考書の例では、そのままの名前でコピーしていましたが、ファイアーウォールで設定が反映されたかどうかが分かりにくかったため、ファイル名を変更してコピーしています。
次のコマンドを入力し、設定ファイルをssh-10022.xmlとしてコピーします。
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-10022.xml
設定ファイルを編集します。
sudo vim /etc/firewalld/services/ssh-10022.xml
5行目あたりを、以下のように書き換えます。
変更前
<port protocol="tcp" port="22"/>
変更後
<port protocol="tcp" port="10022"/>
ファイアーウォールの受信許可から、元のssh設定を削除し、ssh-10022の設定を追加します。
sudo firewall-cmd --add-service=ssh-10022 --permanent
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --reload
設定が反映されたかどうかは、以下のコマンドで確認できます。
sudo firewall-cmd --list-services
表示からsshが消えて、ssh-10022が追加されていれば、成功です。
SSHサーバーの待ち受けポートを変更します。
sudo vim /etc/ssh/sshd_config
17行目あたりを、以下のように書き換えます。
変更前
#Port 22
変更後
#Port 22
Port 10022
SSHサーバーを再起動します。
sudo systemctl restart sshd
SSHサーバーのステータスを確認し、エラーがないことをチェックします。
sudo systemctl status sshd
この時表示されるステータス画面は、qを押すと終了します。
なお、実際にSSHサーバーに接続するためには、鍵と呼ばれるファイルの設置が必要です。後の章でのSSHクライアント設定の所に書いていますので、そちらを参照してください。