Флаги 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, совпадения не будет?

2 ответа

Решение

Это:

-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.

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

--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)

Другие вопросы по тегам