501エラー Not Implementedが表示された時はエックスサーバーのWAFが原因かも

新規で立ち上げたホームページである日、サーチコンソールでエラーが出ているとのメッセージが。

カバレッジhttps://www.mydomain.com/で問題が検出されました

サーバーエラー(5xx)

なぜサーバーエラー?

思い当たることがなくSearch Consoleの画面を確認すると。。。

下段にある例を見てみると、アップロードしているPDFファイルが一覧に表示されています。

PDFがエラーの原因のようでした。

実際のページを確認してみると

501 Not Implemented
アクセスしようとしたページは表示できませんでした。
対応していないメソッド(MOVE/COPYなど)を使用した。

501エラーの原因を特定する

エラーは、XserverのWAF設定はいつくかある中の一つが原因のようでした。

でもこのエラーのためにWAFを全てOFFにするのはもったいないというか。できればWAFは有効な状況にしておきたいところ。

なのでWAFのどの設定で引っかかっているのかを調べることにしました。

エラーの原因のファイルはPDFです。PDFファイルの内容は業務のお知らせ的なテキストをWordで打ったものをPDFにした、ごく普通のPDFファイルです。

なのでPDFファイル自体に問題があるとは考えにくいです。

エックスサーバーのWAF設定画面

エックスサーバーのWAFの設定項目は

  • XSS対策
  • SQL対策
  • ファイル対策
  • メール対策
  • コマンド対策
  • PHP対策

の6つですが、今回の場合、疑われるのは「XSS対策」か「コマンド対策」かなとアタリをつけ、一つずつOFFにしてエラーが解消されるかどうかを確認してみました。

WAFの設定を変更しても変更が反映されるまでに1時間程度かかるようです。

WAF設定を一つずつOFFにして問題が解決するかどうか、確認したところ、当たりをつけた「XSS対策」「コマンド対策」どちらでも解決しないことが判明。

次に該当しそうなWAF「ファイル対策」をOFFにしてみました。

すると、エラーが表示されなくなりました。

原因はWAFの「ファイル対策」だったのです。

何故ファイル対策で引っかかったのだろうと考えてみると、PDFファイルをアップしていたディレクトリ名を「etc」としていたのです。

なのでこのetcディレクトリ内にアップロードしたファイルは画像であれ、なんであれ501エラーとなってしまうことがわかりました。

考えてみたらLinuxではルート直下にetcというディレクトリがあり、hostsファイルのような設定ファイルが置かれるところです。

このような理由でWAF上エラーとなってしまったと考えれられます。

今回、etcというディレクトリ名を別の名前に変更。そうしてPDFファイルもエラーにならず表示されるようになりました。

サーバーのWAF設定はWebアプリケーションの脆弱性対策としても有効にしておきたいですが、意図せず設定に引っかかってしまうのが難しいところですね。

Xserver WAF設定
https://www.xserver.ne.jp/manual/man_server_waf.php