Alguns dos IPs estão abrindo milhares de conexões do meu servidor. Eu tenho um servidor Ubuntu 14. Verifico o total de conexões usando o seguinte comando:
netstat -an | grep tcp | awk '{print $ 5}' | corte -f 1 -d: | classificar | uniq -c | classificar -n
Então eu uso a seguinte regra do iptables para bloquear o IP culpado.
iptables -I ENTRADA 1 -s xxxx -j DROP
Funciona bem e bloqueia o endereço IP. No entanto, não consigo ficar online 24/7 para monitorar o servidor. Eu queria saber se existe algum script do Shell que eu possa usar para fazer isso automaticamente? Por exemplo, se um IP abrir mais de um número X de conexões a qualquer momento, ele deverá ser automaticamente banido pela regra acima do iptables.
command-line
scripts
iptables
connection
user3404047
fonte
fonte
Respostas:
Primeiro de tudo, não reinvente a roda. É exatamente
denyhosts
para isso:Até onde eu sei,
denyhosts
é apenas parassh
conexões, mas também háfail2ban
praticamente tudo:Ambos estão disponíveis nos repositórios:
Você também pode escrever isso, se quiser. Algo como:
Ele
awk
extrairá os IPs e os contará e imprimirá apenas aqueles que aparecerem mais que omax
tempo (aqui-vmax=100
, altere-o de acordo). Os IPs são então alimentados para um loop while que executa aiptables
regra relevante .Para executar isso 24/7, eu faria um cronjob que executa o comando acima a cada minuto ou mais. Adicione esta linha a
/etc/crontab
fonte
fail2ban
não é apenas para ssh. Ele também funciona muito bem para a porta 80. Ver, por exemplo aqui , aqui e aqui .Uma opção alternativa possível é identificar e lidar com os endereços IP do problema, todos dentro do conjunto de regras do iptables, usando o
recent
módulo O desafio desse método é o limite de contagem de ocorrências padrão de 20, portanto, é necessário desviar-se dos padrões ou criar contadores de transporte de nível mais alto para obter um ponto de disparo de contagem de ocorrências mais alto.O exemplo abaixo é do meu conjunto de regras do iptables e banirá um endereço IP por pouco mais de um dia se ele fizer 80 novas conexões TCP na porta 80 em menos de 12 minutos. Uma vez na lista de bandidos, qualquer tentativa de conexão redefinirá o contador de 1 dia para 0. Esse método pode atingir o máximo de 400 ocorrências antes que a expansão para outro transporte seja necessária (e eu testei outra cadeia de transporte). Observe que o código postado tem a infraestrutura para ser usada para banir apenas por um longo período de tempo após vários disparadores de tempo mais curto. Atualmente, eu tenho que definir para banir por um longo tempo após o primeiro gatilho.
fonte