自治体ITのOSS活用

自治体情報システム担当者のためのNginx導入実践:HTTPSとリバースプロキシによるセキュアなWeb環境構築

Tags: Nginx, Webサーバー, リバースプロキシ, HTTPS, セキュリティ, 自治体IT

はじめに:自治体におけるWebサーバーの重要性とNginxの可能性

自治体情報システムにおいて、Webサーバーは市民向けの情報公開、庁内向け情報共有、各種申請システム連携など、多岐にわたる重要な役割を担っています。これらのサービスは、安定稼働、高いセキュリティ、そして効率的な運用が求められます。

オープンソースソフトウェア(OSS)であるNginx(エンジンエックス)は、軽量でありながら高パフォーマンスを発揮するWebサーバーとして広く利用されています。静的コンテンツの高速配信に加えて、リバースプロキシ、ロードバランサー、HTTPキャッシュなど多機能なため、自治体情報システムにおける様々なニーズに応えることが可能です。

本記事では、自治体情報システム部門の担当者様がNginxを効果的に導入し、特にセキュリティ強化のためのHTTPS設定と、既存システムとの連携を円滑にするリバースプロキシ機能の活用に焦点を当て、具体的な手順と自治体環境特有の考慮点を解説します。

Nginxの基本的な導入手順

Nginxは、主要なLinuxディストリビューションで利用可能です。ここでは、多くの環境で採用されているUbuntu Server 22.04 LTSを例に導入手順を説明します。

1. システムの更新

まず、システムのパッケージリストを更新し、既存のパッケージをアップグレードします。

sudo apt update
sudo apt upgrade -y

2. Nginxのインストール

aptパッケージマネージャーを使用してNginxをインストールします。

sudo apt install nginx -y

3. Nginxサービスの起動と自動起動設定

インストール後、Nginxサービスを起動し、システム起動時に自動的に起動するよう設定します。

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

sudo systemctl status nginx コマンドの出力で「active (running)」と表示されていれば、Nginxは正常に稼働しています。

4. ファイアウォールの設定

Ubuntu環境では、UFW(Uncomplicated Firewall)が標準で利用できます。Nginxをインストールすると、UFWはNginxに関連するプロファイルを自動的に登録します。HTTP(80番ポート)およびHTTPS(443番ポート)の通信を許可するよう設定します。

sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
sudo ufw enable
sudo ufw status

sudo ufw status コマンドで「Nginx HTTP」と「Nginx HTTPS」が許可されていることを確認してください。

この段階で、サーバーのIPアドレスまたはドメイン名にWebブラウザからアクセスすると、Nginxのデフォルトのウェルカムページが表示されるはずです。

Webサーバーとしての基本設定と静的コンテンツ配信

Nginxの主要な設定ファイルは /etc/nginx/nginx.conf です。しかし、サイトごとの設定は通常 /etc/nginx/sites-available/ ディレクトリに個別の設定ファイルを作成し、/etc/nginx/sites-enabled/ にシンボリックリンクを作成して有効化します。

1. デフォルト設定ファイルの確認

/etc/nginx/sites-available/default がNginxの初期設定ファイルです。

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html; # Webコンテンツのルートディレクトリ
    index index.html index.htm index.nginx-debian.html; # デフォルトで表示するファイル

    server_name _; # 任意のドメイン名

    location / {
        try_files $uri $uri/ =404;
    }
    # その他の設定...
}

2. 静的コンテンツの配置

デフォルト設定では、/var/www/html ディレクトリにWebコンテンツ(HTML、CSS、JavaScriptファイルなど)を配置します。例えば、index.html ファイルを作成して配置すると、その内容がWebブラウザに表示されます。

echo "<h1>Hello from Nginx on your Local Government Server!</h1>" | sudo tee /var/www/html/index.html

WebブラウザからサーバーのIPアドレスにアクセスし、上記の内容が表示されることを確認してください。

3. 新しいサイト設定ファイルの作成(推奨)

複数のWebサイトをホストする場合や、設定を明確に管理したい場合は、専用の設定ファイルを作成します。

sudo nano /etc/nginx/sites-available/your_domain.conf

例:your_domain.conf の内容

server {
    listen 80;
    listen [::]:80;
    server_name your_domain.example.jp www.your_domain.example.jp;

    root /var/www/your_domain;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

    # セキュリティヘッダーの追加 (自治体サイトで特に重要)
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options "SAMEORIGIN";
    # Content-Security-Policy などはサイトの要件に応じて追加
}

新しいサイトのWebコンテンツディレクトリを作成します。

sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domain

4. 設定の有効化とNginxの再読み込み

作成した設定ファイルを有効化し、Nginxに設定を再読み込みさせます。

sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/
sudo nginx -t # 設定ファイルの文法チェック
sudo systemctl reload nginx

nginx -t コマンドで「syntax is ok」と表示されれば、設定に問題はありません。

HTTPSによるセキュリティ強化

自治体Webサイトにおいて、HTTPS(HTTP Secure)は市民の個人情報保護、通信の盗聴・改ざん防止のために必須です。NginxではSSL/TLS証明書を設定することで簡単にHTTPSに対応できます。ここでは、無償のSSL/TLS証明書を提供するLet's EncryptとCertbotを利用する方法を説明します。

1. Certbotのインストール

CertbotはLet's Encrypt証明書の取得と設定を自動化するツールです。Snapd経由でインストールすることを推奨します。

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

2. 証明書の取得とNginxへの適用

CertbotをNginxプラグインとともに実行し、ドメインの証明書を取得・適用します。

sudo certbot --nginx -d your_domain.example.jp -d www.your_domain.example.jp

コマンド実行中に、メールアドレスの入力、利用規約への同意、HTTPアクセスをHTTPSへリダイレクトするかどうかの選択を求められます。通常、HTTPアクセスをHTTPSへ強制リダイレクトすることを選択します(「2: Redirect」)。

成功すると、Nginxの設定ファイルが自動的に更新され、HTTPSが有効になります。/etc/nginx/sites-available/your_domain.conf を確認すると、listen 443 ssl;ssl_certificate ディレクティブが追加されているはずです。

3. 証明書の自動更新設定

Let's Encrypt証明書は90日間で期限切れとなります。Certbotは自動更新のためのcronジョブまたはsystemdタイマーを自動的に設定します。テスト実行で更新が可能か確認できます。

sudo certbot renew --dry-run

このコマンドでエラーが出なければ、自動更新は正しく機能するはずです。

リバースプロキシとしての活用

Nginxのリバースプロキシ機能は、自治体環境において、既存のWebアプリケーションや内部システムへの安全なアクセスを提供し、ネットワーク構成の柔軟性を高める上で非常に有用です。

リバースプロキシの概念とメリット

リバースプロキシ設定例:内部Webアプリケーションへのプロキシ

ここでは、内部ネットワーク上にあるIPアドレス 192.168.1.100 のポート 8080 で動作するWebアプリケーションを、Nginxを介して internalapp.your_city.jp というドメインでHTTPS公開する例を示します。

server {
    listen 80;
    server_name internalapp.your_city.jp;
    return 301 https://$host$request_uri; # HTTPアクセスをHTTPSへリダイレクト
}

server {
    listen 443 ssl;
    server_name internalapp.your_city.jp;

    # Certbotで取得したSSL/TLS証明書パスを指定
    ssl_certificate /etc/letsencrypt/live/internalapp.your_city.jp/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/internalapp.your_city.jp/privkey.pem;

    # SSL/TLS設定の強化 (自治体セキュリティポリシーに合わせ調整)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s; # DNSリゾルバ (自治体内部DNSを優先)
    resolver_timeout 5s;

    location / {
        proxy_pass http://192.168.1.100:8080; # バックエンドアプリケーションのURL
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 900s; # 必要に応じてタイムアウト値を調整
        proxy_send_timeout 900s;
        proxy_connect_timeout 75s;
    }
}

この設定では、外部からの internalapp.your_city.jp へのHTTPSリクエストがNginxで受け付けられ、Nginxがそのリクエストを内部の 192.168.1.100:8080 へ転送します。バックエンドアプリケーションは外部に直接公開されることなく、Nginxがゲートウェイとして機能します。

設定を保存後、sudo nginx -t で文法チェックを行い、sudo systemctl reload nginx でNginxを再読み込みしてください。

自治体環境における運用上の考慮点

自治体システムでNginxを運用する際には、長期的な安定稼働とセキュリティ維持のために、以下の点を考慮することが重要です。

1. セキュリティポリシーへの準拠

2. 既存システムとの連携

3. ログ管理と監視

4. 長期運用とアップデート

5. パフォーマンスとスケーラビリティ

まとめ

Nginxは、自治体情報システムにおいて、静的Webサイトの公開から、既存システムのセキュリティ強化、サービス連携の中継まで、幅広い用途で活用できる強力なOSSです。

本記事で解説したNginxの導入、HTTPSによるセキュリティ強化、そしてリバースプロキシとしての具体的な活用法は、自治体情報システム部門の担当者様が日々の業務で直面するWeb環境の課題解決の一助となるでしょう。特に、セキュリティと安定稼働が求められる自治体環境においては、Nginxの特性を理解し、適切な設定と運用を心がけることが重要です。

OSSの柔軟性とコストメリットを最大限に活かし、より安全で効率的な自治体情報システム構築を進めていただければ幸いです。