Я работаю над брандмауэром для виртуального выделенного сервера, и одна из вещей, которые я ищу, - это сканеры портов. Флаги 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.