¿Cómo bloquear direcciones IP en HAProxy?

Respuestas:

21

Puede soltar una IP en el nivel de TCP creando una ACL y luego utilizando el rechazo de conexión si la ACL coincide:

    acl bad_ip src 10.10.10.0
    tcp-request connection reject if bad_ip

También puede configurar un backend 403 y enviarlo a eso si desea hacerlo a nivel HTTP:

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

Estas ACL pueden ser bastante flexibles, y puede hacer que se cumplan múltiples condiciones dentro de una ACL, o múltiples ACL dentro de la acción. Más en http://haproxy.1wt.eu/download/1.5/doc/configuration.txt .

Kyle Brandt
fuente
44
Solo necesita un backend separado si desea utilizar una página de error 403 personalizada. De lo contrario, puede salirse con "http-request deny if bad_ip"
sh-beta
1
¿Conoces la manera de leer los ips de una tienda más flexible, como db o un archivo plano separado?
UpTheCreek
1
Ese backend bad_guy no funciona como se esperaba, ya que no tiene servidores definidos, se considera "inactivo" y siempre devolverá 503: el servicio no está disponible. Solo puedo escribir "bloquear si bad_ip" en la configuración de la interfaz y arrojará 403 páginas correctamente. EDITAR: http-request denegar si bad_ip funciona según lo anunciado por @ sh-beta: esencialmente hace lo mismo, pero ¿tal vez solo para solicitudes http?
Dalibor Filus
Hay otra ligera diferencia entre el bloqueo y el rechazo de solicitud http y es esta: "una regla 'bloque' colocada después de una regla 'use_backend' todavía se procesará antes".
Dalibor Filus
2
Si le das un 403 a un "malo", entonces él sabe que está bloqueado y buscará otro Vector. Si le das un 503 a un "malo" ... cuando cree que causó con éxito un DOS y detiene el ataque ... Claro que puede resolverlo, pero le llevará mucho más tiempo.