先日ConoHa VPSを借りたのですが、ファイアウォール周りが分からなすぎてSSH接続の設定だけでだいぶ沼にハマったので書き残しておきます。正直CentOSじゃなくてUbuntuで作っとけばよかった…
Contents
環境情報
- ConoHa VPS 2GBプラン
- CentOS(Stream9)
- macOSのターミナル.appを使用してSSH
注意事項
- 設定変更時は必ずバックアップをとって下さい
- セキュリティの設定は自身の責任で行って下さい
- 設定ファイルの編集時にはnanoを使っています。使い方は各自調べるか、viやemacs等好きなエディタを使って下さい
公開鍵認証かつrootでSSHできるようにする
手始めにrootユーザーで公開鍵認証を使ってSSH接続できるようにしてみましょう。
ファイアウォール(GUI)の設定
まずはファイアウォールの設定を行います。ConoHaコントロールパネルの、サーバーを選択し、ネームタグがリンクになっているのでクリックします。
ページが遷移したら、ネットワーク情報タブを開いて一番下にあるセキュリティグループの鉛筆ボタンを押します。
+ボタンで、IPv4v6-SSHを選択して追加します。
公開鍵と秘密鍵の設定
次に、ConoHaコントロールパネルの、セキュリティ›SSH Key›追加ボタンから、SSH Keyを作成します。
登録方法は自動生成を選びます。ネームタグが秘密鍵のファイル名となるので自分でConoHa VPS用秘密鍵だなと分かる名前にした方が良いでしょう。
ネームタグを入力して保存ボタンを押すと秘密鍵(.pem)のダウンロードができるので、.pemファイルを自分のPCの~/.ssh
ディレクトリに保存します(~/.ssh
ディレクトリがなければ作成します)。
※~/.ssh
ディレクトリは不可視ディレクトリなので、Finderで表示する場合は⌘⇧.のキーボードショートカットで見えるようになります。
configファイルに接続情報を登録
~/.ssh/config
ファイルを編集します(なければ新しく作ります)。
cd ~/.ssh
nano config
000.000.000.000
の箇所はVPSのIPアドレスを入力して、IdentityFileの右側にはコントロールパネルからダウンロードした秘密鍵のパスを入力します。
Host conoha
HostName 000.000.000.000
IdentityFile ~/.ssh/conoha.pem
User root
あとは以下のように接続名を入力することで、簡単にrootユーザでsshできるようになります。
ssh conoha
root@000.000.000.000's password: [VPS作成時に設定したrootパスワード]
一般ユーザを作成し、sudo権限を付与
rootユーザで色々やるのは便利ですが、セキュリティが心配なので最終的にrootユーザでSSHを禁止することを目標として、一般ユーザでSSHできるようにしていきます。
一般ユーザを作成
まずrootユーザーでSSHログインしてから以下のコマンドで一般ユーザーを作っていきます。ユーザ名はご自由にどうぞ。
# 'user'という名前のuserを作成
useradd user
# 'user'アカウントにパスワードを設定
passwd user
# 'user'を'wheel'グループに追加
gpasswd -a user wheel
CentOSではユーザをwheelグループに追加することでsudoが使えるようになります。追加でsudo時にパスワードを不要とするよう設定もできるようですが、流石にちょっと怖いのでこの記事ではやらないでおきます。
ローカルで公開鍵、秘密鍵を作成
ユーザーを作ったら、一旦PCの方のターミナルで、一般ユーザー用の公開鍵と秘密鍵を作成していきます。例によって-fオプションの後の名前はご自由に。passphraseは何も入力しなければパスフレーズなしとなります。
cd ~/.ssh
# conohauserという名前の公開鍵、秘密鍵を作成
ssh-keygen -t ed25519 -f conohauser
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
ls
config
conohauser
conohauser.pub
known_hosts
lsコマンドで~/.sshディレクトリを見ると-fオプションで指定した名前そのままのファイル(秘密鍵)と.pubが後ろについたファイル(公開鍵)が生成されたことが確認できます。
公開鍵をVPSに転送
PCの方のターミナルで作業をします。scpコマンドで公開鍵をVPSに転送します。
# VPSのIPアドレス000.000.000.000宛にconohauser.pubファイルを/home/user/.ssh/ディレクトリにauthorized_keysという名前に変更して転送
scp ~/.ssh/conohauser.pub root@000.000.000.000:/home/user/.ssh/authorized_keys
configファイルに接続情報を登録
あとはrootでのSSHの時と同じように~/.ssh/config
ファイルを編集します。
cd ~/.ssh
nano config
000.000.000.000
の箇所はVPSのIPアドレスを入力して、IdentityFileの右側には先ほど作成した秘密鍵のパスを入力します。
Host conohauser
HostName 000.000.000.000
IdentityFile ~/.ssh/conohauser
User user
あとは以下のように接続名を入力することで、簡単に一般ユーザでsshできるようになります。一応sudoもできるか試してみましょう。
ssh conoha
root@000.000.000.000's password: [VPS作成時に設定したrootパスワード]
ポート変更をする
デフォルトでSSHのポートは22ですが、ブルートフォースアタックの標的になるのを防ぐためにポートを変更してみます。今回は61234ポートへの変更の例を示します。
まず、GUIでConoHaのファイアウォールの設定を変更します。
セキュリティ›セキュリティグループを開いて、+セキュリティグループ
ボタンから新規セキュリティーグループを作ります。名前はなんでもいいですが、私はCustom SSHとしました。
セキュリティグループを作ったら、以下のようにポリシーを設定します。
通信方向 | イーサタイプ | プロトコル | ポート範囲 | IP/CIDR |
---|---|---|---|---|
Out | IPv6 | all | ||
Out | IPv4 | all | ||
In | IPv6 | TCP | 61234 | |
In | IPv4 | TCP | 61234 |
ConoHaコントロールパネルのサーバー›ネットワーク›セキュリティグループを編集して、先ほど作成したセキュリティグループ(CustomSSH)を追加します。
GUIでの設定が完了したら、今度はCLIでの設定です。ファイアウォールの設定で変更したいポートを許可する作業を行います。rootユーザーでログインして下さい。sudoが使える場合は一般ユーザーでsudoでもいいです。
# rootユーザーでSSHログイン
ssh conoha
nano /etc/firewalld/zones/public.xml
<port protocol="tcp" port="61234"/>
のように行を追記します。
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<port protocol="tcp" port="61234"/>
<forward/>
</zone>
次はsshdの設定で、SSHのポートを変更します。
nano /etc/ssh/sshd_config
#Port 22
となっている場所をPort 61234
のように変更します。
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 61234
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
設定を変更したらsshdとfirewalldを再起動します。
systemctl restart firewalld.service
systemctl restart sshd.service
次に、今のSSHセッションを切断せずに、ターミナルの別タブで試しに変更後のポートでSSH接続できるかやってみます。~/ssh/config
をnanoあたりで編集して、変更後のポートを指定します。
Host conoha
HostName 000.000.000.000
IdentityFile ~/.ssh/A1U-C-SSH.pem
User root
Port 62589
Host conohauser
HostName 000.000.000.000
IdentityFile ~/.ssh/conohauser
User user
Port 62589
connection refusedされなければ成功です。
ssh conoha
root@000.000.000.000's password: [VPS作成時に設定したrootパスワード]
もし、connection refusedされた場合は、切断しないでおいたセッションで設定を切り戻しすれば再び22番ポートで接続できるかと思います。
また、セッションを閉じてしまい完全にサーバーから締め出された場合は、ConoHaコントロールパネルのコンソール機能で切り戻しをしましょう。
ファイアウォールで22番ポートを閉じる
ポート変更が成功したら、念のためGUIのファイアウォールで22番ポートを閉じておきましょう。
ConoHaコントロールパネルの、サーバーを選択し、ネームタグがリンクになっているのでクリックします。
ページが遷移したら、ネットワーク情報タブを開いて一番下にあるセキュリティグループの鉛筆ボタンを押します。
ゴミ箱ボタンで、IPv4v6-SSHを削除し、保存します。
rootログインの禁止
ポート変更も完了したところで最後にrootユーザでのログインを禁止しておきます。一般ユーザでSSHログインして
sudo nano /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
となっている箇所をPermitRootLogin no
に変更します(コメントを外すのを忘れずに)。
# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
あとはsshdを再起動して、接続を切断します。
sudo systemctl restart sshd.service
exit
あとはrootでSSH接続してみてpermisson deniedと表示され接続できなくなっていれば成功です。
ssh conoha
root@000.000.000.000's password:
Permission denied, please try again.
root@000.000.000.000's password:
もし依然接続できてしまう際は以下の”PermitRootLoginをnoにしてもrootログインできてしまう場合”をご覧ください。
PermitRootLoginをnoにしてもrootログインできてしまう場合
上記の設定、sshdの再起動を行ったにもかかわらず、一般ユーザでssh接続して、以下のコマンドを実行してpermitrootlogin yes
と出た場合は追加設定が必要です。
sudo sshd -T | grep permitrootlogin
permitrootlogin yes
まず以下のコマンドで/etc/ssh/sshd_config.d/
ディレクトリにファイルがあるかどうか調べます。私の場合は3つのファイルがありました。
sudo ls /etc/ssh/sshd_config.d/
01-permitrootlogin.conf 50-cloud-init.conf 50-redhat.conf
以下のコマンドで01-permitrootlogin.confファイルを編集します。
sudo nano /etc/ssh/sshd_config.d/01-permitrootlogin.conf
このファイルにもPermitRootLoginの設定があるので、noに変更します。
# This file has been generated by the Anaconda Installer.
# Allow root to log in using ssh. Remove this file to opt-out.
PermitRootLogin no
あとはsshdを再起動して、接続を切断します。
sudo systemctl restart sshd.service
exit
あとはrootでSSH接続してみてpermisson deniedと表示され接続できなくなっていれば成功です。
ssh conoha
root@000.000.000.000's password:
Permission denied, please try again.
root@000.000.000.000's password:
コメントを残す