VPSサーバーを独自ドメインで公開する

できたよ~~ https://estampie.work/

まだ何もないのですが設定メモ

このあとやること:MiniOでオブジェクトストレージ鯖構築、wordpress移行、Misskey個人鯖インストール

独自ドメイン取得

お名前.comにて取得しました。わ~い

VPSサーバー側設定

さくらのVPS 2Gプランを利用しています。

OS選択でUbuntu server 22.04 LTSをインストール、以下ざっくり設定

続きを読む

セキュリティ設定

先にサーバーのパケットフィルターをポート変更先に設定しておくこと

初手アップデート

sudo apt update
sudo apt -y upgrade
sudo timedatectl set-timezone 'Asia/Tokyo'

公開鍵認証

ホストOSで生成する場合。.sshフォルダのパーミッションは適切に…

秘密鍵をクライアント側に設定したあとはリモート操作していきます

 mkdir .ssh
 sudo chmod 700 .ssh
 cd .ssh
 ssh-keygen -t ed25519
 sudo cat id_ed25519.pub >> authorized_keys
 sudo chmod 600 authorized_keys
 sudo rm id_ed25519

ファイヤーウォール設定

Nginxインストール後はsudo ufw allow 'Nginx Fullでhttp/httpsアクセスも追加

さくらのパケットフィルターでもポート開放設定をしておく

sudo ufw allow 22
sudo ufw enable

ポート番号はSSHポート変更先のものも追加しておく(ポート変更完了後22番を削除)

SSHポート変更/パスワード認証の無効化

SSHを22番ポートから変更し、公開鍵認証以外を無効に

別ウインドウで接続成功するまでは危ないので接続を切らないこと

sudo vi /etc/ssh/sshd_config
sudo systemctl restart sshd
  • #Port 22を変更する
  • PasswordAuthentication noPubkeyAuthentication yes
  • AuthenticationMethods publickeyを追加

PAM設定

ログイン試行回数に対してアクセス制限

SSH接続でログインの失敗回数によりアカウントをロックする方法 など参照

自動アップデート&再起動設定

セキュリティ絡みの自動アプデはデフォルトでONになっているが再起動はされないため、再起動が必要なセキュリティアップデートがある場合5:00に再起動させる

sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "05:00";

fail2ban導入

主にSSH以外のアクセスに関して対策 Nginxなどの設定はぐぐりつつ

apt install fail2ban

SSH接続のアクセス許可をホストで設定

hosts.allowとhosts.denyで接続元に対して許可を設定

sudo vi /etc/hosts.allow
sshd: (VPS鯖のIP)
sshd: .estampie.work
sshd: 127.0.0.
sshd: (自分のIP)

sudo vi /etc/hosts.deny
sshd: ALL

Let’s Encryptの証明書発行

certbotをインストールして証明書の自動取得をする

先にパケットフィルター、ufwなどでNginxのポートが開放されていることを確認する

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d estampie.work -d blog.estampie.work -d m.estampie.work

自動インストールが効かなかった場合は手動で/etc/nginx/sites-available/defaultにSSL設定を追記してあげる
.well-knownディレクトリがhttpsリダイレクトされてしまうとCDNが邪魔して証明書の自動更新が効かないらしいのでこちらはhttp通信で受けるようにする

server {
    listen 443 ssl;
    server_name estampie.work;
    ssl_certificate Let’s Encryptの証明書.pem;
    ssl_certificate_key Let’s Encryptの鍵.pem;
    // ~~ 略 ~~

server {
    listen 80;
    server_name estampie.work, blog.estampie.work, m.estampie.work;

    location ^~ /.well-known {
        root /var/www/html;
        try_files $uri =404;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}
sudo nginx -t
sudo systemctl restart nginx

証明書自動更新

Let’s Encryptは3ヶ月で期限が切れるので、cronを使用して毎月自動で証明書を更新&Nginxリスタート

sudo crontab -e
00 04 01 * * certbot renew && systemctl restart nginx

CDN設定

ネームサーバー設定

お名前.comにてさくらのVPSのネームサーバーを登録

さくらの管理画面でゾーン設定をしておく

反映したらサイトを確認

CDN設定

Cloudflareに登録し、サイトのURLを突っ込んで設定していく

お名前.comのコントロールパネルでネームサーバーを変更

httpsリダイレクトは自鯖でするためオフにしておく

感想

ざっくり。