web-dev-qa-db-ja.com

Haproxy:ファイルからのユーザーエージェントによるトラフィックを拒否します

ファイルから読み取るために-fオプションを指定したhaproxy ACLを使用して(ユーザーエージェントヘッダーのサブストリングを照合することにより)特定のユーザーエージェントからの接続を拒否しようとしています。ただし、機能していないため、構成が無視されているかのように実行されます。

Haproxyの経験が豊富な誰かが、私が欠けているものを特定できますか?または、このhaproxy構成をデバッグする方法に関するいくつかのヒント?

私はhaproxy 1.4.18を実行しています。

これはhaproxy.cfgからの抜粋です。

listen http 0.0.0.0:80
    acl abuser hdr_sub(user-agent) -f /etc/haproxy/abuser.lst
    tcp-request content reject if abuser
    mode http
    server www1 127.0.0.1:8080 maxconn 10000

これは、abuser.lstファイルの内容です。

# annoying bots
annoyingbot1
annoyingbot2
7
raugfer

この質問は古いですが、誰かがこの問題に遭遇した場合:

あなたの問題は、tcp-request contentは、HAProxyがレイヤー7データを受信/読み取る時間がある前に実行されます。

これを修正するには?

簡単: tcp-request inspect-delay を追加:

listen http 0.0.0.0:80
    tcp-request inspect delay 15s

    acl abuser hdr_sub(user-agent) -f /etc/haproxy/abuser.lst
    tcp-request content reject if abuser
    mode http
    server www1 127.0.0.1:8080 maxconn 10000

これはHAProxyのドキュメントからのこれについての重要なビットです:

コンテンツ検査を実行するとき、haproxyは、それらのデータが部分的であるという事実を考慮して、入ってくるすべての新しいチャンクのルール全体を評価することに注意してください。前述の遅延の前に一致するルールがない場合、最後のチェックが期限切れ時に実行されます。今回は、内容が確定的であると見なされます。 遅延が設定されていない場合、haproxyはまったく待機せず、利用可能な情報に基づいてすぐに判定を適用します。明らかに、これはあまり有用ではなく、際どい場合もあるので、そのような設定は推奨されません。

4
liquidity