Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

Apacheのパストラバーサル(ディレクトリトラバーサル)対策

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

Apacheの mod_rewrite でクエリ文字列に .. が含まれるリクエストを拒否する設定

.htaccessに以下を追加

# Block directory traversal attempts
RewriteCond %{QUERY_STRING} (\.\.|/) [NC]
RewriteRule .* - [F,L]

.htaccess で 403 を返したアクセスを検知して、自動的に IP を遮断するfail2banを設定

# /etc/fail2ban/filter.d/apache-traversal.conf
[Definition]
# 403 Forbidden が発生した際に、クエリ文字列に .. や / が含まれるリクエストを検知
failregex = ^<HOST> - - \[.*\] ".* (\.\.|/).* HTTP/.*" 403
ignoreregex =
# /etc/fail2ban/jail.local
[apache-traversal]
enabled = true
port = http,https
filter = apache-traversal
logpath = /var/log/httpd/access_log
# 1回でも不正な攻撃を検知したらBANする場合(または数回試行でBAN)
maxretry = 1
# 1時間(3600秒)BANする場合
bantime = 3600
sudo systemctl reload fail2ban
sudo fail2ban-client status apache-traversal

注意点

  • ログパス: サーバ環境によってログファイルの場所が異なる場合があります。環境に合わせて調整してください。
  • 誤検知: まれに正規のユーザーが入力ミスなどで該当文字を含めてしまった場合もBANされる可能性があります。maxretry(失敗許容回数)を調整して、誤検知を避けるチューニングを行ってください。
  • ファイアウォール: fail2ban が正しく動作するには、サーバのファイアウォール(iptables や firewalld)と連携できている必要があります。
  • もし通常のアクセスで / を含んだパラメータが使われていたとしても、それが「正常に動くアプリ」であれば 403 にはならないため、このルールには引っかかりません。
  • 逆に、このルールに引っかかるのは、「サーバ側で本来アクセスを禁止しているファイルやディレクトリに対し、パス指定(/..)を使って無理やりアクセスしようとした」ケースのみとなり、誤検知の可能性は極めて低いと言えます。
タイトルとURLをコピーしました