web-dev-qa-db-ja.com

Nginxで404爆弾を軽減

404クエリが発生し、マシンがダウンしています。私のすべてのページの近くはhttpキャッシュされており、いくつかの基本的なDos保護があります

limit_conn_zone $http_x_forwarded_for zone=addr:10m;
limit_conn addr 8;

limit_req_zone $http_x_forwarded_for zone=one:10m rate=2r/s;
limit_req zone=one burst=50;

client_body_timeout 5s;
client_header_timeout 5s;
send_timeout 10s;

上記以外にこれらの404攻撃を防ぐために何ができますか?

1
Quintin Par

nginxlimit_reqlimit_connを設定した後、仮想ホストでそれらを有効にしましたか?のように:

server {
    # ...
    location / {
        limit_req zone=one;
        limit_conn addr 10;

    # ...
    }
}

また、fail2banは、ファイアウォール(iptables)で動的ルールを自動作成するためのログパーサーです。 fail2banでフィルターとアクションを作成して、404のオリジンIPをフィルター処理し、何度か試行した後にそれらをブロックするか、limit_reqログとlimit_connログをフィルター処理して、代わりにそれらのIPを禁止することができます(404クライアントIPをブロックすると発生する可能性があります)いくつかの不要なブロック)。

vim /etc/fail2ban/jail.d/nginx.conf

これをコピーします:

[nginx-req-limit]

enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
  • findtimeは、maxretryで発生する時間(秒単位)です。この場合、10分(600秒)で10イベント後にトリガーされます。
  • bantimeは、ファイアウォールでIPをブラックリストに登録する時期です。また数秒で。この場合、問題のあるIPを2時間(7200秒)ブロックします。
  • logpathは、nginxで仮想ホスト用に構成したエラーログです。

jail.confjail.d/*.conf参照が含まれていることを確認し、サービスを再起動します。

service fail2ban restart

これは、DDoS攻撃を回避するのに役立ちます。

検討する価値のあるもう1つのオプションは、上記のコメントに記載されているCDNを使用することです。 Cloudflareには、大いに役立つ素敵な無料バージョンがあります。それは、いくつかの悪いボットなどをブロックするWebアプリケーションファイアウォールを備えています。プロ/ビジネスバージョンにはより多くのオプションがありますが、お金がかかります。

3
Leo