Por que não bloquear o ICMP?

50

Eu acho que quase tenho minha configuração do iptables completa no meu sistema CentOS 5.3. Aqui está o meu roteiro ...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

Para o contexto, esta máquina é um host de aplicativo da Web do Virtual Private Server.

Em uma pergunta anterior , Lee B disse que Eu deveria "bloquear um pouco mais o ICMP". Por que não apenas bloqueá-lo completamente? O que aconteceria se eu fizesse isso (que coisa ruim aconteceria)?

Se eu não precisar bloquear o ICMP, como eu poderia bloqueá-lo mais?

    
por Agvorth 15.11.2009 / 21:15

10 respostas

112

O ICMP é muito mais do que "traceroute" e "ping". Ele é usado para feedback quando você executa um servidor DNS (porta inacessível) que, em um servidor DNS moderno, pode realmente ajudar a selecionar uma máquina diferente para consulta mais rápida.

O ICMP também é, como foi mencionado acima, usado para a descoberta do caminho MTU. As chances são de seus conjuntos de SO "DF" (não fragmentar) nos pacotes TCP que ele envia. Ele espera obter um pacote ICMP "fragmentation required" de volta se algo ao longo do caminho falhar em lidar com esse tamanho de pacote. Se você bloquear todo o ICMP, sua máquina terá que usar outros mecanismos de fallback, que basicamente usam um timeout para detectar um "buraco negro" de PMTU e nunca otimizarão corretamente.

Além disso, você deve se perguntar por que deseja bloquear o ICMP. O que especificamente você está tentando evitar aqui? Está bem claro que você não entende o que o ICMP é usado, o que é bastante comum. Eu seria extremamente cauteloso em bloquear algo que você não entende completamente.

Para tornar ainda mais difícil aprender sobre isso, muitos livros de firewall comuns dizem "bloco ICMP" - está claro que seus autores nunca leram uma RFC ou tiveram que resolver questões relacionadas a esse tipo de conselho. É um mau conselho bloquear todo o ICMP.

Agora, limitar a taxa também pode prejudicar. Se a sua máquina estiver ocupada, ou mesmo se não estiver, você pode obter uma boa quantidade de tráfego ICMP. Meu servidor web provavelmente recebe cerca de 10-100 pacotes ICMP por minuto, a maioria dos quais é descoberta PMTU. Mesmo que alguém tenha optado por atacar meu servidor com pacotes ICMP de algum tipo, isso não é muito grande coisa. Se a sua máquina aceita até mesmo uma conexão TCP (ssh, http, mail, etc), as chances são de que seja um vetor de ataque maior do que o ICMP incompreensível será.

    
por 15.11.2009 / 21:56
25

O ICMP é usado para uma variedade de funções de diagnóstico (por exemplo, ping, traceroute) e controle de rede (por exemplo, detecção de PMTU). O bloqueio indiscriminado do ICMP faz com que outras pessoas tenham todo tipo de azia e, a menos que você saiba exatamente o que está fazendo, você deve deixá-lo em paz.

    
por 15.11.2009 / 21:29
14

Nunca entendi por que as pessoas acessam o ICMP, como dito acima, isso só causa dores de cabeça para você e para os outros. Você pode determinar se um host é fácil o suficiente e desde que seja limitado o suficiente para não ser usado como um DOS, então eu nunca ouvi nenhum motivo para bloqueá-lo. (Se alguém puder inventar um motivo, por favor poste)

    
por 15.11.2009 / 21:37
8

você poderia apenas tentar limitar o icmp, dessa forma, ele não pode ser usado como um ataque DOS. mas existem muitas ferramentas de solução de problemas, como ping, mtr (eu esqueço o windows equivalente), traceroute (tracert), que usam icmp. Soltá-los completamente é apenas tolice. É uma boa maneira de verificar se sua instância está ativa, mesmo que você não consiga fazer telnet em nenhuma porta.

--limit 10/second
para a (s) regra (s) icmp é provavelmente um limite decente, dado o quanto um computador pode realmente manipular.     
por 15.11.2009 / 21:28
6

Aqui está um ponto de vista alternativo, no espírito do que a teoria da segurança sugeriria. Outros cartazes estão certos de que a prática de segurança é muitas vezes excessivamente zelosa, mas há uma boa base para isso.

A teoria da segurança é geralmente que você só habilita o que você precisa. Outras coisas (que podem ser úteis - por exemplo, respostas de ping) podem ser usadas por um invasor para examinar seu sistema ou possivelmente como um vetor de ataque para alguma vulnerabilidade ainda a ser descoberta.

Então, olhando para os tipos de mensagem ICMP, o que você precisa para um funcionamento normal e adequado do seu sistema?

  • echo reply (ping) - não muito
  • destino inacessível - muitas informações úteis aqui. Desativar isso e você vai quebrar o acesso ao seu servidor para alguns clientes.
  • extinção da fonte - preterido desde 1995 e, aparentemente, removido das implementações do host desde (o mais tardar) 2005. tools.ietf.org/html/rfc6633#section-1.
  • redirecionamento - quase certamente não
  • anúncio de roteador & solicitação - não há necessidade se você configurar estaticamente suas rotas e puder ser usado para DoS. Eu bloquearia a menos que você saiba que precisa, e se precisar, talvez codifique uma regra para aceitar informações apenas dos possíveis roteadores conhecidos.
  • ttl excedido - não apenas para traceroute, informa que seu tráfego não está chegando ao destino

... e assim por diante. Se você realmente quiser entender isso, aprenda sobre os vários tipos de ICMP e para que servem. O artigo da wikipedia é um bom ponto de partida.

Na prática, o realmente feio é redirecionar; se você quiser apenas fazer algo rápido e útil, bloqueie isso e permita o descanso.

Gostaria de acrescentar que o rastreamento de conexão IPtables permitirá que os pacotes ICMP de retorno apropriados para conexões ativas. Portanto, se você estiver executando o conntrack, poderá bloquear a maior parte da entrada ICMP, contanto que esteja aceitando pacotes RELACIONADOS (antes de bloquear o ICMP no conjunto de regras).

    
por 07.12.2012 / 17:32
4

É uma ferramenta de diagnóstico útil para resolver problemas de conectividade de rede.

Ele também permite que você use conexões em outros lugares na Internet que usem MTUs menores do que na sua rede. Se você tentar enviar um pacote em algum lugar que seja muito grande e não puder ser fragmentado, o dispositivo descartará o pacote e enviará um pacote de fragmentação ICMP de volta ao remetente. Se você eliminar todos os pacotes ICMP, você perderá esses e coisas estranhas acontecerão na sua rede.

A verdadeira questão é "por que bloquear o ICMP?" O que você ganha? Basta ter boas regras de filtragem na sua fronteira e em frente aos seus ativos valiosos.

    
por 15.11.2009 / 21:37
3

ping é uma boa ferramenta de diagnóstico, você realmente gostaria que tivesse um dia. Eu estou usando estes:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

você também pode querer acelerá-lo.

    
por 15.11.2009 / 21:19
2

Hoje em dia, mesmo limitar os pacotes ICMP no lado do servidor pode criar dor de cabeça em ataques DDoS. Ataques feitos principalmente através do envio de solicitações ICMP janela enorme para um servidor e se o servidor está tentando responder a cada um deles, adivinha o que acontece?

A principal coisa é que temos um servidor de timespeak que recebe pacotes ruins a cada dia, em alguns meses em alguns meses tivemos alguns "freetimes". O que fizemos foi completamente desativado / bloqueado ICMP responde, não temos nenhum servidor DNS no servidor, nenhum servidor NTP, nenhum servidor de email, nenhum servidor FTP, apenas dois apache e teamspeak. todas as portas desnecessárias para os serviços estão desativadas. Estamos planejando bloquear até mesmo o ssh e deixar apenas duas portas abertas. Hoje há 21k (!) Proibições permanentes.

A situação é que os atacantes usam principalmente tunelamentos ICMP e poucas linhas de log realmente interessantes foram discutidas com os administradores do servidor e eles disseram que eles têm solicitações ICMP do servidor, então os atacantes usaram isso para encapsular o ataque e nos atacar. Soa estranho, mas isso é verdade.

Se você não precisa de diagnóstico do seu servidor e se você é capaz de bloquear completamente os pedidos ou filtrá-los para soltar janelas enormes, por exemplo, faça-o. Eu também sugiro que você bloqueie completamente: China, Coréia, Tailândia, Turquia, porque a maioria dos endereços IP vem de lá. Eu tinha listas inteiras desses países, mas quase todos os dias vêm alguns novos de lá.

Eu digo o que faço, se você não concorda - não faça isso. Simples assim. Boa sorte

    
por 10.12.2014 / 07:52
0

No mínimo, você deve permitir passar tipos icmp 3 (destino inacessível), 4 (extinção de fonte) e 11 (tempo excedido). Todos esses tipos são usados para lidar com problemas de rede e não devem ser filtrados.

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(O tipo de extinção de origem está suspenso no momento, mas não vai doer deixar isso aberto)

    
por 13.08.2016 / 14:44
-2

Eu permito o tráfego ICMP da intranet local, bloquei-o da Internet. Dessa forma, meu servidor fica praticamente invisível on-line (responde apenas em uma porta SSH não padrão).

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

Isso é inserido após a lista de desbloqueio padrão, a lista de desbloqueio de LAN estabelecida, a lista de permissões do provedor de VOIP e a porta SSH ACCEPTs. Eu permito o tráfego que quero e depois faço o meu melhor para manter o servidor invisível para o resto do mundo.

    
por 30.09.2011 / 00:09