iptables, ICMP e RELATED

5

Estou usando a seguinte regra de iptables simples que aceita pacotes relacionados :

-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Estou permitindo que as solicitações de eco ICMP passem com essa outra regra:

-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Devo adicionar explicitamente qualquer coisa para receber mensagens ICMP "úteis", como destination-unreachable , time-exceeded e parameter-problem , ou a cláusula RELATED já as aceitará?

    
por S19N 16.09.2014 / 18:05

5 respostas

4

link

Another hugely important part of ICMP is the fact that it is used to tell the hosts what happened to specific UDP and TCP connections or connection attempts. For this simple reason, ICMP replies will very often be recognized as RELATED to original connections or connection attempts. A simple example would be the ICMP Host unreachable or ICMP Network unreachable. These should always be spawned back to our host if it attempts an unsuccessful connection to some other host, but the network or host in question could be down, and hence the last router trying to reach the site in question will reply with an ICMP message telling us about it. In this case, the ICMP reply is considered as a RELATED packet

    
por 30.09.2014 / 11:42
5

A regra RELATED cuidará das mensagens ICMP associadas por padrão. De página man do iptables , na seção relacionada a conntrack ( link ):

RELATED meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error.

Outros estados relatados pela conntrack são:

  • INVALID significa que o pacote está associado a nenhuma conexão conhecida
  • ESTABLISHED significa que o pacote está associado a uma conexão que viu pacotes em ambas as direções
  • NOVO significa que o pacote iniciou uma nova conexão, ou de outra forma associado a uma conexão que não tenha visto pacotes em ambas as direções
  • SNAT Um estado virtual, correspondendo se o endereço de origem original for diferente do destino de resposta
  • DNAT Um estado virtual, correspondendo se o destino original for diferente da fonte de resposta

Você pode examinar e gerenciar a tabela conntrack usando o pacote conntrack .

$ sudo conntrack -L
    
por 01.10.2014 / 15:07
2

Em geral, é uma péssima idéia filtrar ou bloquear o icmp, geralmente o único bit "válido" do icmp para filtrar é o echo-request para "aparecer" em uma varredura ingênua.

Mas se você quiser permitir explícitas partes dele, você está perdendo pelo menos dois bits muito importantes, a fragmentação necessária & Quench de origem:

-A INPUT -p icmp --icmp-type fragmentation-needed -m state --state NEW -j ACCEPT
-A INPUT -p icmp --icmp-type source-quench -m state --state NEW -j ACCEPT

Deixe-me dizer novamente que filtrar o icmp é uma má ideia que irá mascarar problemas e dificultar a descoberta.

Esse foi o problema com o DF (não fragmentar) e a fragmentação necessária para a descoberta automática do PTMU e que os sites ficaram inacessíveis porque os firewalls / roteadores intermediários descartavam os pacotes icmp anunciando o terminal para reduzir o MTU. / p>     

por 04.10.2014 / 21:14
1

Eu adicionarei minha própria resposta para fornecer minha configuração final, inspirada por outras respostas e pelas seguintes fontes:

  1. um rascunho expirado do IETF com uma tabela útil que mostra qual ICMP tipos permitem, negam ou limitam o limite;
  2. outra página com as linhas mínimas para iptables e Cisco IOS;
  3. um terceiro recurso que usa RELATED :

    iptables -P INPUT DROP
    iptables -A INPUT -p icmp --fragment -j DROP
    iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    
por 07.10.2014 / 00:40
-1

O ICMP é um protocolo de conexão muito importante. A "solicitação de eco" é a única mensagem útil importante que ajuda na comunicação. O restante deles, incluindo "destino inacessível", pode ser bloqueado especialmente se o aplicativo em execução receber um grande número de ocorrências desconhecidas.

Você está melhor com algo assim,

-A INPUT -p icmp --icmp-type echo-request -m recent --set 
-A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 1 --hitcount 30 -j DROP 

-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

-A OUTPUT -p icmp --icmp-type destination-unreachable -j DROP
-A INPUT -p icmp -j DROP

Isso não só aceita "echo-request", mas também bloqueia floods de ping maiores que 30 pacotes / s. Qualquer outra coisa que você queira adicionar deve ser explicitamente aceita, porque a cláusula RELATED não os receberá, desde que a conexão seja estabelecida com a permissão.

    
por 05.10.2014 / 09:00

Tags