ConoHa VPS(CentOS)のSSH設定をする(公開鍵認証、rootログイン禁止、ポート変更)

先日ConoHa VPSを借りたのですが、ファイアウォール周りが分からなすぎてSSH接続の設定だけでだいぶ沼にハマったので書き残しておきます。正直CentOSじゃなくてUbuntuで作っとけばよかった…

環境情報

  • 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
OutIPv6all
OutIPv4all
InIPv6TCP61234
InIPv4TCP61234

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: 

参考

コメントを残す

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Proudly powered by WordPress | テーマ: Baskerville 2 by Anders Noren

ページ先頭へ ↑