1.概要
「Raspberry Pi 3」に最新のNginx(1.9系)をインストールし、HTTP2サーバーの設置、無料のダイナミックDNSサービスとサーバー証明書を設定してタダでそのサーバーをインターネットに公開する手順です。
「Qualys SSL Report」のセキュリティ評価が「A+」がゴール。
- 家庭のLANで動的に割り当てられるIPアドレスに対して固定のドメイン名でアクセスすために無料のダイナミックDNSサービスであるMyDNSを利用。
- HTTPSアクセスをするために無料の証明書発行サービスのLet’s Encryptを利用。 ※2016/4/12にベータから正式サービス化
2.手順
2.1.最新のNginxを導入
2.1.1.パッケージのダウンロード元設定ファイルにRaspbian GNU/Linux 9 (コードネーム「stretch」) を追加
sudo su -
echo "deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi" >> /etc/apt/sources.list
cat /etc/apt/sources.list
exit
2.1.2./etc/apt/preferencesファイル作成
sudo su -
echo "Package: *" >> /etc/apt/preferences
echo "Pin: release n=jessie" >> /etc/apt/preferences
echo "Pin-Priority: 600" >> /etc/apt/preferences
cat /etc/apt/preferences
exit
2.1.3.Nginxの導入
sudo apt-get install -t stretch nginx
2.2.「Dynamic DNS」の設定
cron設定
ドメインとIPアドレスの紐付けを定期的に更新。
*/10 * * * * wget -q -O /dev/null http://(ユーザID):(パスワード)@www.mydns.jp/login.html
2.2. サーバー証明書の取得
cron設定
証明書の期限は3ヶ月なので1ヶ月に1回証明書の更新を行う。
00 00 01 * * /(インストールパス)/letsencrypt/letsencrypt-auto certonly --webroot -w /(公開ディレクトリ)/ -d (ドメイン名)
2.3.Nginxの設定
ドメイン名で設定ファイルを「/etc/nginx/sites-available」の下にに作成して「/etc/nginx/sites-enabled」にシンボリックリンクを作成する。
ドメイン毎の設定ファイルの内容。
server {
server_name (ドメイン名) www.(ドメイン名);
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
server_name (ドメイン名) www.(ドメイン名);
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Specifies the enabled ciphers.
ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
# Certificate.
ssl_certificate /etc/letsencrypt/live/(ドメイン名)/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/(ドメイン名)/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Enable SSL session resume.
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Perfect Forward Security (PFS).
ssl_prefer_server_ciphers on;
# Online Certificate Status Protocol (OCSP).
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/(ドメイン名)/fullchain.pem;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
# HTTP Strict Transport Security (HSTS).
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
# Do not allow this site to be displayed in iframes
add_header X-Frame-Options DENY;
# Do not permit Content-Type sniffing.
add_header X-Content-Type-Options nosniff;
# log
access_log /(ログファイルのパス)/(ドメイン名).access.log;
error_log /(ログファイルのパス)/(ドメイン名).error.log;
# location
location / {
root /(公開ディレクトリ);
index index.html index.htm index.php;
}
}
ssl_dhparamファイルは「openssl dhparam 2048 -out dhparam.pem」で作成。
3.確認
3.1.Nginxを再起動してドメインにアクセス。
3.2.https://www.ssllabs.com/ssltest/ にアクセスして、セキュリティの評価を実施。
さぁ、準備は整った。
「OSのセキュリティ / ファイアウォール / 監視」の設定を忘れずに。