ConoHa VPSで行ったセキュリティ設定 (rootログイン禁止・ポート変更)


あらすじ

ConoHa VPSに登録
SSH接続できたことを確認

ConoHaVPS過去記事
https://qiita.com/kkabosu386/items/94e560d9c68f3f4b35c8

作業用ユーザ作成

rootでログインできてしまうとセキュリティ的に問題があります。
そのため、rootに変わる作業用ユーザを作成していきます。

まずは前回同様ssh接続していきます。

Terminal
$ ssh root@ipアドレス

vpsにログインできたら、作業用ユーザを追加していきます。
「kabosu」という部分は、お好きな名前に変更してください。
なお今回もパスワード入力時に、画面上に入力した文字は表示されないので注意が必要です。

# useradd kabosu
# passwd kabosu
ユーザー kabosu のパスワードを変更。
新しいパスワード: #任意のパスワードを入力
新しいパスワードを再入力してください: #任意のパスワード入力

これで、ユーザkabosuというユーザが作成できました。
しかし、このままではkabosuでログインした際、sudo(管理者権限で実行)がつかえません。

そのため、以下のコマンドを実行します。

# usermod -G wheel kabosu

usermod:ユーザの情報を変更するコマンド
-G: ユーザが所属するセカンダリーグループを変更
wheel: グループの一つ。このグループに属すると管理者権限で実行できる。つまり、sudoが使えるようになる。

上記のコマンドにより、kabosuがsudoを実行できるようになりました。

ここで、作成したユーザでログインできるか確認してみましょう。

$ ssh kabosu@ipアドレス

設定したパスワードを入力し、下記のようにログインできていればOKです。

[kabosu@ipアドレス ~]$

これまではrootでログインしてきましたが、kabosuが管理者(root)権限でコマンドを実行するには、先頭にsudoをつける必要があります。基本的に、

$ 一般の権限で実行できるコマンド
# root権限で実行するコマンド

といった感じで記載しておりますので、以降の作業を作業ユーザ(私の場合kabosu)で行う場合は、

sudo [root権限(#)で実行したいコマンド]

という形で実行してください。

rootユーザのログイン禁止

続いて、rootでのログインを禁止していきます。
大切なConfigファイルをいじるので、一度バックアップをとります。

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.20201125

# cp コピー元パス コピー先パス
で、 コピーが可能です。
ファイル名の末尾に編集日の日付をつけておくと、いつのバックアップかわかりますね。

ここで、コピー元の /etc/ssh/sshd_configを編集していきます。
vimの使い方は下記URLをご参照ください。
https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d

# vim /etc/ssh/sshd_config

下記を追加していきます。

/etc/ssh/sshd_config
PermitRootLogin no

場所はどこでもいいのですが、自分の場合47行目あたりに
#PermitRootLogin yes
があったので、その下に追加しました。
行数は、vimの:set numberで確認可能です。

vimを抜けたら、ちゃんと編集ができたか確認します。

# diff /etc/ssh/sshd_config /etc/ssh/sshd_config.20201125
< PermitRootLogin no

diff:二つのファイルを比較して、差分を出力してくれます。

この時点では、設定が反映されていないので、sshdを再起動します。

※root以外の作業ユーザ(私の場合kabosu)でログインできることを確認してからにしましょう!!誰もログインできなくなったらかなり厄介です…
(もしそうなった場合は、VPSの管理画面からログインして設定し直す必要がありますが、今回は割愛します。)

# systemctl restart sshd 

改めて、別ウィンドウからTerminalを開き、rootでログインを試みましょう。

$ ssh root@ipアドレス

ログインできなくなっていたら、成功です。

ポート番号の変更

デフォルトのsshdは22番ポートを使用する設定になっています。
しかし、デフォルトのままだと22番ポートからの侵入を目的とした攻撃を受けやすくなってしまいます。

他のセキュリティ対策を行っていれば、そこまで重要度が高いわけではありません。
しかし、攻撃への対処(認証)でCPUに負荷をかかるのを防ぐ点でもメリットがあります。

今回は、22番の代わりに22222番ポートを使用する設定にしていきます。

firewall(ポート開放)

まず、ファイアウォールの状態を確認します。

# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
   Active: active (running) since Sat 2020-10-31 21:39:44 JST; 3 weeks 3 days a>
     Docs: man:firewalld(1)
 Main PID: 15088 (firewalld)
    Tasks: 3 (limit: 5048)
   Memory: 20.7M
   CGroup: /system.slice/firewalld.service
           └─15088 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork>
# firewall-cmd --list-port
22/tcp

1つ目のコマンドでは、緑の字でActive: active (running)みたいに書いてあれば起動してい流ことが確認できます。起動していない場合は下記コマンドを実行しましょう。

# systemctl start firewalld

2つ目のコマンドで、ports: 22/tcpと書いてありますが、firewall上で22番ポートが開放されているという意味です。
つまり、22番ポート以外を使って通信しようとすると、ブロックされてしまいます。

まずは、下記コマンドで、22222番ポートを開放します。さらにfirewallの設定を反映させます。最後に、開放されたか確認します。

# firewall-cmd --add-port=22222/tcp --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-port

ports: 22/tcp 22222/tcpのように表示されていればOKです。

22222番ポートでも通信が可能になったので、ssh接続を22番から、22222番ポートに変更する設定をしていきます。

ファイル編集時は、バックアップを忘れずに。

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.20201125
# vim /etc/ssh/sshd_config
/etc/ssh/sshd_config
#Port22    #ポート22をコメントアウトしつつ
Port22222 #ポート22222で接続するよう設定します。

もう一つ、ssh.xmlファイルを編集するのですが、今回は代わりに、
ssh-22222.xmlを作って、そちらを読み込ませるようにします。

# cp -p /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/ssh-22222.xml
# vim /usr/lib/firewalld/services/ssh-22222.xml

<port protocol="tcp" port="22"/>部分を以下に書き換えます。

/usr/lib/firewalld/services/ssh-22222.xml
<port protocol="tcp" port="22222"/>

firewallにssh-22222.xmlを読み込ませます。

# firewall-cmd --add-service=ssh-22222 --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --list-services
ssh ssh-22222

SELinux(ポート開放)

最後に、SELinuxの設定をします。
SELinuxも、セキュリティとして機能しているので、firewall同様ポート開放してあげる必要があります。

# dnf install -y policycoreutils-python-utils
# semanage port -a -t ssh_port_t -p tcp 22222
# semanage port --list | grep ssh
ssh_port_t                    tcp      22222, 22

最後に、sshdを再起動します。

# systemctl restart sshd

接続テスト

22222番ポートから接続できるかテストしたいのですが、これまで作業してきたターミナルは閉じず、新しいものを開いて、そちらから接続確認をしてください。

Terminal
$ ssh -p 22222 kabosu@ipアドレス

これで通常通り接続ができれば、問題ありません。
最後に、firewallの22番ポートを閉じていきます。

後片付け(ポート22を閉じる)

無事ポートの変更ができたので、使用しない22番ポートは閉じておきます。

# firewall-cmd --permanent --remove-service=ssh

なお、SELinuxはデフォルトの22番ポートを閉じることはできないようです。
とりあえず、ここまででセキュリティ対策は完了です。

まとめ

アプリを公開と謳っておきながら、全然辿り着けてませんね。
しかし、グローバルに公開する以上、これだけでもまだ足りないぐらいなのではないでしょうか。

次回:Dockerインストール

CentOS8にDockerをインストールしていきます。
実は、CentOS8へのインストールは推奨されていないようです。
そのため、まだOSが選べる段階の方は、CentOS7系を選択することをお勧めします。
私は愚かなことに、よくみないで8系を選んでしまいました。そのため、説明はCentOS8で引き続き行います。

次回:準備中
前回:https://qiita.com/kkabosu386/items/94e560d9c68f3f4b35c8

参考・引用

http://blog.azumakuniyuki.org/2011/05/sshd-port-number-should-be-changed-to.html
https://qiita.com/picor/items/8823ecef51bf2aff327c
https://www.atmarkit.co.jp/ait/articles/1612/14/news022.html
https://qiita.com/picor/items/8823ecef51bf2aff327c
https://chibashi.me/development/centos8-ssh-2004/
https://blog.potproject.net/2020/03/25/centos8-docker-ce