今回の目的
- VPS上で構築したWEBサイトに、簡単なhtmlページを表示させる。
- 独自ドメイン&SSL(Let’s Encript)の導入
- 新規sudoユーザー追加、rootユーザーの無効化
- ファイヤーウォール、Fail2Banのインストール(セキュリティ強化)
学習環境
Xserver VPS(Ubuntu 24.04)
SSHログイン
管理パネルの「パケットフィルター設定」にてSSHポートを開放
ポートを開放しておかないとSSH接続できない。
pemファイルをダウンロードし、所定のディレクトリに配置
e.g.) ~/.ssh
pemファイルのパーミッション設定
chmod 400 ~/.ssh/ssh-key.pem
SSH接続
ssh -i ~/.ssh/ssh-key.pem root@000.000.000.000
初回接続時には以下のようにメッセージが出るが、続行する。
The authenticity of host '000.000.000.000 (000.000.000.000)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
時間を置くとタイムアウトしてしまう?ので手早く手続きする。
Warning: Permanently added '000.000.000.000' (ED25519) to the list of known hosts.
Connection closed by 000.000.000.000 port 22
2回目以降の接続時には上記のようなメッセージは出ない。以下のようになればSSH接続確立。
Last login: Tue Apr 30 15:20:24 2024 from 111.111.111.111
root@x000-000-000-000:~#
Apacheのインストール
パッケージ更新
sudo apt update
Apacheのインストール
-y オプション:すべての選択肢に対して自動で yes とする。
インストールには数分かかるので気長に。
sudo apt install apache2 -y
Apacheの起動と自動起動設定
sudo systemctl start apache2
sudo systemctl enable apache2
Apacheの起動確認
sudo systemctl status apache2
Active: active (running) と応答があればOK.
ブラウザでアクセスしてみる・・・
http://000.000.000.000 にアクセスするが、接続が確立されないので、以下を確認
ファイヤーウォールによる制限の有無
sudo ufw status
→ Status: inactive となり、ファイヤーウォールは原因でない。
Apacheがポート80で待ち受けているかの確認
sudo ss -tlnp | grep :80
LISTEN 0 511 *:80 *:* users:(("apache2",pid=30867,fd=4),("apache2",pid=30866,fd=4),("apache2",pid=30864,fd=4))
→ 問題なし。
WEBアクセスのポート開放

→ Ubuntuの初期ページが表示された(成功)
独自のhtmlファイルを設置してみる
デフォルトページをリネーム(バックアップ)
sudo mv /var/www/html/index.html /var/www/html/index.html.bak
独自htmlファイルを設置(echo ‘…..’ | sudo tee /var/www/html/index.html
echo '<!DOCTYPE html><html><head><title>MY VPS</title></head><body><h1>Hello, VPS!</h1><p>This is my HTML page</p></body></html>' | sudo tee /var/www/html/index.html
<!DOCTYPE html><html><head><title>MY VPS</title></head><body><h1>Hello, VPS!</h1><p>This is my HTML page</p></body></html>
- echo ‘…..’ :出力
- | : 出力内容を右側コマンドの入力内容として渡す
- tee : 受け取った内容を指定ファイルに書き込む
→ 独自htmlファイルの表示に成功
独自ドメインの設定
ドメイン設定ファイルの作成
sudo nano /etc/apache2/sites-available/yourdomain.com.conf
作成したら、以下内容を記載
<VirtualHost *:80>
ServerName yourdomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/yourdomain_error.log
CustomLog ${APACHE_LOG_DIR}/yourdomain_access.log combined
</VirtualHost>
保存: Ctrl + O
→ Enter
終了: Ctrl + X
設定を有効化
sudo a2ensite yourdomain.com.conf
*a2ensite : Apache2 Enable Site の略
Apacheをリロード
sudo systemctl reload apache2
SSL(Let’s Encript)の導入
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com
- メールアドレスの入力を要求されるので、管理用メールアドレスを入力。
- 規約は同意する
- メール配信については同意しなくてもOK
→ SSL化完了
新規ユーザーの追加
sudo adduser yourname
パスワードは仮のものでOK。(後ほど公開鍵ログインにするため)
新規ユーザーにsudo権限付与
sudo usermod -aG sudo yourname
rootの鍵をコピー
sudo mkdir /home/yourname/.ssh
sudo cp /root/.ssh/authorized_keys /home/yourname/.ssh/
sudo chown -R yourname:yourname /home/yourname/.ssh
sudo chmod 700 /home/yourname/.ssh
sudo chmod 600 /home/yourname/.ssh/authorized_keys
ターミナルで別ウインドウを立ち上げ、ログイン確認
ssh -i ~/.ssh/your-key.pem yourname@000.000.000.000
rootログインを無効化
sudo nano /etc/ssh/sshd_config
PermitRootLoginの項目を探し、no を設定。
PermitRootLogin no
*Xserver VPSの場合、デフォルトでは prohibit-password(パスワードログイン禁止、SSHログイン可)になっている。
SSHの再起動
sudo systemctl restart ssh
→ 以降はrootでのログインは不可に
パスワードログインの無効化
sudo nano /etc/ssh/sshd_config
→ PasswordAuthentication no に設定する(Xserver VPSでは、デフォルトでnoになっている)
ファイヤーウォールのインストール
まずインストール状況の確認
sudo ufw status
-> Status: inactive
インストール実行
sudo apt update
sudo apt install ufw
SSHを許可(必ずファイヤーウォール有効化前に実施しておく。さもないとSSH接続ができなくなる)
sudo ufw allow ssh
WEBアクセス用ポートを許可
sudo ufw allow http
sudo ufw allow https
ファイヤーウォールの有効化
sudo ufw enable
*sudo ufw reset で設定リセットできる。
Fail2Banの導入
インストール
sudo apt update
sudo apt install fail2ban
設定ファイルのコピーと編集
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[sshd]の項目を編集
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
#ブロックする秒数
bantime = 600
#ログイン失敗が何秒以内に起きたら対象とするか
findtime = 600
#何回失敗したらブロックするか
maxretry = 5
fail2banの起動と自動起動設定
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
動作確認
sudo fail2ban-client status
個別の jailの動作確認
sudo fail2ban-client status sshd