Como a maioria dos servidores (presumo), temos pessoas tentando fazer força bruta em nossos serviços 24 horas por dia, 7 dias por semana. Eu tenho o cpHulk na lista negra de seus IPs, mas parece que seria melhor se eles não chegassem tão longe em primeiro lugar. Eu e meu host somos os únicos que se conectam ao servidor em portas que não sejam 80, então eu gostaria de bloquear conexões de todos os países fora dos EUA, exceto a porta 80. Entrei em contato com meu host para configurar isso, mas eles hesitaram porque disseram que isso criaria uma carga de servidor excepcionalmente alta. É um servidor Xeon 1230 dedicado com 32 GB de RAM executando o CentOS 6.6 e iptables.
Primeiro, alguma razão para não fazer isso? Segundo, é o que meu anfitrião me disse correto? Terceiro, existe alguma maneira de fazer isso sem um impacto de alto desempenho?
Respostas:
Configurar regras específicas para bloquear todos os intervalos de IP (listando todos os intervalos) é a abordagem errada.
Defina as regras padrão no iptables para descartar todo o tráfego nas suas portas de gerenciamento. Em seguida, adicione regras para permitir apenas o acesso de seus IPs confiáveis (o seu e o seu host).
Bloquear tudo por padrão e permitir apenas o tráfego aprovado é geralmente chamado de "negar tudo explicitamente" e é considerado uma prática recomendada. Nesse caso, também ajuda a evitar o impacto no desempenho que preocupa o seu host.
fonte
Para fazer isso, você teria que adicionar dezenas de milhares de regras de firewall, uma para cada bloco de rede, onde um país pode ter de um a vários milhares de blocos de rede associados a ele.
Quando uma solicitação é recebida, ela deve ser verificada em todas as regras , o que leva muito pouco tempo para algumas dúzias ou talvez algumas centenas de regras, mas com tantas regras quanto você precisa usar (1) a cada a solicitação será significativamente reduzida e (2) usará muita CPU.
A maneira de fazer isso sem um impacto significativo no desempenho é fazendo o que você já está fazendo: bloqueando apenas os endereços específicos que estão sendo problemáticos.
fonte
O que você precisa é de uma ferramenta chamada ipsets
o importante a notar aqui é que é muito rápido! Isso ocorre porque um grande número de redes IP pode ser representado por um único hash, em vez de centenas ou milhares de linhas de regras de tabelas de ip.
Para países bloqueadores, veja este exemplo :
fonte
Ignorando um pouco sobre fazer ou não dessa maneira é uma boa idéia, você pode fazer o que pediu com o módulo GeoIP para iptables.
Após criar e instalar o módulo (e manter suas listas de IPs atualizadas mensalmente), você pode fazer coisas como esta para bloquear países individuais:
Ou use
--src-cc US -j ACCEPT
e assim por diante, se você preferir especificar os países que deseja manter.fonte
Se você quiser manter a capacidade de conectar-se de qualquer lugar sem manter uma lista negra / lista branca de localização geográfica, poderá implementar uma batida de porta . Pararia a maioria das tentativas automatizadas, permitindo que você ainda se conectasse a partir de qualquer endereço.
Nota: Não coloque a porta para bater ao lado da porta para abrir, caso contrário, uma varredura seqüencial de porta ativará sua regra.
fonte
Com a pouca chance de você ter um roteador habilitado para BGP ou dois na sua pilha E ter algum tipo de idéia de que diabos você está fazendo / trabalhar com alguém que sabe que diabos eles estão fazendo ou estão talvez por trás de um provedor de prevenção de DDoS seja legal o suficiente para ajudar na implementação disso, existe um método relativamente novo para restringir o tráfego para regiões geográficas chamado blackholing seletivo, que acho que vale a pena dar uma olhada.
https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf
http://mailman.nanog.org/pipermail/nanog/2014-February/064381.html
http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/
Como esse método funciona na manipulação das rotas, ignora qualquer problema de carga do servidor.
fonte