Comment bloquer les adresses IP dans HAProxy?

8

Y a-t-il quelque chose comme Apache "nier de l'IP" dans haproxy?

Marcin
la source

Réponses:

21

Vous pouvez supprimer une adresse IP au niveau tcp en créant une liste de contrôle d'accès, puis en utilisant le rejet de connexion si la liste de contrôle d'accès correspond:

    acl bad_ip src 10.10.10.0
    tcp-request connection reject if bad_ip

Vous pouvez également configurer un backend 403 et les y envoyer si vous voulez le faire au niveau 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

Ces ACL peuvent être assez flexibles, et vous pouvez faire en sorte que plusieurs conditions dans une ACL, ou plusieurs ACL dans l'action doivent être remplies. Plus sur http://haproxy.1wt.eu/download/1.5/doc/configuration.txt .

Kyle Brandt
la source
4
Vous n'avez besoin d'un backend séparé que si vous souhaitez utiliser une page d'erreur 403 personnalisée. Sinon, vous pouvez vous en tirer avec "http-request deny if bad_ip"
sh-beta
1
Connaissez-vous un moyen de lire les ips à partir d'un magasin plus flexible, comme db ou fichier plat séparé?
UpTheCreek
1
Ce backend bad_guy ne fonctionne pas comme prévu, car il n'a pas de serveurs définis, il est considéré comme "en panne" et retournera toujours 503 - service non disponible. Je pense que vous pouvez simplement écrire "block if bad_ip" dans la configuration frontale et cela lancera correctement la page 403. EDIT: http-request nie si bad_ip fonctionne comme annoncé par @ sh-beta - fait essentiellement la même chose, mais peut-être juste pour les requêtes http?
Dalibor Filus
Il y a une autre légère différence entre le blocage et le refus de requête http et c'est la suivante: "une règle" bloc "placée après une règle" use_backend "sera toujours traitée avant."
Dalibor Filus
2
Si vous donnez un "méchant" 403, il sait qu'il est bloqué et cherchera un autre vecteur. Si vous donnez à un "méchant" un 503 ... alors il pense qu'il a réussi à provoquer un DOS et arrête l'attaque. Bien sûr, il peut le comprendre mais cela lui prendra beaucoup plus de temps.