スポンサーリンク
スポンサーリンク

さくらインターネットVPS(880円/月) + Linux + Nginx + SiteGuard + Asp.net Core + SQLite 本番環境構築手順

.NET CoreASP.NET CoreC#ChartCSSDapperHTMLJavaScriptLinux・ShellNginxOpenSSLSITEGUADSQLiteVisual StudioVPS レンタルサーバインターネットオープンソースセキュリティ対策ツール・サービスデータベース開発方式

さくらインターネットVPSで、WEBアプリをインターネットに公開する、本番環境構築手順を纏めました。
前回作成した .NET 8.0 + ASP.NET Core(MVC) + ApexCharts + Dapper + SQLite で実装する 注釈付きグラフ表示処理 のWEBアプリを、さくらインターネットVPS(880円/月)環境にデプロイしてみましたが、サクサク動きます。北海道石狩市にあるVPSへ岐阜県からアクセスした際の動きをYoutube動画にしました。WEBサイトからのレスポンスはサクサクです。
AWSなど外資系クラウド事業者の従量課金制でWEBサイトを構築すると、TCOは高く付くので、さくらインターネットのVPSで無制限利用するのがお勧め。
無料軽量高速データベースのSQLiteは更新処理のトランザクションに対応していて、ビジネスアプリにもよく使われる。SQLServerを使う場合とでは、ライセンス料に数百万円の違いが出ることもある。
コスト削減と言って外資系クラウド事業者を採用するSierは無能。

 

  1. さくらVPS 契約
      1. 契約
      2. サーバー設定
  2. さくらVPS コントロールパネル
      1. サーバ情報/ネットワーク情報 確認
  3. OSインストール
    1. ISOファイル
      1. ISOファイルダウンロード
      2. WinSCP設定
      3. ISOファイルアップロード
    2. OSインストール
      1. VNCコンソール
      2. 言語選択
      3. インストール先
      4. ソフトウェアの選択
      5. ネットワークとホスト名
      6. rootパスワード
      7. ユーザーの作成
      8. インストール開始
  4. ssh接続確認
      1. Puttyからログインできることを確認
      2. PuTTYの環境設定を変更して使い易くしておく
  5. NetworkManager設定
      1. 使わないNICを削除
      2. 状態を確認
      3. メモ
  6. SELinux設定
      1. ツールをインストール
      2. ポリシー変更
      3. 確認
      4. ポリシー変更
      5. 確認
      6. メモ
  7. ファイアウォール設定
      1. 設定変更
      2. 確認
      3. メモ
  8. ssh接続ポート番号変更
      1. 設定変更
      2. 確認
  9. ssh接続確認
      1. OS再起動
      2. PuTTYで接続
  10. ssh接続 公開鍵/秘密鍵キー設定
      1. 公開鍵/秘密鍵 作成
      2. public key(公開鍵)をLinux に登録
      3. PuTTYでログイン後 キーファイルを変換
      4. パスワード認証禁止に設定
      5. PuTTY接続を秘密鍵認証に切り替える
      6. WinSCPの接続設定を秘密鍵認証に切り替える
  11. OS更新
      1. 更新
      2. 確認
  12. 必要なツールをインストール
      1. SELinux無効化
      2. インストール
      3. SELinux有効化
      4. Javaメモ
  13. SiteGuard その1
      1. 前準備
      2. SiteGuard インストール
      3. シグネチャ更新URL 変更
  14. Nginx その1
      1. Nginx用のユーザ追加
      2. 関連フォルダ作成
      3. ビルド/インストール
      4. サービス登録
      5. Nginx接続確認
      6. メモ
  15. SiteGuard その2
    1. SiteGuardセットアップ
      1. セットアップ実行
      2. 接続確認
    2. SiteGuard設定(Webコンソール)
      1. ログイン
      2. 基本設定
      3. 高度な設定
      4. ライセンス情報
      5. 更新設定
  16. ASP.NET Core
      1. フォルダ作成
      2. ASP.NET Coreインストール
  17. デプロイ(発行)
    1. ローカルの開発PCで作業
      1. 発行設定
      2. 発行
      3. 発行されたファイルを調整
      4. Linuxへアップロード
    2. Linuxで作業
      1. アップロードしたフォルダを移動
      2. WEBアプリ起動テスト
      3. Webサービス登録
      4. WEBサービス接続テスト
  18. Nginx その2
      1. nginx.conf 編集前
      2. nginx.conf 編集
      3. 接続確認
  19. Nginx その3
      1. バーチャルホストconfファイル作成
      2. 接続確認
  20. https化
      1. SSL証明書(Let’s Encrypt)取得手順を確認
      2. snapd
      3. certbot
      4. Nginx 確認
      5. https接続確認
  21. OS再起動後 接続確認
      1. OS再起動
      2. https接続確認
      3. OSの状態を確認
  22. さくらVPS パケットフィルタ
      1. 設定
      2. 確認
  23. セキュリティ診断
      1. Qualys SSL Labs
      2. ViewDNS.info

さくら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に変更。「$」が「#」に変われば成功。

 

PuTTYの環境設定を変更して使い易くしておく

Windowsサイズを広げておく。

 

フォントを「MSゴシック」に変更、サイズを大きくして見易くしておく。

 

自動切断防止設定。
 ※さくらVPSだと数分の報知で自動切断される。

 

文字コードはUTF8に。

 

NetworkManager設定

使わないNICを削除

ens4 ens5 は使わないNICなので削除。

メモ。

 

状態を確認

OS再起動後、ssh接続できるか確認。

 

NICの状態を確認。

 

メモ

NetworkManager の不要なログを止めたい。
 https://blog.neoflow.jp/linux/3229/

無効化。

有効化する場合。

ログ確認。

 

SELinux設定

ツールをインストール

 

ポリシー変更

SELinux のポリシーに新しいsshポート番号を追加。

 

確認

SELinux が許可しているポート番号を確認する。

 

ポリシー変更

localhostのリバースプロキシ接続を許可。

 

確認

OS再起動後でもssh接続できるか確認。

 

メモ

※22ポートは削除できない。

SELinuxを無効化する場合(disabled)。

SELinuxの状態確認。

 

ファイアウォール設定

設定変更

httpのポートを開放。 ※Let’s Encript のSSL証明書更新処理がhttpポートを使う。

 

httpsのポートを開放。

 

ping/icmpに応答させない。

 

IPv6は使わないので dhcpv6-client を削除。

 

cockpitは削除。

 

forwardを無効化。

 

PuTTYからLinuxに接続している接続元IPアドレスを確認。

 

接続元IPアドレスに限定して必要なポートを開放。

 

ssh接続のデフォルトポート番号(22)は削除。

 

ファイアウォールを再起動。

 

確認

設定内容を確認。
 ※最終的な状態。

 

エラーが無いことを確認。

 

「runnning」でファイアウォールが有効になっていることを確認。

 

「enalbed」で自動起動になっていることを確認。

 

メモ

一時的に無効化。

 

ssh接続ポート番号変更

設定変更

sshd 設定変更。

新しいポート番号を追加。
rootでのログイン禁止を追加。

 

sshd を再起動。

 

確認

エラーがないか確認。

 

ssh接続確認

ここまでのネットワーク設定でssh接続できるか再確認。

OS再起動

 

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でログイン後 キーファイルを変換

一般ユーザー(ログインユーザ)へ切り替え。

 

確実にホームディレクトリに移動。

 

ディレクトリ作成。

 

自分以外のアクセスを禁止。

 

変換。

 

公開鍵リスト作成。

 

自分以外の読み書きを禁止。

 

変換元ファイルを削除。

 

確認。

 

パスワード認証禁止に設定

rootユーザーに切り替え。
パスワード認証を禁止に変更。
 「PasswordAuthentication no」を追加。

 

sshサービス再起動。

 

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でアップデート。

 

OS再起動。

 

確認

OSバージョン確認。

 

必要なツールをインストール

SELinux無効化

SELinuxを一時的に無効化。

 

インストール

各ツールを1つずつインストール。

 

SELinux有効化

SELinuxを有効化。

 

Javaメモ

OpenJDKは無償で、SiteguardもOpenJDKをインストールする手順になっているので、他のJDKは検討しない。

バージョン確認。

 

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 インストール

ワークフォルダ作成。

 

SiteGuardのソースをダウンロード。

https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html

 

ソースを解凍。

 

SiteGuard本体をインストール。
 SiteGuardインストール先ディレクトリ:/opt/jp-secure/siteguardlite 

 

シグネチャ更新URL 変更

シグネチャ更新URL取得。
 https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html

 

シグネチャ更新URLを変更。

 

Nginx その1

Nginx用のユーザ追加

Nginxの実行ユーザ作成。
 ※nologinを指定しているので、コンソールからnginxuserユーザでログインすることはできない。

 

ユーザーの確認。

 

関連フォルダ作成

バーチャルホスト用設定ファイルの保存先 … sites-available。
有効にするバーチャルホストのリンク設定先 … sites-enabled。
sites-availableディレクトリには全てのバーチャルホスト用設定ファイルを保存します。
sites-enabledディレクトリには有効にするバーチャルホストの設定ファイルに対してシンボリックリンクを設定していきます。
sites-enabledのシンボリックリンクが設定されているバーチャルホストが有効になるイメージです。

 

ビルド/インストール

Nginx、OpenSSL、ソースダウンロード。

 

tarファイルを解凍。

 

Nginxのソースコードを修正。
 ※httpレスポンスからNginx情報を削除し、Nginxを使っていることを判別させない。
 ※これ以上空にするとWEBブラウザでHTMLを処理できない不具合が発生しハマる。ここまで減らせていればNginxを使っているのはバレないので良しとする。

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コマンド実行。

Configuration summary。

 

Nginxインストール。

 

組み込みモジュールの確認。

 

サービス登録

サービスファイルを作成。

ファイルの中身。

 

サービスを有効化。

 

サービスを起動。

 

サービスの状態確認。

 

Nginx接続確認

Nginxサービスが起動していれば、外部から接続確認できる。
 http://ik1-133-73299.vs.sakura.ne.jp/
 http://133.242.203.53/

 

メモ

confファイルの変更を反映。

サービス停止。

サービス再起動。

SiteGuard無しで試しインストールする場合。

Nginxをアンインストールする場合。
 ※「# make uninstall」ではアンインストールできない。

 

SiteGuard その2

SiteGuardセットアップ

セットアップ実行

SiteGuardのセットアップを実行し、SiteGuardをNginxでホストする。

デフォルト設定で問題ないので全てEnter。

 

接続確認

SiteGuardのWebコンソールに接続できるか確認。
 https://ik1-133-73299.vs.sakura.ne.jp:9443

 

SiteGuard設定(Webコンソール)

WebコンソールからSiteGuardを設定。
入力値はマニュアル(siteguard-server-edition-700-3_nginx.pdf)に記載されてる。
 https://ik1-133-73299.vs.sakura.ne.jp:9443

ログイン

 

管理パスワードを登録。

 

基本設定

「ウェブ攻撃検査」を有効にする。

 

高度な設定

「シグネチャ検査」「URLデコードエラー検出」を有効にする。

 

ライセンス情報

ライセンスの入力値はさくらVPSのWEBサイトに記載されてる。
 https://manual.sakura.ad.jp/cloud/securearea/siteguardserveredition.html

 

登録。

 

更新設定

「自動ダウンロード」「ダウンロード後に自動更新」を有効にする。

 

シグネチャを最新に更新する。

 

ASP.NET Core

フォルダ作成

Workフォルダ作成。

Webアプリデプロイ先のフォルダ作成。

コンテンツ配置用ディレクトリ作成。 「メンテナンス中」などの静的htmlファイルなど。

 

ASP.NET Coreインストール

Microsoft のパッケージ署名キーのインストール。

 

.NET 8.0 ASP.NET Core の Runtimeをインストール。

 

バージョン確認。

 

デプロイ(発行)

ローカルの開発PCで作業

発行設定

前回作成した .NET 8.0 + ASP.NET Core(MVC) + ApexCharts + Dapper + SQLite で実装する 注釈付きグラフ表示処理 のWEBアプリの発行設定。

「フォルダー」を選択し次へ。

「フォルダーの場所」を入力し完了。

 

「すべての設定を表示」をクリック。

「ターゲット ランタイム」を「linux-x64」に変更。
「公開前に既存のファイルを全て削除する」をチェック有りにする。
「保存」をクリック。

 

発行

「発行」をクリック。

発行が正常終了した事を確認。

 

発行されたファイルを調整

appsettings.Development.json ファイルは不要なので削除。

 

appsettings.json ファイルを開き、コネクションストリングのパスを Linux側に合わせる。

修正前。

修正後。

 

Linuxへアップロード

WinSCPでログイン。

 

発行したフォルダを、ユーザーのホームディレクトリ(/home/u/)配下へドラッグ&ドロップ。

 

Linuxで作業

アップロードしたフォルダを移動

ユーザーのホームディレクトリへアップロードした発行フォルダを、/var/aspnet/ディレクトリ配下へ移動。

 

WEBアプリ起動テスト

Webアプリを単体起動し、エラーが発生しない事を確認。
※WEBアプリのサービス登録後は、サービスを停止してから単体起動しないとエラーになる。

 

Webサービス登録

Webサービス設定ファイル作成。

WebApplication1.serviceファイルの中身。

 

Webアプリをサービスとして登録し、OS起動時に自動起動する。

 

サービス再起動。

 

サービスの状態を確認。

 

WEBサービス接続テスト

サービス登録したWEBサイトに対し、httpリクエストできることを確認。

 

Nginx その2

nginx.conf 編集前

修正前の状態を確認。

 

構文に問題が無いか確認。

 

Nginxを再起動し設定を再読込み。

 

確認。

 

nginx.conf 編集

WEBサイトのパフォーマンスやセキュリティを上げる為の設定を幾つか追加。

編集前後の差分比較。

 

構文に問題が無いか確認。

 

Nginxを再起動し設定を再読込み。

 

確認。

 

接続確認

外部からNginxのデフォルトページに接続できるか確認。
 http://ik1-133-73299.vs.sakura.ne.jp/

 

Nginx その3

バーチャルホストconfファイル作成

デプロイしたWEBサイト用のバーチャルホスト設定ファイルを作成。

ファイルの中身。※まずは httpで構成します。

 

バーチャルホストの有効化(シンボリックリンク作成)。

 

リンク確認。

 

内容確認。

 

構文に問題が無いか確認。

 

Nginxを再起動し設定を再読込み。

 

確認。

 

接続確認

デプロイしたWEBサイトは、前回作成したWEBアプリ。
 .NET 8.0 + ASP.NET Core(MVC) + ApexCharts + Dapper + SQLite で実装する 注釈付きグラフ表示処理

接続
 http://ik1-133-73299.vs.sakura.ne.jp/

 

https化

SSL証明書(Let’s Encrypt)取得手順を確認

Let’s Encrypt は無料SSL証明書のデファクトスタンダード。
certbot instructionsページで、OSとWebサーバを入力し、SSL証明書の取得手順をメモ。
 https://certbot.eff.org/instructions?ws=nginx&os=snap

 

snapd

snapdをインストール。

 

シンボリックリンクを作成。

 

snapdサービスを有効化。

 

snapdサービスを再起動。

 

確認。

 

certbot

snapを使用して certbotをインストール。

 

certbot コマンドを準備。

 

SSL証明書を取得。

 

自動更新テスト。

 

Nginx 確認

certbotによるhttps化は Nginxに自動反映される。
構文に問題が無いか確認。

 

Nginxを再起動し設定を再読込み。

 

nginx.conf に変更は無い。

 

バーチャルホストconfが変更されている。

最終的な バーチャルホストconf設定内容。

差分。

 

https接続確認

接続
 https://ik1-133-73299.vs.sakura.ne.jp

 

OS再起動後 接続確認

OS再起動後でも、全て変更が反映され、全てのサービスが起動し、デプロイしたWEBアプリに https接続できることを確認する。

OS再起動

 

https接続確認

接続。
 https://ik1-133-73299.vs.sakura.ne.jp

 

OSの状態を確認

ディスクは 50GBの契約で、42GBがまだ空いてる。

 

物理メモリは 1GBの契約で 245MB がまだ空いてる。

 

CPUは 仮想2コアの契約で CPU負荷は0%状態。

 

さくらVPS パケットフィルタ

ISOファイルからOSをインストールすると、「パケットフィルター設定」が解除されるので、さくらVPSコントロールパネルでパケットフィルタを設定する。
Linux OS 上のファイアウォールで不要なポート接続は遮断しているが、パケットフィルタも設定することでセキュリティとパフォーマンスが上がる。

設定

「パケットフィルターを設定」をクリック。

 

「パケットフィルター設定を利用する」をクリック。

 

「パケットフィルター設定を追加する」をクリック。

 

Linuxのファイアウォールで解放しているポートと同じ内容を設定し、「設定を保存する」をクリック。

 

設定完了。

 

確認

パケットフィルタ設定後でも、https接続できることを確認。
 https://ik1-133-73299.vs.sakura.ne.jp

 

パケットフィルタ設定後でも、ssh接続できることを確認。

 

セキュリティ診断

Qualys SSL Labs

WEBサイトのセキュリティレベルを確認。
 https://www.ssllabs.com/ssltest/analyze.html?d=ik1-133-73299.vs.sakura.ne.jp

 

ViewDNS.info

不要なポートが解放されていないか確認。
 https://viewdns.info/portscan/?host=ik1-133-73299.vs.sakura.ne.jp

 

コメント

タイトルとURLをコピーしました