セキュアなApacheウェブサーバ(SSL 使用)構築ガイド(Ubuntu 上)

【概要】 UbuntuにApacheウェブサーバをSSLに対応させて構築する手順を説明している.まず,Ubuntuの基本設定としてファイアウォールの有効化,システムの更新,NTPの設定,日本語環境の整備を行う.次に,Apacheと関連ソフトウェアをインストールし,基本的な設定を行う.その後,SSL証明書の取得のためにcertbotをインストールし,Let's Encryptから証明書を取得する.最後に,証明書の自動更新を設定することで,セキュアなウェブサーバの運用が可能となる.

前もって決めておくこと

Web サーバの URL を決めておく.このWebページでは,www.hoge.jpとする.

Ubuntu の基本設定

Apache 及び関連ソフトウェアのインストール,基本設定

  1. ufw(ファイアウォール)の設定
    sudo ufw enable
    sudo ufw allow 22
    sudo ufw allow 80
    sudo ufw allow 443
    sudo ufw allow 'Apache Full'
    
  2. ufw の設定確認
    sudo apt install nmap
    sudo ufw status
    nmap localhost
    
  3. Apache および関連ソフトウェアのインストール
    sudo apt-get --purge remove apache2
    sudo apt-get --purge remove apache2-bin apache2-data apache2-mpm-worker
    sudo apt-get --purge remove libapache2-mod-wsgi
    
    sudo apt -y install apache2
    sudo apt -y install apache2-bin apache2-data apache2-mpm-worker
    sudo apt -y install libapache2-mod-wsgi
    sudo a2enmod ssl
    sudo a2enmod headers
    sudo service apache2 reload
    
  4. Web ブラウザで「localhost」を開き,動作確認を行う.

    Apache の初期画面が表示されればインストールは成功である.

  5. /etc/apache2/sites-available/000-default.conf の設定

    設定例を次に示す.

         ServerName www.hoge.jp
         DocumentRoot /var/www/html
         ServerAdmin hoge@hoge.ac.jp
         <Directory /var/www/html>
         Options FollowSymLinks
         AllowOverride All
         AddType text/html .html
         AddType text/html .htm
         Require all granted
         </Directory>
    
  6. Apache の設定確認と再起動
    sudo apachectl configtest
    sudo service apache2 restart
    
  7. Web ブラウザで「localhost」を開き,設定変更後の動作確認を行う.

    Apache の画面が正常に表示されることを確認する.

  8. SSL 設定ファイル /etc/apache2/sites-available/www.hoge.jp.conf の作成

    /etc/apache2/sites-available/default-ssl.conf/etc/apache2/sites-available/www.hoge.jp.conf にコピーし,次の設定を追加する.

    なお,設定内容は 000-default.conf と整合性を保つこと.

    設定例を次に示す.

         ServerAdmin hoge@hoge.ac.jp
         DocumentRoot /var/www/html
         <Directory /home/www>
         Options FollowSymLinks
         AllowOverride All
         AddType text/html .html
         AddType text/html .htm
         Require all granted
         </Directory>
    
  9. SSL 設定の有効化
    sudo a2ensite www.hoge.jp
    sudo service apache2 restart
    nmap localhost
    
  10. Web ブラウザで「https://localhost」を開き,SSL 設定の動作確認を行う.

    セキュリティ警告は証明書未設定のため発生するが,動作確認では無視して進める.

SSL 証明書の取得

Let's Encrypt の SSL 証明書を certbot を使用して取得する.

参考Webページ: https://certbot.eff.org/lets-encrypt/ubuntuartful-apache.html (現在は公開停止)

参考Webページ: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-18-04

  1. certbot のインストールと設定
    sudo apt -y update
    sudo apt -y install software-properties-common
    sudo apt -y update
    sudo apt -y install certbot
    sudo apt -y install python-certbot-apache -y
    sudo apachectl configtest
    sudo service apache2 restart
    sudo certbot --apache  -d www.hoge.jp
    

    設定時に表示される選択肢で「2」を選択する.表示内容は慎重に確認すること.

  2. SSL モジュールの有効化
    sudo a2enmod ssl
    sudo a2enmod headers
    sudo systemctl restart apache2
    
  3. 証明書の自動更新テスト
    sudo certbot renew --dry-run -d www.hoge.jp
    
  4. 証明書の自動更新設定

    root ユーザで crontab を編集する:

    sudo -i
    crontab -e
    

    次の設定を追加する:

    0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"