iptables reject-with tcp-reset без флага ACK

iptables reject-with tcp-reset без флага ACK

Я создал iptablesправило:

iptables -I INPUT -p tcp --tcp-flags SYN,RST,ACK,FIN SYN --dport 10000 -j REJECT --reject-with tcp-reset

Но на самом деле это приводит к отклонению всех пакетов с флагами RSTи ACK.

Можно ли отклонить только с RSTустановленным флагом?

Я знаю, что в обычных условиях это не имеет никакого смысла, но у меня есть лаборатория, и мне нужно сделать именно так, как описано.

решение1

Я в Китае, поэтому прежде чем я это сделаю dig +tcp twiter.com @1.1.1.1, мне нужно сделать эти 2 строчки:

sudo iptables -A INPUT -p tcp -s 1.1.1.1/32 --tcp-flags ALL RST,ACK -j DROP
sudo iptables -A INPUT -p tcp -s 1.1.1.1/32 --tcp-flags ALL RST -j DROP

Тогда я получу правильный ответ:

;; ANSWER SECTION:
twitter.com.        204 IN  A   104.244.42.65

Если я выполню только первую iptablesкоманду, мой dig завершится неудачей:

";; communications error to 1.1.1.1#53: connection reset"

Великий китайский файрволстранно...

решение2

Чтобы отбросить входящие пакеты RST,

  iptables -I INPUT -p tcp --tcp-flags ALL RST,ACK  --dport 10000 -j DROP

Чтобы отбросить исходящие пакеты RST,

  iptables -I OUTPUT -p tcp --tcp-flags ALL RST,ACK --dport 10000 -j DROP

БЮР:

URL-адрес:https://networkengineering.stackexchange.com/questions/2012/why-do-i-see-a-rst-ack-packet-instead-of-a-rst-packet

RST/ACK не является подтверждением RST, так же как SYN/ACK не является подтверждением SYN. ​​Установление TCP на самом деле является четырехсторонним процессом: инициирующий хост отправляет SYN принимающему хосту, который отправляет ACK для этого SYN. ​​Принимающий хост отправляет SYN инициирующему хосту, который отправляет ACK обратно. Это устанавливает связь с отслеживанием состояния.

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

Чтобы сделать этот процесс более эффективным, принимающий хост может подтвердить SYN и отправить свой собственный SYN в том же пакете, создавая трехсторонний процесс, который мы привыкли видеть.

SYN -->
    <-- SYN/ACK
ACK -->

В случае RST/ACK устройство подтверждает все данные, отправленные в предыдущем пакете(ах) в последовательности, с помощью ACK, а затем уведомляет отправителя о том, что соединение закрыто с помощью RST. Устройство просто объединяет два пакета в один, как SYN/ACK. RST/ACK обычно не является нормальным ответом при закрытии сеанса TCP, но это также не обязательно указывает на проблему.

Связанный контент