Правила 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 Retransmission]
маркеры выше). Если вы продолжите блокировать эти повторные передачи, поток станет десинхронизированным, соединение будет разорвано, и ничего в потоке не будет обработано.
Вы должны будете сделать это на прикладном уровне.
Редактирование обмена комментариями между двумя из нас (большая часть которого была с тех пор удалена) дало понять, что вопрос может содержать не все детали, которые он должен. Я рекомендую закрыть этот вопрос - либо примите мой ответ, либо удалите весь вопрос - и напишите новый, в котором вы подробно изложите, что именно происходит сейчас, как это происходит и чего вы хотите достичь.
Все, что я могу сказать сейчас, с некоторой уверенностью, это то, что вы не можете использовать iptables
вырезать один пакет из середины потока TCP и ожидать, что остальная часть этого потока будет правильно обработана принимающим приложением.