tcp flags no iptables: Qual é a diferença entre o RST SYN e o RST e o SYN RST? Quando usar ALL?

7

Estou trabalhando em um firewall para um servidor virtual dedicado e uma das coisas que estou investigando são os scanners de porta. Os sinalizadores TCP são usados para proteção. Eu tenho 2 perguntas.
A regra:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

Primeiro argumento diz verificar pacotes com bandeira SYN Segundo argumento diz que as bandeiras ACK, FIN, RST SYN estão definidas. E quando esse for o caso (há uma correspondência), descarte o pacote tcp

Primeira pergunta:
Eu entendo o significado de RST e RST / ACK, mas no segundo argumento RST SYN está sendo usado.
Qual é a diferença entre RST SYN e RST e SYN RST?
Existe um sinalizador "SYN RST" em um handshake de 3 vias?

A segunda pergunta é sobre a diferença entre

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP    

e

-p tcp --tcp-flags ALL SYN,ACK,FIN,RST SYN -j DROP    

Quando TODOS devem ser usados?
Quando eu uso ALL, isso significa que se o pacote tcp com o sinalizador syn não tiver o sinalizador ACK "e" o FIN "e" o sinalizador RST SYN definido, não haverá correspondência?

    
por Kris 31.03.2012 / 00:58

2 respostas

14

Isto:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

significa "veja os flags syn, ack, fin e rst e combine os pacotes que possuem o sinalizador SYN definido, e todos os outros não definidos"

O primeiro argumento do tcp-flags é o sinalizador que você está considerando, o segundo argumento é a máscara que você deseja combinar. se você estivesse usando

--tcp-flags SYN,ACK SYN

então corresponderia aos pacotes que possuem [SYN = 1 ACK = 0], mas não corresponderia aos pacotes que possuem [SYN = 1, ACK = 1] ou [SYN = 0, ACK = 1] ou [SYN = 0, ACK = 0]

Na sua regra acima, você está combinando somente pacotes SYN.

    
por 31.03.2012 / 01:30
16

Eu acho que você tem esse switch confuso.

A opção --tcp-flags aceita apenas dois argumentos. O primeiro argumento é quais sinalizadores devem ser verificados. O segundo argumento é o sinalizador do primeiro argumento que deve ser definido para uma correspondência. Assim sua linha:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

Está dizendo: "Corresponder se somente o sinalizador SYN estiver definido a partir desses quatro. (O espaço separa o primeiro e o segundo argumentos.)

-p tcp --tcp-flags ALL SYN -j DROP

significa verificar todos os flags e corresponder a esses pacotes com o conjunto SYN nada mais que . O terceiro dos seus exemplos é uma sintaxe ruim, já que fornece três argumentos. Sua primeira regra derrubaria todas as novas conexões TCP, o que provavelmente não é o que você deseja.

O switch é usado principalmente para descartar pacotes com flags TCP sem sentido definidos. Você não conseguiria, por exemplo, pacotes legítimos com o conjunto SYN e RST, por exemplo, ou SYN e FIN. Pegue este snippet em um dos meus * scripts de firewall:

${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,URG SYN,URG -j DROP

Eles verificam combinações específicas de sinalizadores TCP que nunca devem ocorrer naturalmente e descartam os pacotes.

Mais leituras na página do manual .

* (versão ajustada do monmotha-2.3.8)

    
por 31.03.2012 / 01:26