Atraso quando as regras do iptables icmp entram em vigor

3

Eu configurei meu iptables para desabilitar todas as conexões de entrada, ou seja,

:INPUT DROP [0:65535]

Quando o iptables foi iniciado, eu corro o seguinte comando para ativar o ping:

/usr/sbin/iptables -A INPUT -m icmp --icmp-state 8 -j ACCEPT
/usr/sbin/iptables -A INPUT -m icmp --icmp-state 0 -j ACCEPT

Eu vi as regras do iptables serem adicionadas a partir de /etc/init.d/iptables status . Eu posso fazer ping no dispositivo do Windows e do Linux. Agora eu corro o seguinte comando para removê-los:

/usr/sbin/iptables -D INPUT -m icmp --icmp-state 8 -j ACCEPT
/usr/sbin/iptables -D INPUT -m icmp --icmp-state 0 -j ACCEPT

Eu vi que as regras do iptables foram removidas de /etc/init.d/iptables status . Eu não posso pingar o dispositivo do PC Linux que é esperado. No entanto, posso fazer ping no dispositivo do Windows PC por 1-2 minutos e depois não posso fazer o ping depois.

Eu não faço ping no dispositivo indefinidamente (ou seja, sem -t) no meu PC com Windows XP, mas por que obtenho esses resultados?

    
por chesschi 15.08.2014 / 17:57

3 respostas

1

De todas as informações que você forneceu, eu apenas acho que quando você exclui as regras, o endereço IP do seu PC Linux não está mais em iptables conntrack table , então seu tráfego é descartado. O endereço IP do PC do Windows ainda pode aparecer na tabela conntrack, portanto, seu tráfego é aceito.

iptables processa cada regra, de cima para baixo. Portanto, a ordem das regras definidas em iptables é muito importante. No seu caso, sua corrente INPUT se parece com:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.0/255.0.0.0 -j ACCEPT
....
-A INPUT -m icmp --icmp-state 8 -j ACCEPT
-A INPUT -m icmp --icmp-state 0 -j ACCEPT

Para que você possa ver, mesmo se você excluir ICMP rules, se a conexão do cliente estiver na tabela conntrack, ela ainda será aceita por iptables .

Você pode ler sobre iptables conntrack table aqui :

When a connection has seen traffic in both directions, the conntrack entry will erase the [UNREPLIED] flag, and then reset it. The entry that tells us that the connection has not seen any traffic in both directions, will be replaced by the [ASSURED] flag, to be found close to the end of the entry. The [ASSURED] flag tells us that this connection is assured and that it will not be erased if we reach the maximum possible tracked connections. Thus, connections marked as [ASSURED] will not be erased, contrary to the non-assured connections (those not marked as [ASSURED]). How many connections that the connection tracking table can hold depends upon a variable that can be set through the ip-sysctl functions in recent kernels. The default value held by this entry varies heavily depending on how much memory you have. On 128 MB of RAM you will get 8192 possible entries, and at 256 MB of RAM, you will get 16376 entries. You can read and set your settings through the /proc/sys/net/ipv4/ip_conntrack_max setting.

    
por 15.08.2014 / 18:32
1

O iptables mantém algum estado sobre as conexões anteriores / atuais que podem fazer com que as mudanças que você faz no iptables pareçam ter um atraso na aplicação. Para ver e manipular o estado, você primeiro precisa ter o conntrack instalado:

sudo apt-get conntrack

Com isso, você pode enviar

sudo conntrack -L

para ver uma lista de conexões anteriores / atuais no estado.

Você pode limpar completamente este estado executando

sudo conntrack -F

No entanto, isso eliminará todas as conexões abertas no momento, mesmo se as regras atuais em vigor ainda permitirem. Você pode ser mais refinado com o que você pode remover da tabela de estados. Executar

sudo conntrack

para obter ajuda básica sobre o comando. Você normalmente está lidando com a tabela "conntrack", na qual o comando opera se a tabela não estiver especificada. Por exemplo, para meu caso de uso de ligar ou desligar um NAT, eu executava

sudo conntrack -D --any-nat

depois de emitir o comando iptables apropriado para ativar ou desativar o nat.

    
por 11.04.2017 / 17:27
0

Você pode bloquear explicitamente o protocolo ICMP adicionando a regra no início do seu conjunto de regras:

iptables -I INPUT -p icmp -j DROP

Uma coisa a notar é que a regra RELATED, ESTABLISHED deve ser a última regra do seu conjunto de regras. Caso contrário, o estado ESTABLISHED corresponderá aos pacotes que se destinam a corresponder a outras regras, acabando por eliminar os seus contadores e tornando a depuração um pesadelo, como o que está a experimentar atualmente

    
por 15.08.2014 / 20:31