このチュートリアルでは、Letsencrypt証明書を使用してNginxWebサーバーをインストールおよび構成する方法を段階的に説明します。このガイドでは、Nginx Webサーバーのインストール、Let's Encryptツールのインストール、SSL証明書の生成による暗号化、SSLを使用したnginx仮想ホストの構成、SSLテストSSLラボからA+を取得するための追加のSSL構成の作成について説明します。
>- Linuxサーバー-Ubuntu18.04またはCentOS7.5
- root権限
何をしますか?
- NginxWebサーバーをインストールする
- ファイアウォールUFW/ファイアウォールの構成
- インストールしてSSL証明書を暗号化して生成しましょう
- セキュアSSLの構成
- SSLを使用してNginx仮想ホストを構成する
- テスト
このチュートリアルでは、両方のLinuxサーバー(Ubuntu18.04とCentOS7.5)にLetsencryptを使用してNginxWebサーバーをインストールして構成する方法を説明します。
Ubuntu18.04の場合。
リポジトリを更新してから、以下のaptコマンドを使用してnginxをインストールします。
sudo apt update
sudo apt install nginx -y
CentOS7.5の場合。
EPELリポジトリをCentOSシステムにインストールし、yumコマンドを使用してNginxをインストールします。
sudo yum install epel-release -y
sudo yum install nginx -y
インストールが完了したら、Nginxサービスを開始し、システムの起動時に毎回起動できるようにします。
systemctl start nginx
systemctl enable nginx
これでNginxWebサーバーがインストールされ、デフォルトのHTTPポート80で実行されています。以下のnetstatコマンドを使用して確認してください。
netstat -plntu
サーバーでファイアウォールをオンにし、必要に応じて特定のポートを開くことをお勧めします。このステップでは、UFWファイアウォールを使用してLinuxサーバーUbuntu 18.04でSSH、HTTP、HTTPSポートを開き、CentOS7.5システムでFirewalledを開く方法を示します。
Ubuntu18.04の場合-UFWファイアウォール
UbuntuシステムでUFWファイアウォールを有効にする前に、リストファイアウォール構成でSSHポートが有効になっていることを確認してください。
ufwコマンドを使用してSSHサービスポートをファイアウォール構成に追加してから、UFWファイアウォールサービスを有効にします。
ufw allow ssh
ufw enable
次に、HTTPサービスとHTTPSサービスを追加します。
ufw allow http
ufw allow https
SSH、HTTP、およびHTTPSサービスポートがUFWファイアウォールサービスリストに追加されました。以下のコマンドを使用して確認してください。
ufw status
CentOS7.5の場合-ファイアウォールで保護されています
ポートとサービスをfirewelldに追加する前に、firewalldサービスが稼働していることを確認してください。
Firewalldサービスを開始し、システムの起動時に毎回起動できるようにします。
systemctl start firewalld
systemctl enable firewalld
注:
- SSHサービスはFirewaldサービスリストでデフォルトで有効になります。
次に、以下のfirewall-cmdコマンドを使用してHTTPおよびHTTPSサービスを追加します。
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Firewalld構成をリロードし、サービスリストを確認してください。
firewall-cmd --reload
firewall-cmd --list-services
そして、SSH、HTTP、およびHTTPSサービスがリストに追加されます。
このステップでは、letsencryptツールをインストールし、cerbotコマンドを使用して強力なSSL証明書Letsencryptを生成します。
Ubuntu18.04の場合
以下のaptコマンドを使用してletsencryptパッケージをインストールします。
sudo apt install letsencrypt -y
CentOS7.5の場合
次に、以下のyumコマンドを使用してCentOS7にletsencryptパッケージをインストールします。
sudo yum install certbot -y
インストールが完了したら、SSL証明書ファイルの生成に使用される新しい構成を作成します。
Ubuntu18.04の場合
'/ etc / nginx'構成ディレクトリに移動し、'snippets'ディレクトリの下に新しい構成ファイル'cerbot.conf'を作成します。
cd /etc/nginx/
vim snippets/certbot.conf
次の構成をそこに貼り付けます。
location /.well-known { alias /var/www/html/.well-known; }
保存して終了します。
次に、デフォルトのNginx仮想ホストファイルを編集します。
vim sites-available/default
'server{..}'ブロックの下に次の構成を追加します。
include snippets/certbot.conf;
保存して終了します。
CentOS7.5の場合
'/ etc / nginx'構成ディレクトリに移動し、'default.d'ディレクトリの下に新しい構成ファイル'certbot.conf'を作成します。
cd /etc/nginx/
vim default.d/certbot.conf
以下に構成を貼り付けます。
location /.well-known { alias /usr/share/nginx/html/.well-known; }
保存して終了します。
次に、nginx構成をテストし、エラーがないことを確認してから、nginxサービスを再起動します。
nginx -t
systemctl restart nginx
次に、certbotコマンドを使用してSSLletsencrypt証明書を生成します。
Ubuntu18.04の場合
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /var/www/html -d hakase-labs.io
CentOS7.5の場合
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /usr/share/nginx/html -d hakase-labs.io
注:
- ドメインのRSAキーサイズを「4096」に指定し、認証方法をUbuntuシステムのデフォルトのWebルートディレクトリ「/ var / www / html」、および「/ usr /share/」に定義します。 CentOS7システムのnginx/html'ディレクトリ。
完了すると、「/ etc /letsencrypt/live」ディレクトリにあるドメイン名のすべてのSSL証明書ファイルを取得します。
セキュリティを強化するために、以下に示すように、OpenSSLコマンドを使用してDHPARAMキー「4096」を生成します。
openssl dhparam -out /etc/nginx/dhparam.pem 4096
DHPARAMキーが「/etc/nginx」ディレクトリに生成されました。
このステップでは、NginxWebサーバーのSSL構成を定義します。 NginxWebサーバーに焦点を合わせた微調整されたSSL構成セキュリティを含む新しい構成「ssl.conf」を作成します。
Ubuntu18.04の場合
'/ etc / nginx /'構成ディレクトリに移動し、'snippets'ディレクトリの下に新しいSSL構成'ssl.conf'を作成します。
cd /etc/nginx/
vim snippets/ssl.conf
CentOS7.5の場合
'/ etc / nginx /'構成ディレクトリに移動し、'default.d'ディレクトリの下に新しいSSL構成'ssl/conf'を作成します。
cd /etc/nginx/
vim default.d/ssl.conf
次のSSL構成をそこに貼り付けます。
# Specify the TLS versions ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # Ciphersuites recommendation from the chiper.li # Use this chipersuites to get 100 points of the SSLabs test # Some device will not support #ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"; # Mozilla Ciphersuits Recommendation # Use this for all devices supports ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; # Use the DHPARAM key and ECDH curve >= 256bit ssl_ecdh_curve secp384r1; ssl_dhparam /etc/nginx/dhparam.pem; server_tokens off; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # Enable HTTP Strict-Transport-Security # If you have a subdomain of your site, # be carefull to use the 'includeSubdomains' options add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; # Enable OSCP Stapling for Nginx web server # If you're using the SSL from Letsencrypt, # use the 'chain.pem' certificate ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/hakase-labs.io/chain.pem; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # XSS Protection for Nginx web server add_header X-Frame-Options DENY; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options nosniff; add_header X-Robots-Tag none;
保存して終了します。
注:
- サイトのTLSバージョンを指定し、TLSv1TLSv1.1TLSv1.2のみを受け入れます。
- SSL暗号スイートを指定します。すべてのデバイスの互換性を確保するには、Mozillaの提案のSSL暗号スイートを使用することをお勧めします。
- HSTS、OSCPステープリングを有効にし、XSS保護を追加します。
このステップでは、ドメイン名の仮想ホストファイルを作成します。新しい仮想ホスト、hakase-labs.ioという名前のドメインを作成し、そのWebルートディレクトリは「/ var / www/site01」ディレクトリに配置されます。
新しいディレクトリ「/var/ www / site01」を作成し、その中に「index.html」ファイルを作成します。
mkdir -p /var/www/site01
echo '<h1><center>Nginx - Letsencrypt - A+</center></h1>' > /var/www/site01/index.html
次に、「/ etc / nginx」構成ディレクトリに移動し、ubuntuの場合は「hakase-labs.io」、CentOS7システムの場合は「hakase-labs.conf」という名前の新しい仮想ホストファイルを作成します。
Ubuntu18.04の場合
cd /etc/nginx/
vim sites-available/hakase-labs.io
CentOS7.5の場合
cd /etc/nginx/
vim conf.d/hakase-labs.conf
次のサンプルNginx仮想ホスト構成をそこに貼り付けます。
server { listen 80; listen [::]:80; server_name hakase-labs.io; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/site01; index index.html index.php index.htm; server_name hakase-labs.io; error_log /var/log/nginx/hakase-error.log warn; ssl_certificate /etc/letsencrypt/live/hakase-labs.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hakase-labs.io/privkey.pem; #SSL Configuration include snippets/ssl.conf; location ~ /.well-known { allow all; } location / { try_files $uri $uri/ =404; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
保存して終了します。
注:
- 'include snippets/ssl.conf;'を変更しますライン。 Ubuntuを使用している場合は、デフォルトのままにします。また、CentOSを使用している場合は、ディレクトリを「default.d/ssl.conf」に変更します。
新しい仮想ホストファイルを有効にして構成をテストし、エラーがないことを確認します。
ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
nginx -t
次に、nginxサービスを再起動します。
systemctl restart nginx
HTTPSが有効になっていて、追加のSSL構成が作成された新しい仮想ホストが作成されました。
netstatコマンドを使用して確認すると、リストにHTTPSポート443が表示されます。
netstat -plntu
Webブラウザーを開き、ドメインの名前を入力します。私の名前は「http://hakase-labs.io」です。
そして、HTTPS接続にリダイレクトされます。
次に、SSLテストサイト「https://www.ssllabs.com/ssltest/」にアクセスして独自のドメイン名を入力し、結果が得られるまで待ちます。
以下は、「MozillaCiphersuiteRecommendation」を使用した私の結果です。
そして、以下は「Cipher.li暗号スイートの推奨事項」を使用した私の結果です。
すべての結果に「A+」の結果が表示され、Mozillaの推奨事項とCipherli.stの推奨事項の「CipherStrength」のみが異なります。
サーバー上のOSCPステープリングとHSTSを確認するには、テスト結果ページをスクロールすると、次のような結果が得られます。
コマンドラインからOSCPステープリングを確認する場合は、次のコマンドを使用して確認してください。
echo QUIT | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'
HSTSテストについては、以下のcurlコマンドを使用して確認してください。
curl -s -D- https://hakase-labs.io | grep -i Strict
NginxWebサーバーのSSLLetsencryptを使用したインストールと構成、およびSSLabsテストからのA+の取得が正常に完了しました。
- https://community.letsencrypt.org/
- https://mozilla.github.io/
- https://cipherli.st/