RHEL9|ApacheでOPTIONSとTRACEを無効化する手順まとめ
1.まず初めに(なぜOPTIONSとTRACEを無効化するのか)
Apache を運用していると、セキュリティ診断で
「OPTIONS メソッドが公開されています」
「TRACE メソッドを無効化してください」
と指摘されるケースがよくあります。
普段の利用ではあまり意識しませんが、
- サーバーの情報が外部に見える
- 古い攻撃手法(XST)に悪用される
- セキュリティ診断で必ずチェックされる
といった理由から、不要なメソッドは無効化しておくことが大切です。
この記事では RHEL9 + Apache 2.4 の環境で、
OPTIONS と TRACE を安全に無効化する方法を、やさしく解説します。
また、ネットに多く残っている古い手法(<Limit> / <LimitExcept>)が
今回の環境では正しく動作しなかったため、
実際に動作した方法(Location + AllowMethods)に絞って紹介します。
2.結論(先に知りたい方向け)
RHEL9 + Apache 2.4で OPTIONS / TRACE を無効化するには、
以下の2つの設定を行います。
① OPTIONS の制御
以下の設定をhttpd.confに記載します。
<Location "/">
AllowMethods GET POST
</Location>
この設定により、
GET と POST 以外のメソッド(OPTIONS 含む)を無効化できます。
② TRACE を無効化する
以下の設定をhttpd.confに記載します。
TraceEnable off
この設定により、
TRACEのメソッドを無効化できます。
③ 設定を反映する
sudo systemctl restart httpd
④メソッドを確認する
curl -X OPTIONS -I http://localhost/
curl -X TRACE -I http://localhost/
OPTIONS / TRACE が拒否されていれば成功です。
4.つまずいたポイント(Limit 系ではうまく動作しなかった理由)
ネットの記事や古い情報を見ると、
<Limit OPTIONS><LimitExcept GET POST>
といった設定が紹介されていることが多いです。
実際に RHEL9 + Apache 2.4 の環境で試してみましたが、
curl の結果では OPTIONS が無効化されず、
セキュリティ診断の指摘が消えないケースがありました。
4-1.Limit 系が効かなかった原因
- 2.4 では認可モデルが「Require」ベースに変わったため
<Limit>/<LimitExcept>は 2.2 時代の書き方- 設定は通るが、実際のAllowヘッダには反映されない場合がある
<Directory>と<Location>の評価順序の違いも影響する
つまり、
「設定は合っているのに、動作が一致しない」
という落とし穴にハマりやすい部分です。
4-2.最終的に Location を採用した理由
- URL単位で確実に制御できる
- AllowMethods が Apache 2.4 で安定して動く
- curl の結果でも OPTIONS が除外される
- セキュリティ診断でも問題なし
そのため、この記事では
実機で効果のあった Location + AllowMethods を結論として採用しました。
5.参考にしたサイト(公式中心)
信頼性確保のため、公式ドキュメントを中心に参照しています。
- AllowMethods(mod_allowmethods)
https://httpd.apache.org/docs/2.4/mod/mod_allowmethods.html - TraceEnable
https://httpd.apache.org/docs/2.4/mod/core.html#traceenable - <Location> ディレクティブ
https://httpd.apache.org/docs/2.4/mod/core.html#location - <Limit> / <LimitExcept>
https://httpd.apache.org/docs/2.4/mod/core.html#limit
https://httpd.apache.org/docs/2.4/mod/core.html#limitexcept

コメント