格安VPS Contaboを契約して、サーバー環境を整える
2024-09-30
Post Image

初めて、Contaboを借りサーバーを環境を整えるまでの手順を記録します。 VPSサーバーの最低限のセキュリティ対策についても記録するので、お役に立てば幸いです。

Contabo

2003年、ドイツに設立された格安VPSを提供する会社。

国内で最安と名高い、WebARENA Indigo(キャンペーン時)よりも同等スペックで比較すると少し安い。とはいえ、WebARENA Indigoは低スペックマシンで良ければ、かなり安くVPS構築できると思います。なにより日本語ですし。

VPSの立ち上げ

アカウントを作成し、お好きなスペックのVPSを契約します。(割愛) Contaboのコントロールパネルから、以下のように進みます。

  • control panel > VPS control

ここで、Serverの項目からIP addressをメモしておきます。 クライアントPCにて、ターミナルを起動し、ssh接続をする。

ssh root@<IP address>
> Are you sure you want to continue connecting?

となるので、yesとして、VPS契約時のroot passwordを入力します。

のようにクライアントPCのターミナルに出力されれば、ホストPCへの接続成功です。

最低限のセキュリティ対策

rootでのSSH接続とパスワードによるSSH接続の無効化

このままでは、rootに対して手当たり次第にパスワードを試されれば、不正ログインされてしまいます。
そこで、最低限のセキュリティ対策を施します。

一般ユーザーの作成

ユーザーを作成する。

root@*******:~# sudo useradd -m -s /usr/bin/bash <user name>
root@*******:~# sudo passwd <user name>
New password: 
Retype new password: 
passwd: password updated successfully

sudoグループに新規ユーザーを追加

sudo adduser <user name> sudo
cat /etc/group | grep sudo

クライアント側での鍵ペア(公開鍵&秘密鍵)の生成

ホストPCに公開鍵を格納するために、<.ssh>ディレクトリを作成します。

ssh <user name>@<IP address>
mkdir ~/.ssh
exit

クライアントPCで鍵ペア(公開鍵&秘密鍵)の生成します。

ssh-keygen -t ed25519 -C '<コメント>' -f ./<filename>

以下のパスワード設定を求められます。パスワードなしでも設定できます。

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

秘密鍵(filename)、公開鍵(filename.pub)が作成されるので、クライアントPCからホストPCへ公開鍵をコピーします。

scp ./<filename>.pub <user name>@<IP address>:/home/<user name>/.ssh/<filename>.pub

ホストPCに入り、authorized_keys ファイルを作成し、公開鍵を付加し、権限を変更します。

touch ~/.ssh/authorized_keys
cat ~/.ssh/<filename>.pub > ~/.ssh/authorized_keys
sudo chmod 600 ~/.ssh/authorized_keys

ファイアーフォールの設定

現状、SSH接続のポートはデフォルトの22が使われています。 それでは、攻撃の対象になりやすいので、SSH接続のポートの変更と、ファイアーフォールの設定を行います。

sudo ufw status
> Status: inactive

初期設定では、ファイアーフォールの設定は行われていません。
ufwを起動します。

sudo ufw enable
sudo ufw status verbose

ポートを開けます。
この際に、デフォルトの22を開放しないと、万一時間制限で接続が切れた際に、再接続できなくなりますので、念のため開放し、後ほど閉じます。

sudo ufw allow 22  
sudo ufw allow <ssh接続用のポート番号>  

ちなみに任意のIPからのみの接続に制限したい場合は以下です。

sudo ufw allow from XXX.YYY.ZZZ.ZZZ to any port <> proto tcp

ufwが起動中であるため、ufwのリロードします。

sudo ufw reload

sshの設定ファイル変更

sudo vi /etc/ssh/sshd_config

ls -al /etc/ssh/sshd_config.d/*.confにて、他のファイルにも注意

#ポート番号の変更
- #Port 22
+ Port <ssh接続用のポート番号>
#root でのログインの抑止
- #PermitRootLogin prohibit-password ←この記述はないかもしれません。
- PermitRootLogin yes
+ PermitRootLogin no
# パスワード認証の抑止
# PasswordAuthentication yes
PasswordAuthentication no
#空のパスワードの抑止 
- #PermitEmptyPasswords no
+ PermitEmptyPasswords no
#最大の認証の試行回数.多数の認証を試みることを防ぐ. 
- #MaxAuthTries 6
+ MaxAuthTries 6
#sshプロトコルバージョン2のみを有効
+ Protocol 2

SSH接続の設定を反映させてログアウトします。

sudo systemctl restart sshd.service
exit

以下で設定の確認

sudo sshd -T | grep -E 'passwordauthentication|pubkeyauthentication|challengeresponseauthentication|usepam'

ファイアーフォールの設定(ポート22の閉鎖)

sudo ufw delete allow 22

最低限のセキュリティ対策は以上です。お疲れ様でした。

備忘録

不正ログインされていないか確かめる方法

ログイン成功のログを確認する。

sudo cat /var/log/auth* | grep "sshd" | grep "Accepted"

ログイン失敗のログを確認する。

sudo cat /var/log/auth* | grep "sshd" | grep "Failed password"

ubuntu 24.04から

恐らく、以下はUnit sshd.service could not be found.となる。

sudo systemctl restart sshd.service

そのため、

sudo systemctl status ssh.service
ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: enabled)
sudo systemctl enable ssh.service
Synchronizing state of ssh.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable ssh
Created symlink /etc/systemd/system/sshd.service → /usr/lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /usr/lib/systemd/system/ssh.service.
sudo systemctl disable ssh.socket
sudo systemctl stop ssh.socket
sudo systemctl list-units | grep ssh
sudo systemctl restart sshd.service
sudo systemctl restart ssh.service
sudo sshd -T | grep -E 'passwordauthentication|pubkeyauthentication|challengeresponseauthentication|usepam'
sudo ss -tuln | grep :2222

もし、ssh接続ポートを変更しても22で接続できる場合は以下で残留プロセスを探し、sshd: (ユーザー名)@pts/0が残っているかも

ps aux | grep sshd
sudo kill  -9 <残留PID>

sudo nano /etc/ssh/sshd_config.d/50-cloud-init.confPasswordAuthentication no

格安VPS Contaboを契約して、サーバー環境を整える
https://notes.midnightstops.com/posts/7/
作者
Author
公開日
2024-09-30