Não é possível adicionar um grande número de regras ao iptables

4

Eu fiz um script muito simples (echo no início, executa comandos, echos no final) para adicionar aproximadamente 7300 regras ao iptables bloqueando grande parte da China e da Rússia, no entanto, é possível adicionar aproximadamente 400 regras antes de dar o seguinte erro cada tentativa subsequente de adicionar uma regra a essa cadeia:

iptables: Unknown error 18446744073709551615

Eu até tentei adicionar regras manualmente depois e ele não me deixa adicioná-las (dá o mesmo erro).

O comando para adicionar cada regra é assim:

/sbin/iptables -A sshguard -s x.x.x.0/x -j DROP

sshguard é uma cadeia que criei para uso com o daemon sshguard , e eu queria adicionar as regras lá, então eu não estava está muddying a cadeia INPUT . As faixas de IP que estou fornecendo não são responsáveis por isso, pois eu forneci intervalos válidos para teste e eles são atendidos com o mesmo erro. Liberar a cadeia de regras e adicionar os trabalhos individuais, mas novamente, não depois de ~ 400 entradas.

Eu fiz um pouco de googling antes, mas os outros que têm esse problema não parecem estar tendo pelos mesmos motivos que eu.

Existe algum tipo de limite de regras por cadeia com o iptables? Além disso, essa é a maneira correta de bloquear essas faixas (erros à parte)?

# iptables -V
iptables v1.3.5

# cat /etc/issue
CentOS release 5.8 (Final)

# uname -a 
Linux domain.com 2.6.18-028stab101.1 #1 SMP Sun Jun 24 19:50:48 MSD 2012 x86_64 x86_64 x86_64 GNU/Linux

Editar: Para esclarecer, o script bash está executando cada comando iptables individualmente, não fazendo um loop através de um arquivo ou lista de IPs.

Além disso, meu objetivo de bloquear esses intervalos é preventivo. Estou tentando limitar a quantidade de bots que capturam, rastreiam ou tentam criar contas de spam em alguns de meus sites. Eu já estou usando sshguard para bloquear tentativas de força bruta no meu servidor, mas isso não ajuda com os outros bots, obviamente.

    
por Brendan 05.11.2012 / 02:36

4 respostas

2

OK, eu percebi isso.

Eu deveria ter mencionado que eu tinha um contêiner Virtuozzo para o meu VPS. O link menciona o seguinte:

Also it might be required to increase numiptent barrier value to be able to add more iptables rules:

~# vzctl set 101 --save --numiptent 400

FYI: O contêiner deve ser reiniciado para que isso tenha efeito.

Isso explica por que atingi o limite em torno de 400. Se eu tivesse o CentOS 6, instalaria o módulo ipset (EPEL) para iptables em vez de adicionar todas essas regras (porque ipset é rápido).

Como está agora, no CentOS 5.9, eu teria que compilar iptables > 1.4.4 e meu kernel para obter ipset . Como este é um VPS e meu host pode eventualmente atualizar para o CentOS 6, não vou prosseguir com isso.

    
por 29.01.2013 / 02:24
1

Não é difícil depurar, mas se você converter as regras em comandos puros do iptables, e executá-las uma por uma (use um shell script), você verá os erros, normalmente faltariam alguns módulos ipt.

Primeiro, use iptables-save para exportar as regras atuais e, em seguida, faça algo assim para depurar linha por linha:

egrep '^(-A|-I)' ok.rules | while read x; do iptables $x || { echo failed $x; break; }; done

Eu pesquisei um pouco no Google, parece ser um bug na configuração padrão do kernel do CentOS.

    
por 05.11.2012 / 04:16
1

Parece haver um bug aberto no RHEL sobre o iptables. Você pode estar acertando. link

Nesse meio tempo, você viu algo como denyhosts ? Ele adicionará entradas automaticamente a hosts.deny à medida que você for atacado (ataques ssh)

Apenas um pensamento.

    
por 05.11.2012 / 04:17
1

Para uma faixa grande ou considerável de ip, minha recomendação para você é usar ipset

Se você quiser bloquear um bloco inteiro de países, use o módulo de geoip para iptables .

    
por 30.03.2015 / 11:10