Precisa de uma explicação da regra iptables

1

Alguém pode me ajudar a entender a regra abaixo iptables?

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    
por H4X 01.12.2015 / 02:24

2 respostas

3

Radhil tem sido muito cauteloso ao excluir sua resposta, que está correta, embora precise de integração.

Primeiro, o significado literal da regra: cai (-j DROP) todos os pacotes que iniciam uma nova conexão (-m state --state NEW) que são não do tipo SYN (! --syn) para o protocolo TCP (-p tcp).

Em seguida, alguns comentários. No protocolo TCP, uma conexão é iniciada pela troca ritual de três pacotes, SYN (cliente para servidor) - > SYN / ACK (servidor para cliente) - > ACK (cliente para servidor). Uma conexão não iniciada pelo pacote SYN, como aquela descartada pela regra iptables acima, é uma maneira imprópria de estabelecer uma conexão que persegue objetivos diferentes, conforme corretamente apontado por radhil.

Esta regra é frequentemente, e incorretamente, considerada necessária para suprimir ataques de inundação de sin na Web: veja por exemplo esta página da Web , onde é explicitamente declarado:

The next pattern to reject is a syn-flood attack.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

SYN-Flood-Attacks means that the attackers open a new connection, but do not state what they want (ie. SYN, ACK, whatever). They just want to take up our servers' resources. We won't accept such packages.

Naturalmente, não faz sentido tentar desabilitar ataques de inundação-syn por aceitando (!!!!) pacotes SYN para novas conexões. E deve ser pacotes, não pacotes.

Os ataques de inundação sincronizada apresentam alguns problemas que ainda não estão completamente resolvidos. Isto levou ao desenvolvimento de um novo módulo iptables, chamado SYNPROXY, que você pode encontrar discutido aqui . A limitação de taxa é usada com freqüência, veja por exemplo aqui , mas isso gera problema mencionado na referência anterior, ie o módulo conntrack, que é necessário para acompanhar quais conexões são novas e quais são antigas e em qual estado, funciona sem falhas para um número limitado de conexões, mas consome desproporcionalmente quantidades de tempo quando o número de conexões aumenta (por exemplo, devido a um ataque de inundação por SYN). Isto é o que significa um problema de .

No geral, não está totalmente claro para mim que a regra iptables acima serve para qualquer propósito significativo.

    
por 01.12.2015 / 07:32
1

-A INPUT - anexar ao final da cadeia "INPUT"

-p tcp - corresponde ao protocolo TCP

! --syn - corresponde aos pacotes sem o sinalizador TCP SYN

-m state - use o módulo "state" (reprovado; novos conjuntos de regras devem usar "conntrack")

--state NEW - corresponde aos pacotes com o estado "NEW" (ou seja, não pertence a nenhuma conexão estabelecida)

-j DROP - pula para o alvo "DROP" (que é um alvo final que descarta o pacote)

Basicamente, os pacotes TCP abrem uma nova conexão (e sempre têm o sinalizador SYN) ou pertencem a uma conexão existente ou tentam fechar uma conexão abortada (com o sinalizador RST) ou são lixo. Portanto, essa regra tenta descartar pacotes dentro da última categoria, que não tenta abrir uma nova conexão nem pertence a uma existente.

IMHO isso é um pouco redundante ... Talvez seja para proteger contra vários tipos de portscan estranhos (como visto no nmap). Poderia ser apenas paranoia também.

    
por 01.12.2015 / 07:11

Tags