Normalmente você registraria as falhas no nível do aplicativo e teria um utilitário como, por exemplo, fail2ban analisar os logs e gerar / gerenciar regras de firewall.
Eu configurei um firewall com o iptables para restringir conexões com base no conteúdo. Segue-se um exemplo de uma das minhas regras que pára os ataques de força bruta do wordpress.
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --set --name wp_brute --rsource
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --name wp_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="Wordpress Attack:"
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --name wp_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset
Estou tentando obter outra regra que é um pouco complicada, pois desejo bloquear com base no pacote de resposta de uma conexão de entrada. Por exemplo, se alguém tentar fazer o login usando pop3 e a resposta for falha na autenticação, eu quero bloquear o IP original. No entanto, a regra acima não funcionará obviamente porque o esporte é o original.
Eu tentei isso, mas acho que deveria ser a tabela de saída, não a tabela de entrada.
iptables -A INPUT -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --set --name pop3_brute --rsource
iptables -A INPUT -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="POP3 Attack:"
iptables -A INPUT -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset
Então eu tentei isso
iptables -A OUTPUT -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --set --name pop3_brute --rsource
iptables -A OUTPUT -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="POP3 Attack:"
iptables -A OUTPUT -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset
Eu sou um pouco novo no iptables, então tenho um pequeno problema para descobrir como bloquear o IP remoto com base no pacote de resposta que retorno a ele em um contador de visitas.
Normalmente você registraria as falhas no nível do aplicativo e teria um utilitário como, por exemplo, fail2ban analisar os logs e gerar / gerenciar regras de firewall.
Já faz algum tempo; no entanto, o wp usa SSL na página de login, não é? Em vez disso, você configurou o SSL? Eu digo isso devido a onde o iptables fica na pilha.
Se você acessou a página de login e constatou que ela está usando SSL de qualquer maneira, as regras abaixo não poderiam corresponder a nenhuma string que você possa configurar. O SSL seria tratado pelo apache, não pelo netfilter. Então, iptables só estaria vendo rabiscos.
Você seria mais bem atendido colocando muita coisa em um arquivo vhost ou htaccess para corresponder no POST usando uma exclusão para o seu endereço. Sugiro diretamente na entrada do vhost (supondo que você esteja usando vhost), já que ele apenas o lê no carregamento do vhost. A opção htaccess, comum em hospedagem compartilhada, será verificada sempre que houver uma chamada para a correspondência no bloco htaccess. Durante uma força bruta em uma conta de hospedagem compartilhada, você pode gerar alguma carga.
Mais uma vez, já faz algum tempo desde que eu mexi com WP.
Quanto ao jogo pop3, você já tentou fazer um brute enquanto assistia ao tcpdump? Algo como:
tcpdump -xxV port 110
Fazer o acima daria EXATAMENTE o que o iptables será capaz de combinar. Gostaria de verificar link para alguns indicadores.
Tags networking iptables firewall