勝手な事やってくれたなぁ、お名前.com
お名前.comからドメイン等を購入すると、怒濤のごとく「ドメイン買いませんか?」メールが大量に送られてくる、曰く付きのサイトなのですが、
自分が使用しているドメインが元々お名前.comなので、そのサービスの一環なのか、新サービスのPRが目的なのか、勝手にセキュリティ診断を行い、一方的に診断結果が送られてきました。
診断結果はD判定でした。
まぁ、ちょっと時間的にも余裕が出来たので、こいつの対処をやってみたいと思います。
nginxのバージョンが古くてサポート切れしている。
そもそもOSのバージョンがubuntu 22.04なので、LTSのサポート期間中なのに最新のnginxが古いのはどうなのか、と思いますが。
結局はOSをubuntu 24.04にアップグレードし、さらにリポジトリなどを弄って、nginx 1.24にバージョンアップしました。
それでも、nginx 1.24は現在サポート切れているようです。。。
HTTPヘッダにHSTSが無い。
よくわからんけど、これが無いとサイトにアクセスした人が悪意あるサイトに誘導されてしまうらしい。
対策はnginxの設定ファイルに以下を追加すれば良い。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
設定例
server {
listen 443 ssl;
server_name diet.taki-lab.site;
ssl_certificate /etc/letsencrypt/live/diet.taki-lab.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/diet.taki-lab.site/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
X-Frame-Optionsが無い
これを設定しないと、悪意あるサイトのiframeの中に、自分のサイトが埋め込まれてしまうらしい
対策はnginxの設定ファイルに以下を追加すれば良い。
add_header X-Frame-Options "DENY" always;
X-Content-Type-Options が無い
これが無いと、テキストファイルや画像ファイルを、謝ってスクリプトとして実行可能になってしまうらしい。
対策はnginxの設定ファイルに以下を追加すれば良い。
add_header X-Content-Type-Options "nosniff" always;
Content-Security-Policy(CSP)が無い
これが無いと、XSS(クロスサイトスクリプティング)やクリックジャッキング攻撃のリスクがあるらしい。
対策はnginxの設定ファイルに以下を追加すれば良い。
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" always;
ChatGPT曰く、これらの設定には、
- default-src 'self' → すべてのリソースは自サイト (self) からのみ許可
- script-src 'self' → JavaScript の読み込みを自サイトのみに限定
- style-src 'self' → CSSも自サイトのもののみ許可
- img-src 'self' → 画像も自サイトのもののみ許可
- font-src 'self' → フォントも自サイトのもののみ許可
- object-src 'none' → FlashやJavaアプレットの読み込みを禁止
- frame-ancestors 'none' → iframe で埋め込まれないようにする(クリックジャッキング対策)
- base-uri 'self' → タグの悪用を防ぐ
- form-action 'self' → フォーム送信を自サイトのみに制限
という意味があるらしい。
これを入力したら、wordpressのブログサイトの表示がおかしくなった。
消したら元に戻ったので、現在消したままの状態にしている
nginxのバージョンが見えてしまう
nginxのバージョンが見えてしまうと、どんな脆弱性を突くことが可能かが分かってしまうので、バージョンが分からないようにする方がセキュリティ的に良いらしい。
対策はnginxの設定ファイルに以下を追加すれば良い。
http {
server_tokens off;
}
最終的にこうなった。
これまでは「Webが動けばいいや」みたいに考えていた(7年間)けど、
Web関連の仕事を通してきて、少しセキュリティについても知識を身につけないと、と考えていて、
今回の一連の作業を通じて色々学ぶ機会が合って、結果的に良かったかなと思います。