お名前.comの無料セキュリティ診断結果の対応

掲載日
更新日

毎月無料診断の結果とその対策

お名前.comでドメインを取得すると、毎月無料でセキュリティを診断して以下のような結果を見せてくれます。

個人サイトとはいえ、技術ブログなのでセキュリティはちゃんとしたいので頑張って対応した備忘録です。

お名前.com診断結果のスクリーンショット

 

Apacheのバージョンアップ

opensshのバージョンアップ

サポートの終了したソフトウェアの利用(OpenSSL/3.2.2)

 既知の脆弱性が存在するソフトウェアの利用(openssl)

バージョンアップ系は言われた通り、バージョンアップをすればOKです。

yum upgrade

※ なお、場合によってはソフトが動かなくなる可能性もあるので、実際は部分的(エラーが出ているもののみ)にupgradeするテスト環境で一旦動作確認するバージョンを戻す方法をあらかじめ調べておき、動作確認まで済ませておく等を徹底しましょう。

このサイトは個人サイトなので、雑に上記を実行しています。

 

なお、アップグレードしても最新のソフトが入ってなかったりするので、手動でインストールする必要があることもあります。

(※ Apacheはそうだったので、こちらを参考にインストールしました。)

脆弱な SSH 暗号アルゴリズムのサポート

SSHで脆弱性のある暗号アルゴリズムを使用できちゃうよというエラーです。

上記記事を参考に、以下の記載を/etc/ssh/sshd_configに追加して保存します。

# 安全な鍵交換アルゴリズム
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,sntrup761x25519-sha512@openssh.com

# 安全な暗号アルゴリズム
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr

# 安全なMAC
MACs hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com

設定を反映するため、サービスを再起動します。

systemctl restart ssh

※ sshの設定を変更すると、使用しているターミナルによってログインできなくなる可能性があります。この時、sshログインした端末を起動した状態で別窓でログインし直せるかチェックしておきましょう
(最悪ログインしたウィンドウが残っていれば、設定を戻して事なきを得ます。)

セキュリティヘッダ "X-Frame-Options" の未設定もしくは設定の不備

X-Frame-Optionsは、ウェブアプリケーションをクリックジャッキング攻撃から防御するためのヘッダです

 

安全なウェブサイトの作り方 - 1.9 クリックジャッキングより引用

クリックジャッキングについて詳細は引用元のIPAのページが詳しくて正確なので参考ください。

iframe等を用いて、画面の上に画面を重ねて操作させることで誤操作をさせるようなことが出来るようです。
(画面A側にSNSの投稿画面が表示されていて、画面Bに罠サイトが表示されている場合に、画面A側で「投稿する」ボタンがある位置に画面B側に無害なリンクを置いておくことで、ユーザーがリンクをクリックした際に画面A側で想定外の投稿が完了してしまうようなイメージなのかなと思います。)

Apacheの場合、設定ファイル/etc/conf/httpd.confに以下の内容を追加します。

# クリックジャッキング対策
Header always set X-Frame-Options "DENY"

設定を反映するため、httpdサービスをリスタートします。
(この後の設定でもリスタートが必要になるので、リスタートはまとめて設定してからやってもOK。)

systemctl restart httpd(一瞬でも止めたくない場合は httpd -k gracefulでも)

curlコマンドでx-frame-options: DENYが出力されていることを確認します。

[XXX@XXX ~]# curl  https://awatana.com -I -s
(省略)
date: Mon, 22 Dec 2025 08:54:23 GMT
x-frame-options: DENY // ここが出ていればOK!
(省略)

ここではDENY(全部拒否)にしていますが、以下のように設定値を変えて部分的に許可することも可能です。
地図サービスなどは埋め込みが必要になると思うので、ALLOW-FROMを設定して特定のサイトのオリジンを許可することになるのかなと思います。

 

設定値表示範囲
DENY
すべてのウェブページにおいてフレーム内の表示を禁止
SAMEORIGIN
同一オリジンのウェブページのみフレーム内の表示を許可
ALLOW-FROM
指定したオリジンのウェブページのみフレーム内の表示を許可
設定値:frame要素およびiframe要素により表示できる範囲

セキュリティヘッダ "X-Content-Type-Options" の未設定

 クロスサイト・スクリプティング(XSS)対策の設定。

この設定が無いと、ブラウザはファイルのダウンロード時等に勝手に内容を推測して表示しようとするらしい。

例:text/plainなファイルにHTMLの記載があると、HTMLとして扱おうとしてしまう。(よってjavascriptが内部に書かれていると実行されてしまう。)

これを防ぎ、「サーバーから送っているContent-Typeに従ってくださいね」という指示をブラウザに出すのがX-Content-Type-Optionsヘッダーの役割です。

設定する場合、/etc/conf/httpd.confに以下を追記します。

# XSS対策
Header always set X-Content-Type-Options "nosniff"

設定を反映するため、httpdサービスをリスタートします。

systemctl restart httpd(一瞬でも止めたくない場合は httpd -k gracefulでも)

curlコマンドでx-content-type-options: nosniffが出力されていることを確認します。

[XXX@XXX ~]# curl  https://awatana.com -I -s
(省略)
x-frame-options: DENY
x-content-type-options: nosniff // ここが出ていればOK!
content-type: text/html;charset=utf-8
(省略)

セキュリティヘッダ "Content-Security-Policy" の未設定もしくは設定の不備

HTTP の Content-Security-Policy レスポンスヘッダーは、ウェブサイト管理者が、あるページにユーザーエージェントが読み込みを許可されたリソースを管理できるようにします。いくつかの例外を除いて、大半のポリシーにはサーバーオリジンとスクリプトエンドポイントの指定を含んでいます。これはクロスサイトスクリプティング攻撃を防ぐのに役立ちます。

MDN「Content-Security-Policy (CSP) ヘッダー」より引用

他のサイトからのコンテンツの読み込みを制御できます。

(他サイトの画像のURLをimgタグのsrcに入れても読み込みがブロックされて表示が出来なくなるようなイメージです。
jsファイルとかも読み込めちゃうと色々悪用ができちゃうから、読み込み元のドメインとかをちゃんと指定しようねということかと思います。)

例えば以下のような設定をすることで、全てのコンテンツを自分のドメインからしか読み込めなくなります。

Header always set Content-Security-Policy "default-src 'self';
# default-src : すべてのソースに対する設定。「img-src」「frame-src」等を使うことで、画像の読み込みに関する制御やiframeに関する制御など細かく設定が可能。
# 'self' : 自分のドメインのみ。ここに例えば「*.awatana.com」とかすることで、このサイトからのソース読み込みを許可できる。

 サイトで使用している外部ソースを洗い出して設定する→増える都度ドメイン設定を増やす。というのが一番安全な運用になると思われますが、これはとても大変。(規模が大きくなればなるほど収集つかなくなりそうです。)

自分のサイトもGoogleのタグマネージャーやフォントを読み込んでいるので適当な設定は出来ません。

scriptにnonceという属性を追加する方法があり、それが良さそうですがソフト側の手入れが必要なので一旦保留します。(分かり次第別記事にて対応します。)

HTTP(S) プロトコルが有効

httpプロトコルがポート80, 443以外でも動いてるよというエラー。

自分のサイトはフロントをNuxt、バックエンドをGolangで動かし、リバースプロキシを使って、443でサイトにアクセス出来るようにしています。

Golangで作ったファイル(サイトマップファイル)等にもアクセスできるようにしたく、Golangで作ったファイルが出力されているディレクトリをポート8080で見れるようにしてそこをfirewallで穴あけしてました。

当時の自分がぼけてましたが、わざわざ穴を開けなくても8080をリバースプロキシで443で見れるようにすればいいので、そのようにしてfirewallからポート8080を削除しました。

バージョン情報の検出(HTTPヘッダ:Server)

サイトにリクエストを飛ばしたときにバージョン情報が出てるよというエラーです。
例えば以下のようにcurlを実行すると、「server: XXX」という項目にApacheのバージョン等が表示されます。

脆弱性のあるバージョン情報が出ていると格好の攻撃対象となってしまうので隠しましょうという事だと思います。

[XXX@XXX ~]# curl -I -s https://awatana.com/
HTTP/2 200
content-type: text/html;charset=utf-8
x-powered-by: Nuxt
date: Fri, 19 Dec 2025 02:52:52 GMT
strict-transport-security: max-age=31536000; includeSubDomains; preload
server: Apache/X.X.XX (XXX) OpenSSL/X.X.X // ここが出てるのがよろしくない。

隠す場合、Apacheの場合は/etc/httpd/conf/httpd.confに以下を追記します。

# 任意の位置に以下の内容を追加
ServerSignature Off
ServerTokens ProductOnly

追記して保存したら、サービスを再起動して設定を読み込み直します。

systemctl restart httpd(一瞬でも止めたくない場合は httpd -k gracefulでも)

curlを実行して設定が反映されていることを確認します。

[XXX@XXX ~]# curl -I -s awatana.com
HTTP/1.1 301 Moved Permanently
Date: Fri, 19 Dec 2025 02:57:03 GMT
Server: Apache
Location: https://awatana.com/
Content-Type: text/html; charset=iso-8859-1
# server: XXX が表示されなくなったのでOK!

おわりに

Apache最新版入れるのが大変だった。

 

記事の作成者のA.W.のアイコン

この記事を書いた人

A.W.
茨城県在住Webエンジニアです。 PHPなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。

Comment