Назад | Перейти на главную страницу

tcp-флаги в iptables: в чем разница между RST SYN и RST и SYN RST? Когда использовать ВСЕ?

Я работаю над брандмауэром для виртуального выделенного сервера, и одна из вещей, которые я ищу, - это сканеры портов. Флаги TCP используются для защиты. У меня 2 вопроса.
Правило:

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

Первый аргумент говорит о проверке пакетов с флагом SYN Второй аргумент говорит, что установлены флаги ACK, FIN, RST SYN
И когда это так (есть совпадение), отбросьте пакет tcp

Первый вопрос:
Я понимаю значение RST и RST / ACK, но во втором аргументе используется RST SYN.
В чем разница между RST SYN и RST и SYN RST?
Есть ли флаг "SYN RST" в трехстороннем рукопожатии?

Второй вопрос о разнице между

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

и

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

Когда следует использовать ВСЕ?
Когда я использую ALL, означает ли это, что если для пакета tcp с флагом syn не установлены флаги ACK "," FIN "и" RST SYN ", совпадения не будет?

Думаю, вы перепутали этот переключатель.

В --tcp-flags switch принимает только два аргумента. Первый аргумент - какие флаги проверять. Второй аргумент - это флаги из первого аргумента, которые должны быть установлены для совпадения. Таким образом, ваша строка:

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

Говорит: "Соответствие, если только из этих четырех устанавливается флаг SYN. (Пробел разделяет первый и второй аргументы.)

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

означает проверить ВСЕ флаги и сопоставить эти пакеты с ничего кроме SYN установлен. Третий из ваших примеров - это плохой синтаксис, поскольку он дает три аргумента. Ваше первое правило будет отбрасывать все новые входящие TCP-соединения, что, вероятно, не то, что вам нужно.

Коммутатор в основном используется для отбрасывания пакетов с установленными бессмысленными флагами TCP. Например, вы не получите легитимные пакеты с установленными SYN и RST, например SYN и FIN. Возьмите этот фрагмент из одного из моих сценариев * брандмауэра:

${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

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

Больше информации на страница руководства.

* (Доработанная версия monmotha-2.3.8)

Это:

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

означает «посмотрите на флаги syn, ack, fin и rst и сопоставьте пакеты, у которых установлен флаг SYN, а все остальные не установлены»

Первый аргумент tcp-flags - это флаги, которые вы рассматриваете, второй аргумент - это маска, которую вы хотите сопоставить. если бы вы использовали

--tcp-flags SYN,ACK SYN

тогда он будет соответствовать пакетам с [SYN = 1 ACK = 0], но не будет соответствовать пакетам с [SYN = 1, ACK = 1] или [SYN = 0, ACK = 1] или [SYN = 0, ACK = 0]

В приведенном выше правиле вы сопоставляете только пакеты SYN.