はじめに
現在、growiのリバースプロキシとしてnginxを利用しています。
そこで、先だってご紹介したapache利用のサイトと同じようにセキュリティヘッダーを付与しました。
環境
- Ubuntu 20.04
- Growi v6.1.4
- nginx 1.24.0
前提
- サーバへの適切な証明書は準備済みです。
- 既にGrowiが稼働しているものとします。(hoge.example.com)
コンフィグファイル
以下、教義・信仰に沿ったエディタで編集します。自分の環境に合わせてください。
- ファイル名:/etc/nginx/sites-available/growi
upstream hoge {
server 192.168.1.101:3000;
#growiが稼働しているアドレス
}
server {
## http設定(常時SSL化を行います)
listen 80 http2;
server_name hoge.example.com;
server_tokens off;
return 301 https://$host$request_uri;
access_log /var/log/nginx/hoge.example.com/access.log;
error_log /var/log/nginx/hoge.example.com/error.log warn;
}
server {
## https設定
listen 443 ssl http2;
server_name hoge.example.com;
server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/dhparam;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
#SecurityHeader
add_header Strict-Transport-Security 'max-age=63072000';
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
ssl_certificate /etc/certs/hoge.example.com.crt;
ssl_certificate_key /etc/private/hoge.example.com.key;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/nginx/hoge.example.com/ssl_access.log;
error_log /var/log/nginx/hoge.example.com/ssl_error.log warn;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_max_temp_file_size 10240m;
client_max_body_size 10240m;
proxy_redirect off;
set $proxy_target 'hoge';
location / {
proxy_pass http://$proxy_target;
}
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_cache_bypass $http_upgrade;
#SecurityHeader
add_header Strict-Transport-Security 'max-age=63072000';
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
proxy_pass http://$proxy_target/socket.io/;
}
}
- 差分内容
+ #SecurityHeader
add_header Strict-Transport-Security 'max-age=63072000';
+ add_header X-Content-Type-Options "nosniff";
+ add_header X-Frame-Options "SAMEORIGIN";
+ add_header X-XSS-Protection "1; mode=block";
proxy_cache_bypass $http_upgrade;
+
+ #SecurityHeader
+ add_header Strict-Transport-Security 'max-age=63072000';
+ add_header X-Content-Type-Options "nosniff";
+ add_header X-Frame-Options "SAMEORIGIN";
+ add_header X-XSS-Protection "1; mode=block";
+
proxy_pass http://$proxy_target/socket.io/;
コンフィグファイル反映
sudo nginx -t
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
# と出れば正常です
sudo systemctl restart nginx
セキュリティヘッダー付与確認
curlを用いて、開発者ツールよりも手っ取り早くヘッダ付与を確認します。
curl -I 上記、設定を行ったURL
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
のように表示されればOKです。