Temos vários servidores web Apache 2.4 atrás de um balanceador de carga e front-end CDN - onde o HTTPS é encerrado - vemos o IP do cliente nos cabeçalhos do front-end nos logs do back-end do Apache. Estou me perguntando se é viável usar a correspondência de strings do iptables (nas máquinas do servidor web) para bloquear IPs com base apenas em um cabeçalho específico, ou seja, aquele com o ip do cliente dentro?
Nosso kernel Linux é recente e nosso módulo de kernel iptables foi compilado com: CONFIG_NETFILTER_XT_MATCH_STRING=m.
Eu li que pode consumir muito da CPU e talvez ter consequências indesejadas se a correspondência da string corresponder além do cabeçalho específico que contém o IP do cliente. Ou que existem ferramentas melhores para conseguir isso, como um proxy, mas eu ainda gostaria de saber mais sobre as experiências de outras pessoas usando o recurso de correspondência de strings do iptables com o Apache e talvez o fail2ban.
Idealmente, o Apache teria algo como 444 do nginx. Sou capaz de fornecer IPs 403scom base na correspondência do IP em um cabeçalho, mas uma queda de conexão 444 parece de nível inferior (mais abrupta/desejável) e menos intensa em termos de recursos versus 403; Eu me pergunto - é isso? Talvez um 444 consuma mais recursos do que um 403?
Obrigado por qualquer ideia!
Responder1
Não há solução fácil quando o fail2ban e a lógica associada estão em execução nos servidores back-end.
Eu acho que o primeiro passo seria usar o Apachemod_remoteip; então, os logs do Apache no servidor back-end conterão os IPs reais do cliente, em vez do endereço IP do seu front-end/seu balanceador de carga:
O Apache por padrão identifica o useragent com o
client_ip
valor da conexão, e a conexãoremote_host
éremote_logname
derivada desse valor. Esses campos desempenham uma função na autenticação, autorização e registro e outras finalidades por outros módulos carregáveis.mod_remoteip substitui o IP do cliente da conexão pelo IP do agente do usuário anunciado, conforme fornecido por um proxy ou balanceador de carga, durante a solicitação. Um balanceador de carga pode estabelecer uma conexão de manutenção de atividade de longa duração com o servidor, e cada solicitação terá o IP do agente do usuário correto, mesmo que o endereço IP do cliente subjacente do balanceador de carga permaneça inalterado.
Então você pode facilmente executar o fail2ban nos arquivos de log do Apache para identificar IPs ofensivos
Você precisará então de umpersonalizadoe fail2ban adequadoação de proibiçãoque, quando emitido a partir de um servidor back-end, bloqueará o IP infrator. Isso pode ser, por exemplo, uma chamada de API para o firewall na frente do seu front-end que adiciona o IP incorreto a uma lista de bloqueios ou algo assim.