O bloqueio de todas as conexões fora dos EUA, além da porta 80, causará uma alta carga no servidor?

16

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?

Big Iron
fonte
12
É lamentável que o seu contato de hospedagem não tenha mencionado "Mas há uma maneira padrão do setor de fazer a mesma coisa que você deseja, com muito menos manutenção, melhor segurança e baixa carga do servidor, chamada Explicit Deny All. Me traga a lista de IPs necessários na lista de permissões e eu vou configurá-lo para você em 20 minutos. " - Isso é o que eu esperaria ouvir de qualquer valor sysadmin a cadeira que sentar-se.
corsiKa
apenas bloqueá-los quando eles abusam ... a manutenção é mínima desta forma ... com uma mesa cheia você tem que mantê-lo atualizado
Skaperen

Respostas:

33

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.

jlehtinen
fonte
Por que, se você sabe, é uma negação explícita de tudo quando você está negando implicitamente a todos, permitindo explicitamente apenas alguns IPs através do firewall?
Ben
Não há nada implícito sobre isso realmente ...
mr-sk
Uma preocupação potencial para a lista de permissões é o acesso remoto. Você precisará de uma VPN confiável (separada deste servidor) e também permitirá seu alcance de IP.
Foo Bar
9

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.

Michael Hampton
fonte
Obrigado pela resposta, Michael. Não existe uma maneira de permitir apenas IPs baseados nos EUA, necessitando apenas verificar uma regra?
Big
2
@ BigIron Claro que não. Existem também dezenas de milhares de netblocks nos EUA. Você perde de qualquer maneira.
Michael Hampton
11
@SamuelEdwinWard Não, não. Apesar de estarem espalhados por todo o lugar, geralmente essas listas de bloqueio não são mais do que algumas centenas de entradas.
Michael Hampton
11
Você tem uma referência de quão significativa é a desaceleração? Uma pesquisa linear, embora todos os conjuntos de regras pareçam ineficientes, pelo menos uma pesquisa binária significaria que a pesquisa em uma tabela de regras de 60.000 levaria apenas 16 análises na tabela e isso poderia ser mais rápido do que permitir que o tráfego fosse transmitido para o servidor da web precisa executar E / S de disco para atender à solicitação. Não consegui encontrar nenhuma métrica em grandes conjuntos de regras no iptables.
Johnny
11
Netfilter @Johnny (iptables) processos de TI de regras linearmente infelizmente: serverfault.com/questions/334885/...
Ross cume
5

O que você precisa é de uma ferramenta chamada ipsets

Os conjuntos de IPs são uma estrutura dentro do kernel do Linux, que pode ser administrada pelo utilitário ipset. Dependendo do tipo, atualmente um conjunto IP pode armazenar endereços IP, números de porta (TCP / UDP) ou endereços IP com endereços MAC de uma maneira, o que garante a velocidade da luz ao corresponder uma entrada a um conjunto.

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 :

Ricardo
fonte
1

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:

iptables -I INPUT -m geoip --src-cc CN -j DROP

Ou use --src-cc US -j ACCEPTe assim por diante, se você preferir especificar os países que deseja manter.

Scott Dudley
fonte
Isso não seria um desastre no desempenho, mesmo se você usar "negar tudo explicitamente" e permitir apenas um único país?
@ AndréDaniel, admito que não olhei para o código GeoIP em si, mas assumindo que eles usem uma implementação não ingênua que seja mais inteligente do que comparar sequencialmente um monte de netblocks (por exemplo, um trie), ele não precisa ser.
21415 Scott Dudley
E se você estiver falando sobre IPv4 e tiver 512 Mb de sobra por regra, uma implementação teórica usando uma tabela de pesquisa pode fazer o trabalho em O (1).
Scott Dudley
1

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.

sereno
fonte
0

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.

Dmitri DB
fonte