前回作成した さくらインターネットVPS(880円/月) + Linux + Nginx + SiteGuard + Asp.net Core + SQLite 本番環境構築手順 を、ホスト名ではなくドメイン名でインターネットに公開する手順を作成しました。
今回構築した https://unikktle.com は、今後も機能を追加して行こうと思っています。
さくらVPS 契約
契約
今回採用した契約は「1G 石狩」。「512MB」だとLinuxのOSを動かすだけでメモリが枯渇し、CPUが1CoreだけだとOSの動きが悪い、東京大阪石狩リージョンでは石狩が最も安い。
https://vps.sakura.ad.jp/
サーバー設定
sshキー設定は無し。
デフォルトのままで良い。
確認し契約終了。
さくらVPS コントロールパネル
サーバ情報/ネットワーク情報 確認
契約したさくらVPSのコントロールパネルを開く。
https://secure.sakura.ad.jp/auth/login?url=https://secure.sakura.ad.jp/menu/service/
「ネットワーク」を確認しメモしておく。
OSインストール
外部公開する Linuxサーバーを構築する場合、最近の主流は CentOS ではなく Rocky Linux。
同じRHEL系統ですが CentOS より Rocky Linux の方が堅牢。
ISOファイル
サービス提供会社がカスタマイズしたOSを使うのは好きじゃないので、Rocky Linux 専用サイトから ISOファイルをダウンロードし、VPSへアップロードしてインストールします。
ISOファイルダウンロード
https://rockylinux.org/download
WinSCP設定
WinSCPの環境設定を変更して使い易くしておく。
ISOファイルアップロード
ISOファイルをVPSへアップロードする為のSFTPアカウント取得
発行されたSFTPアカウントをメモしておく。
発行されたSFTPアカウントを使い、WinSCPでSFTP接続し、「ISO」フォルダ配下に ISOファイルをアップロードする。
※アップロードが終わるまで7時間かかりました。
アップロード後、「内容確認」をクリック。
「OS再インストール」をクリック。
OSインストール
VNCコンソール
「VNCコンソールを起動」をクリック。
boot時は なにもせず暫く待つ
言語選択
言語選択で日本語を選択し、「続行」をクリックて少し待つ。
※反応が悪いことがある。
インストール先
「インストール先」をクリック。
「カスタム」を選択し「完了」クリック。
「/」を選択状態にして「-」をクリック。
全て削除。
「ここをクリックすると自動的に作成します」をクリック。
自動作成された設定そのまま「完了」クリック。
「変更を許可する」クリック。
「インストール先」がエラーになっていないことを確認。
ソフトウェアの選択
「ソフトウェアの選択」クリック。
「最小限のインストール」のみ選択、その他は全て未選択で「完了」クリック。
「ソフトウェアの選択」が「最小限のインストール」になっていることを確認。
ネットワークとホスト名
「ネットワークとホスト名」クリック。
「ホスト名」に「さくらVPSコントロールパネル > ネットワーク > 標準ホスト名」を入力し「適用」をクリック。
※「ens3」に対応するネットワークインターフェースは「eth0」。
メモ
「設定」をクリック。
「IPv4設定」は「メソッド」を「手動」に変更し各値を入力。
メモ
「IPv6設定」は使わないので「メソッド」を「無視」に変更。
他のタブはデフォルト設定のまま、「保存」クリック。
「オン」に切り替え「接続済み」になるのを確認。
「完了」をクリック。
rootパスワード
「rootパスワード」クリック。
パスワードを入力し「完了」をクリック。
ユーザーの作成
「ユーザーの作成」をクリック。
ユーザー名とパスワードを入力し「完了」クリック。
ユーザ名: u
パスワード: p
※サンプルなので ID/パスワード は簡素な1文字にしています。
インストール開始
「インストールの開始」をクリック。
インストールが完了したら「システムの再起動」をクリック。
OSインストール時は、シャットダウン後に自動起動しないので、さくらVPSコントロールパネルからOSを起動する。
VNSコンソールで、OSが起動し、rootユーザーでログインできることを確認。
ssh接続確認
Puttyからログインできることを確認
IPアドレスとポート番号を入力。
設定は「Save」で保存しておき、次回からは「Load」して「Open」で接続。
メモ。
一般ユーザでログイン。
ユーザ名: u
パスワード: p
rootに変更。「$」が「#」に変われば成功。
1 2 3 4 |
$ su - パスワード p |
PuTTYの環境設定を変更して使い易くしておく
Windowsサイズを広げておく。
フォントを「MSゴシック」に変更、サイズを大きくして見易くしておく。
自動切断防止設定。
※さくらVPSだと数分の報知で自動切断される。
文字コードはUTF8に。
NetworkManager設定
使わないNICを削除
ens4 ens5 は使わないNICなので削除。
1 2 3 4 |
# nmcli connection delete '有線接続 1' # nmcli connection delete '有線接続 2' |
メモ。
状態を確認
OS再起動後、ssh接続できるか確認。
1 2 3 |
# sync;sync;shutdown -r now |
NICの状態を確認。
1 2 3 |
# nmcli device status |
メモ
NetworkManager の不要なログを止めたい。
https://blog.neoflow.jp/linux/3229/
無効化。
1 2 3 4 |
# systemctl stop NetworkManager # systemctl disable NetworkManager |
有効化する場合。
1 2 3 4 |
# systemctl enable NetworkManager # systemctl start NetworkManager |
ログ確認。
1 2 3 |
# journalctl -ex |
SELinux設定
ツールをインストール
1 2 3 |
# yum install -y policycoreutils-python-utils |
ポリシー変更
SELinux のポリシーに新しいsshポート番号を追加。
1 2 3 |
# semanage port --add --type ssh_port_t --proto tcp 10001 |
確認
SELinux が許可しているポート番号を確認する。
1 2 3 |
# semanage port --list | grep ssh |
ポリシー変更
localhostのリバースプロキシ接続を許可。
1 2 3 |
# setsebool httpd_can_network_connect on -P |
確認
OS再起動後でもssh接続できるか確認。
1 2 3 |
# sync;sync;shutdown -r now |
メモ
※22ポートは削除できない。
1 2 3 |
# semanage port --delete --type ssh_port_t --proto tcp 22 |
SELinuxを無効化する場合(disabled)。
1 2 3 |
# vi /etc/selinux/config |
SELinuxの状態確認。
1 2 3 |
# getenforce |
ファイアウォール設定
設定変更
httpのポートを開放。 ※Let’s Encript のSSL証明書更新処理がhttpポートを使う。
1 2 3 |
# firewall-cmd --add-service=http --zone=public --permanent |
httpsのポートを開放。
1 2 3 |
# firewall-cmd --add-service=https --zone=public --permanent |
ping/icmpに応答させない。
1 2 3 |
# firewall-cmd --set-target=DROP --permanent |
IPv6は使わないので dhcpv6-client を削除。
1 2 3 |
# firewall-cmd --remove-service=dhcpv6-client --zone=public --permanent |
cockpitは削除。
1 2 3 |
# firewall-cmd --zone=public --remove-service=cockpit --permanent |
forwardを無効化。
1 2 3 |
# firewall-cmd --zone=public --remove-forward --permanent |
PuTTYからLinuxに接続している接続元IPアドレスを確認。
1 2 3 |
# ss | grep -E "133.242.203.53" |
接続元IPアドレスに限定して必要なポートを開放。
1 2 3 4 |
# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=118.105.57.251 port protocol=tcp port=10001 accept' # firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=118.105.57.251 port protocol=tcp port=9443 accept' |
ssh接続のデフォルトポート番号(22)は削除。
1 2 3 |
# firewall-cmd --permanent --remove-service=ssh |
ファイアウォールを再起動。
1 2 3 |
# systemctl restart firewalld |
確認
設定内容を確認。
※最終的な状態。
1 2 3 |
# firewall-cmd --list-all |
エラーが無いことを確認。
1 2 3 |
# systemctl status firewalld |
「runnning」でファイアウォールが有効になっていることを確認。
1 2 3 |
# firewall-cmd --state |
「enalbed」で自動起動になっていることを確認。
1 2 3 |
# systemctl is-enabled firewalld |
メモ
一時的に無効化。
1 2 3 |
# systemctl stop firewalld |
ssh接続ポート番号変更
設定変更
sshd 設定変更。
1 2 3 |
# vi /etc/ssh/sshd_config |
新しいポート番号を追加。
rootでのログイン禁止を追加。
1 2 3 4 |
Port 10001 PermitRootLogin no |
sshd を再起動。
1 2 3 |
# systemctl restart sshd |
確認
エラーがないか確認。
1 2 3 |
# systemctl status sshd.service |
ssh接続確認
ここまでのネットワーク設定でssh接続できるか再確認。
OS再起動
1 2 3 |
# sync;sync;shutdown -r now |
PuTTYで接続
PuTTYで 10001 ポートに接続できるか確認。
PuTTYで 22ポートに接続できなくなっていることを確認。
ssh接続 公開鍵/秘密鍵キー設定
公開鍵/秘密鍵 作成
PuTTYgenで公開鍵/秘密鍵を作成。
「Generate」をクリック。
マウスの動きで乱数生成を行うので,進捗バーが Maxになるまで、ウインドウ上で適当にマウス を動かす。
「key passphrase」を入力し、「public key」で公開鍵をファイル保存、「private key」で秘密鍵をファイル保存する。
key passphrase: p
public key: id_rsa.pub
private key: id_rsa.ppk
public key(公開鍵)をLinux に登録
WinSCPをパスワード認証で接続。
public keyファイルを、ログインユーザのホームディレクトリにアップロード。
id_rsa.pub
PuTTYでログイン後 キーファイルを変換
一般ユーザー(ログインユーザ)へ切り替え。
1 2 3 |
# su - u |
確実にホームディレクトリに移動。
1 2 3 |
# cd |
ディレクトリ作成。
1 2 3 |
# mkdir .ssh |
自分以外のアクセスを禁止。
1 2 3 |
# chmod 700 .ssh/ |
変換。
1 2 3 |
# ssh-keygen -i -f id_rsa.pub >> authorized_keys |
公開鍵リスト作成。
1 2 3 |
# mv authorized_keys .ssh/authorized_keys |
自分以外の読み書きを禁止。
1 2 3 |
# chmod 600 .ssh/authorized_keys |
変換元ファイルを削除。
1 2 3 |
# rm -f id_rsa.pub |
確認。
1 2 3 4 |
# ll -a # ll -a .ssh |
パスワード認証禁止に設定
rootユーザーに切り替え。
パスワード認証を禁止に変更。
「PasswordAuthentication no」を追加。
1 2 3 4 |
# su - # vi /etc/ssh/sshd_config |
sshサービス再起動。
1 2 3 |
# systemctl restart sshd |
PuTTY接続を秘密鍵認証に切り替える
古い設定を Loadし名前を変えて Save。
キーファイルを設定。
id_rsa.ppk
Saveで保存し、sshkeyファイル接続専用の設定を増やす。
秘密鍵でログイン出来るか確認。
login as : u
PassPhrase for key : p
WinSCPの接続設定を秘密鍵認証に切り替える
「パスワード」入力欄はブランクで良い。
キーファイルを設定。
id_rsa.ppk
保存。
ログイン。接続時にパスフレーズを入力しログインできるか確認。
PassPhrase for key : p
OS更新
更新
OSをyumでアップデート。
1 2 3 |
# yum update |
OS再起動。
1 2 3 |
# sync;sync;shutdown -r now |
確認
OSバージョン確認。
1 2 3 |
# cat /etc/redhat-release |
必要なツールをインストール
SELinux無効化
SELinuxを一時的に無効化。
1 2 3 4 |
# setenforce 0 # getenforce |
インストール
各ツールを1つずつインストール。
1 2 3 4 5 6 7 8 9 10 11 |
# yum install gcc pcre-devel zlib-devel # yum install apr-devel # yum install apr-util-devel # yum -y install perl # yum install tar # yum install wget # yum install java-21-openjdk # yum install unzip # yum install zip |
SELinux有効化
SELinuxを有効化。
1 2 3 4 |
# setenforce 1 # getenforce |
Javaメモ
OpenJDKは無償で、SiteguardもOpenJDKをインストールする手順になっているので、他のJDKは検討しない。
バージョン確認。
1 2 3 |
# java -version |
SiteGuard その1
前準備
VPS SiteGuard Server Edition(WAF)。
https://manual.sakura.ad.jp/vps/server/etc/siteguard.html
マニュアルをダウンロード。
https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html
ダウンロードしたマニュアルを開いて作業。
siteguard-server-edition-700-3_nginx.pdf
パスワード、URL、ライセンス情報をローカルにメモしておく。
https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html
SiteGuard インストール
ワークフォルダ作成。
1 2 3 4 5 |
# su - # mkdir src # cd src |
SiteGuardのソースをダウンロード。
1 2 3 |
# wget http://progeny.sakura.ad.jp/siteguard/7.0.0/nginx/siteguard-server-edition-7.00-3.nginx.x86_64.tar.gz |
https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html
ソースを解凍。
1 2 3 |
# tar -zxvf siteguard-server-edition-7.00-3.nginx.x86_64.tar.gz |
SiteGuard本体をインストール。
SiteGuardインストール先ディレクトリ:/opt/jp-secure/siteguardlite
1 2 3 4 |
# cd /root/src/siteguard-server-edition-7.00-3.nginx.x86_64 # make install |
シグネチャ更新URL 変更
シグネチャ更新URL取得。
https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html
シグネチャ更新URLを変更。
1 2 3 |
# vi /opt/jp-secure/siteguardlite/conf/dbupdate_waf_url.conf |
Nginx その1
Nginx用のユーザ追加
Nginxの実行ユーザ作成。
※nologinを指定しているので、コンソールからnginxuserユーザでログインすることはできない。
1 2 3 |
# useradd -s /sbin/nologin nginxuser |
ユーザーの確認。
1 2 3 4 |
# cat /etc/passwd # id nginxuser |
関連フォルダ作成
1 2 3 4 5 6 7 8 9 10 11 12 |
# mkdir -p /etc/nginx/ # mkdir -p /etc/nginx/sites-available/ # mkdir -p /etc/nginx/sites-enabled/ # mkdir -p /var/cache/nginx/client_temp # mkdir -p /var/cache/nginx/proxy_temp # mkdir -p /var/cache/nginx/fastcgi_temp # mkdir -p /var/cache/nginx/uwsgi_temp # mkdir -p /var/cache/nginx/scgi_temp # chown -R nginxuser:nginxuser /var/cache/nginx # chmod -R 700 /var/cache/nginx |
バーチャルホスト用設定ファイルの保存先 … sites-available。
有効にするバーチャルホストのリンク設定先 … sites-enabled。
sites-availableディレクトリには全てのバーチャルホスト用設定ファイルを保存します。
sites-enabledディレクトリには有効にするバーチャルホストの設定ファイルに対してシンボリックリンクを設定していきます。
sites-enabledのシンボリックリンクが設定されているバーチャルホストが有効になるイメージです。
ビルド/インストール
Nginx、OpenSSL、ソースダウンロード。
1 2 3 4 5 |
# cd /root/src # curl -LO https://nginx.org/download/nginx-1.27.2.tar.gz # curl -LO https://www.openssl.org/source/openssl-3.4.0.tar.gz |
tarファイルを解凍。
1 2 3 4 |
# tar xzvf nginx-1.27.2.tar.gz # tar xzvf openssl-3.4.0.tar.gz |
Nginxのソースコードを修正。
※httpレスポンスからNginx情報を削除し、Nginxを使っていることを判別させない。
※これ以上空にするとWEBブラウザでHTMLを処理できない不具合が発生しハマる。ここまで減らせていればNginxを使っているのはバレないので良しとする。
1 2 3 |
# vi /root/src/nginx-1.27.2/src/http/ngx_http_header_filter_module.c |
static u_char ngx_http_server_string[] = “Server: nginx” CRLF;
static u_char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = “Server: ” NGINX_VER_BUILD CRLF;
↓
static u_char ngx_http_server_string[] = “Server: ” CRLF;
static u_char ngx_http_server_full_string[] = “Server: ” CRLF;
static u_char ngx_http_server_build_string[] = “Server: ” CRLF;
configureコマンド実行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# cd /root/src/nginx-1.27.2 # ./configure \ --prefix=/usr/local/nginx \ --sbin-path=/usr/local/sbin/nginx \ --modules-path=/etc/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --user=nginxuser \ --group=nginxuser \ --with-compat \ --with-file-aio \ --with-threads \ --with-http_addition_module \ --with-http_auth_request_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_mp4_module \ --with-http_random_index_module \ --with-http_realip_module \ --with-http_secure_link_module \ --with-http_slice_module \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_sub_module \ --with-http_v2_module \ --with-mail \ --with-mail_ssl_module \ --with-stream \ --with-stream_realip_module \ --with-stream_ssl_module \ --with-stream_ssl_preread_module \ --with-openssl=/root/src/openssl-3.4.0 \ --with-openssl-opt=enable-tls1_3 \ --add-module=/opt/jp-secure/siteguardlite/nginx |
Configuration summary。
Nginxインストール。
1 2 3 4 |
# make # make install |
組み込みモジュールの確認。
1 2 3 |
# nginx -V |
サービス登録
サービスファイルを作成。
1 2 3 |