Правила iptables для блокировки определенных пакетов

Правила iptables для блокировки определенных пакетов

Я использую следующее правило iptables:

iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH,ACK -m length --length 52 -m state --state ESTABLISHED -j DROP

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

Вот пакеты, перехваченные Wireshark:

unwanted packet:source=192.168.0.100    destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62401→38111 [PSH, ACK] Seq=15 Ack=19 Win=65536 Len=12

needed packet:source=192.168.0.100  destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62433→38111 [PSH, ACK] Seq=344 Ack=37855 Win=62825 Len=12

Мой вопрос в том, как изменить правило, чтобы разрешить нужный пакет и заблокировать нежелательный.

решение1

Вы не можете сделать это на уровне брандмауэра (ну, вы можете - но это не даст того, что вы думаете, и того, чего вы хотите). Второй пакет (который вы хотите) является частью того же потока TCP, что и первый пакет (который вам не нужен), и TCP - надежный механизм доставки. Это означает, что ОС знает, если пакет в середине потока пропал (благодаря порядковому номеру в заголовке каждого пакета, см. напримерhttp://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structureЧтобы получить больше информации).

Если вы отфильтруете пакет в середине потока, ядро ​​просто продолжит сообщать другому концу, что пакет отсутствует, и другой конец продолжит его ретранслировать (поведение, которое вы уже видите, обратите внимание на маркеры [TCP Retransmission]выше). Если вы продолжите блокировать эти ретрансляции, поток станет десинхронизированным, соединение будет разорвано, и ничего в потоке не будет обработано.

Это придется сделать на уровне приложения.

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

Все, что я могу сейчас сказать с некоторой уверенностью, это то, чтонельзя использовать iptablesдля вырезания одного пакета из середины потока TCP и ожидать, что остальная часть этого потока будет правильно обработана принимающим приложением.

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