Como fazer as regras do iptables expirarem?

17

Alguém me disse que isso é possível, mas não consigo encontrar nada no google ou em man pages.

Preciso proibir os IPs por um determinado período de tempo e, em seguida, desbanço-os automaticamente.

    
por HappyDeveloper 24.05.2011 / 20:18

8 respostas

16

Se você quer dizer que o iptables remove completamente a regra por si só, você não será capaz de fazer isso, até onde eu sei. Qual é o propósito disso? Se você precisar de algum tipo de banimento temporário automático, a solução padrão é fail2ban .

Como alternativa, você pode usar um cron job para remover a regra que está adicionando ou, melhor, se quiser interativamente, um trabalho at :

iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm 

Veja também o módulo recent do iptables. Isso com sua opção --seconds pode ser útil, dependendo das suas necessidades reais. man iptables para mais informações.

    
por 24.05.2011 / 20:26
8

Coloque um comentário com um carimbo de data e hora (provavelmente segundos desde a época) nas regras. Periodicamente, varra as regras expiradas.

Note que o kernel linux mais recente tem suporte para carregamento dinâmico de endereços IP em um cache consultado por regras de iptable em vez de como regras iptables diretas.

Exemplo:

iptables  -A INPUT -s 192.168.200.100/32 -m comment --comment "expire='date -d '+ 5 min' +%s'" -j DROP 
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'

Você pode, é claro, iptables -D INPUT $1 em vez de imprimir o comando.

    
por 24.05.2011 / 20:25
4

O iptables possui um método para adicionar automaticamente endereços IP a uma lista se as condições definidas pelo usuário forem atendidas. Eu uso o seguinte para ajudar a evitar tentativas de invasão automatizadas na minha porta ssh:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP

Isso ajuda a limitar as tentativas automatizadas de obter acesso ao servidor, limitando as tentativas de conexão do mesmo endereço IP a uma a cada 60 segundos.

Se você quiser permitir um número definido de tentativas em um período de tempo, como 4 em 5 minutos, e em caso de falha, coloque-as na lista negra por um período mais longo, como 24 horas, por exemplo:

iptables -X black
iptables -N black
iptables -A black   -m recent --set   --name blacklist   -j DROP

iptables -X ssh
iptables -N ssh
iptables -I ssh 1   -m recent --update    --name blacklist   --reap   --seconds 86400     -j DROP
iptables -I ssh 2   -m recent --update    --name timer       --reap   --seconds   600     --hitcount 4   -j black
iptables -I ssh 3   -m recent --set       --name timer   -j ACCEPT

iptables -A INPUT   -p TCP --dport ssh   -m state --state NEW -j ssh

Acima, criamos duas cadeias; "ssh" e "preto" e 2 listas; "temporizador" e "lista negra".

Resumidamente; a última corrente mostrada acima é a "entrada" na corrente ssh.

  • A regra 1 na cadeia ssh verifica se o IP de origem está na lista "blacklist". Em caso afirmativo, a conexão é interrompida e o cronômetro da lista negra de 24 horas é reiniciado. Se a regra 1 é falsa, então vamos para a regra 2.
  • A regra 2 na cadeia ssh verifica se o IP de origem fez mais de 4 tentativas de conexão em 5 minutos. Se assim for, ele envia o pacote para a cadeia "preto", onde é adicionado à lista "lista negra". A corrente "preta", em seguida, desativa a conexão e terminamos.
  • A regra 3 da cadeia "ssh" só é alcançada se as regras 1 e 2 forem falsas. Em caso afirmativo, o pacote é ACEITO e o IP de origem é adicionado à lista "timer" para que possamos monitorar a frequência de tentativa de conexão.

A opção "--reap" diz ao kernel para procurar na lista e limpar quaisquer itens que sejam mais antigos que o limite de tempo definido; 5 minutos para a lista "temporizador" e 24 horas para a lista "lista negra".

nota: os espaços extras são para legibilidade e são opcionais no seu script de shell.

    
por 09.09.2013 / 08:24
3

O IPTables possui um recurso feito expressamente para isso: IP Set. Você faz a regra uma vez e ela persiste como sempre, mas verifica em um conjunto de ips (ou portas) para correspondências. O legal é que esse conjunto pode ser atualizado de forma dinâmica e eficiente sem atrapalhar o resto do firewall.

O principal site , exemplos .

Então, para usá-lo, você ainda teria que usar at ou cron para agendar a remoção.

    
por 24.05.2011 / 20:58
2

Você pode usar o fail2ban para proibir endereços IP e configurar o período de tempo em que um endereço será banido para.

    
por 24.05.2011 / 20:27
1

Como alguém já disse: Você deve usar o ipset para esse recurso.

ipset pode adicionar endereço IP com valor de tempo limite. Quando o tempo limite terminar, o registro será removido automaticamente do ipset.

timeout All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example: ipset create test hash:ip timeout 300 ipset add test 192.168.0.1 timeout 60 ipset -exist add test 192.168.0.1 timeout 600

link

Esta é a maneira preferida de controlar esse comportamento.

    
por 02.08.2016 / 11:56
0

I need to ban IPs for a certain amount of time, and then have then unbanned automatically.

Você pode tentar o seguinte

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP
    
por 09.09.2013 / 10:08
0

Dependendo do que exatamente você deseja realizar, os últimos módulos de tempo do netfilter ser usado para realizar isso.

Ambos estão documentados na página do manual iptables .

    
por 25.05.2011 / 02:10