Wie blockiere ich IP-Adressen in HAProxy?

8

Gibt es so etwas wie Apache "von IP verweigern" in Haproxy?

Marcin
quelle

Antworten:

21

Sie können eine IP auf TCP-Ebene löschen, indem Sie eine ACL erstellen und dann die Verbindungsabweisung verwenden, wenn die ACL übereinstimmt:

    acl bad_ip src 10.10.10.0
    tcp-request connection reject if bad_ip

Sie können auch ein 403-Backend einrichten und an dieses senden, wenn Sie dies auf HTTP-Ebene tun möchten:

frontend foo
        ...
        acl bad_ip src 10.10.10.0
        use_backend bad_guy if bad_ip
...

backend bad_guy
        mode http
        errorfile 403 /etc/haproxy/errors/403.http

Diese ACLs können sehr flexibel sein, und Sie können festlegen, dass mehrere Bedingungen innerhalb einer ACL oder mehrere ACLs innerhalb der Aktion erfüllt sein müssen. Mehr unter http://haproxy.1wt.eu/download/1.5/doc/configuration.txt .

Kyle Brandt
quelle
4
Sie benötigen nur ein separates Backend, wenn Sie eine benutzerdefinierte 403-Fehlerseite verwenden möchten. Andernfalls können Sie mit "http-Anfrage verweigern, wenn bad_ip"
sh-beta
1
Kennen Sie die Möglichkeit, die IP-Adressen in einem flexibleren Geschäft wie DB oder einer separaten Flatfile zu lesen?
UpTheCreek
1
Dieses Backend bad_guy funktioniert nicht wie erwartet, da es keine definierten Server hat, als "down" betrachtet wird und immer 503 zurückgibt - Dienst nicht verfügbar. Ich könnte nur sagen, Sie können einfach "block if bad_ip" in die Frontend-Konfiguration schreiben und es wird 403 Seite richtig werfen. BEARBEITEN: http-Anfrage ablehnen, wenn bad_ip wie von @ sh-beta angekündigt funktioniert - macht im Wesentlichen das Gleiche, aber vielleicht nur für http-Anfragen?
Dalibor Filus
Es gibt einen weiteren kleinen Unterschied zwischen Block- und http-Anforderungsverweigerung: "Eine 'Block'-Regel, die nach einer' use_backend'-Regel platziert wird, wird noch vorher verarbeitet."
Dalibor Filus
2
Wenn Sie einem "Bösen" einen 403 geben, weiß er, dass er blockiert ist und sucht nach einem anderen Vektor. Wenn Sie einem "Bösen" eine 503 geben, dann glaubt er, er habe erfolgreich ein DOS verursacht und stoppt den Angriff. Natürlich kann er es herausfinden, aber es wird viel länger dauern.