Флаги 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)