Apache de limite de taxa com lista negra e lista de permissões

2

Passei várias horas tentando configurar o iptables / ufw para fazer isso para solicitações HTTP manipuladas pelo Apache2:

Lista branca de um conjunto de intervalos de IP (bots do mecanismo de pesquisa) Adicionar IPs a uma lista de bloqueio de 24 horas após o X solicitar em Y segundos (idealmente, eu gostaria de definir três regras como essa)

Mas pareceu-me que não é possível fazer isso com o iptables, uma vez que só irá proibir IPs por um curto período de tempo.

Alguém sabe se é possível fazer o que delineei com o mod_security? Ou recomende algo que possa fazer isso? Qualquer trecho de código que faça algo semelhante seria bem-vindo.

    
por Kohjah Breese 11.11.2014 / 03:03

2 respostas

0

Um par de ajustes foram necessários sobre o acima. Isso funciona:

sudo ipset -N whitelist nethash
sudo ipset --add whitelist 68.180.228.175
sudo iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
sudo iptables -N BLOCK24
sudo iptables -A BLOCK24 -m recent --name blocked --set
sudo iptables -A INPUT -m state --state NEW -m recent --set
sudo iptables -A INPUT -m state --state NEW -m recent --update --seconds 20 --hitcount 20 -j BLOCK24
sudo iptables -A INPUT -m recent --name blocked --rcheck --seconds 86400 -j BLOCK24
sudo iptables -A BLOCK24 -j LOG --log-prefix='[NETFILTER] ' --log-level 7
sudo iptables -A BLOCK24 -j REJECT
    
por 28.12.2014 / 21:21
1

Tudo o que você está procurando está disponível no netfilter (e muito mais! ;-)).

A correspondência de um conjunto de intervalos de IPs à lista de permissões pode ser feita com ipsets e a extensão de correspondência "set":

ipset -N whitelist nethash

ipset --add whitelist 1.2.3.4/24

Em seguida, no iptables do netfilter:

iptables -A INPUT -m set --match-set whitelist src -j ACCEPT

Para bloqueio durante 24 horas, você precisa das extensões de correspondência "recentes" duas vezes: uma para verificar a taxa de entrada e outra para lembrar de fontes bloqueadas:

iptables -N BLOCK24
iptables -A BLOCK24 -m recent --name blocked --set

iptables -A INPUT -m recent --name beforeblock --rcheck --seconds 1 --hitcount 1 -j BLOCK24

Isto irá corresponder se dois pacotes em um segundo. E agora, para bloquear fontes, basta compará-las com a lista recente "bloqueada". Esta regra deve estar entre as primeiras regras do iptables.

iptables -A INPUT -m recent --name blocked --recheck --seconds 86400 -j DROP

O documento necessário está aqui: extensões iptables e ipsets . Claro, pode adicionar -p tcp --dport 80 se estas regras se aplicarem apenas a http.

    
por 11.11.2014 / 20:21