プロジェクト

全般

プロフィール

httpのディレクトリトラバーサル攻撃に対する設定

apache-httpdへのディレクトリトラバーサル攻撃(意図しないアクセスできるアドレス)に対する設定を行います。
例えば、特定のアクセスできるアドレスの一個上のディレクトリや/adminを付加した画面へ管理者の意に反して
意図せずアクセスできるか試すといったもので、辞書などを利用した大量の404や403アクセスが発生します。

設定

アクセスログでします。

アクセスログで403,404を調査する

httpdへのアクセスログ監視設定はデフォルトで下記の場所にあります。
この解析設定はデフォルトでは存在しないので、新規に作成します。

注意点として、正しく表示されるページに含まれるコンテンツ(画像ファイルやfavicon.ico、robots.txt)
がリンク切れしている場合にも同様に404が表示されるため、これらを例外として登録します。
これを行わない場合、コンテンツのパスを誤ったページを表示すると1ページだけでも画像ファイルやcss
ファイルごとに404が大量に記録され即時ban……ということにもなりかねません。

  • /etc/fail2ban/filter.d/apache-404.conf
    特定の文字列を検出時にレコードを無視する場合、下記に設定を行う。
    [Definition]
    failregex =  ^<HOST>.*"(GET|POST).*" (403|404) .*$
    ignoreregex = \.(?i)(jpe?g|gif|png|bmp|pdf|js|css|woff|eot|ttf|ico|txt|xml|swf|xlsx?|docx?|pptx?)
    

    スタンスとしては個別のコンテンツファイルは無視し、.htmlや.phpなどの本体ファイルを
    対象とするように除外を設定します。

次のアクセス制限の設定を行います。以下のファイルに追記していきます。

  • /etc/fail2ban/filter.d/jail.local
    [apache-404]
    enabled = true
    port = http,https
    filter = apache-404
    logpath = /var/log/httpd/*access_log
    action   = iptables-multiport[name=http, port="http,https", protocol=tcp]
               sendmail-whois[name=http, dest=root, sender=fail2ban@localhost, sendername="Fail2Ban-HTTPD"]
    maxretry = 10
    findtime = 60
    bantime = 86400
    

    ここでは「apache-404」という名前で設定を作り有効化します。
    フィルタは前述の「filter.d/apache-404.conf」を使用します。
    iptablesでポリシーを追加する際に使用する「名前、ポート、プロトコル」を指定します。
    次の行では、banした際に送信するメールの名前、送り先、送信者アドレス、送信者名を指定します。
    次に監視するログのパス、banする間隔と試行回数(60秒ごとに10アクセス)と時間(86400)を指定します。

設定の有効化

fail2ban設定を再読み込みします。

# systemctl reload fail2ban

動作確認

iptablesにポリシーが追加されていることを確認します。

# iptables -L -n
Chain f2b-httpd (1 references)
target     prot opt source               destination
REJECT     all  --  xxx.xxx.xxx.xxx      0.0.0.0/0           reject-with icmp-port-unreachable
……
…
RETURN     all  --  0.0.0.0/0            0.0.0.0/0