Перейти к содержимому
Калькуляторы

iptables + tcp flag

Всем салют, мучает вопрос с правила iptables + tcp flag

из официально прочитанного мануала как-то я до сих пор не догоняю как правильно писать правила с различными флагами, подскажите плиз, кто разобрался с этим)

Для примера есть такого рода правила, которые гуглятся везде, но мне пока ещё не совсем понятны:

 

/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

 

как бы есть офицbальный мануал по этим флагам:

 --tcp-flags mask comp
       Match  when  the TCP flags are as specified.  The first argument mask is the flags which we should
       examine, written as a comma-separated list, and the second argument comp is a comma-separated list
       of flags which must be set.  Flags are: SYN ACK FIN RST URG PSH ALL NONE.  Hence the command
        iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
       will only match packets with the SYN flag set, and the ACK, FIN and RST flags unset.

Что здесь является первым аргументом?, то что идет сразу после --tcp-flags и до первой запятой? а следующий аргумент это все остальное?
Для примера возьму в разбор это правило iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

Что я тут проверяю? пакет с установленным флагом FIN и неустановленными влагами RST FIN,RST?

Изменено пользователем Владимир320

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 минуты назад, Владимир320 сказал:

Для примера возьму в разбор это правило iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

Что я тут проверяю? пакет с установленным флагом FIN и неустановленными влагами RST FIN,RST?

Два списка разделяются пробелом. Из первого списка должны быть установлены те и только те флаги, которые перечислены во втором. В данном случае проверка на взаимоисключающие флаги FIN и RST, они не должны быть установлены одновременно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С чего это я перестал мочь отвечать с цитированием в этом форуме???? не работает кнопка.

 

Ок, если взять правило из мана:

--tcp-flags SYN,ACK,FIN,RST SYN

зачем нам рассматривать пакеты с флагами SYN,ACK,FIN,RST в котором должен быть установлен тока SYN. Как вообще формируется первый список? У меня же в голове что я могу написать какие флаги установлены и далее дропать или нет

 

Изменено пользователем Владимир320

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, Владимир320 сказал:

--tcp-flags SYN,ACK,FIN,RST SYN

Возьми ВСЕ пакеты, где есть ЛЮБОЙ из флагов SYN,ACK,FIN,RST, примени ДЕЙСТВИЕ к пакетам в которых есть ТОЛЬКО флаг SYN

 

Соответственно, мутанты с несколькими флагами одновременно пойдут ДАЛЬШЕ по цепочке

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а в этом случаем? --tcp-flags ALL FIN,PSH,URG -j DROP - тое есть берем все пакеты где есть любой из флагов и дропаем где есть один из трех FIN,PSH,URG?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

23 часа назад, Владимир320 сказал:

--tcp-flags ALL FIN,PSH,URG -j DROP

Установлены флаги FIN,PSH,URG и сняты любые другие (в данном случае syn/ack/rst)

Изменено пользователем ixi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

Установлены флаги FIN,PSH,URG и сняты любые другие (в данном случае syn/ack/rst)

а тут разве не один из трех установлен? Или правильней любые из FIN,PSH,URG установлены 

Изменено пользователем Владимир320

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

21 час назад, Владимир320 сказал:
Цитата

Установлены флаги FIN,PSH,URG и сняты любые другие (в данном случае syn/ack/rst)

а тут разве не один из трех установлен? Или правильней любые из FIN,PSH,URG установлены 

Нет.

 

Если вам интересно, зачем нужен фильтр для именно этой комбинации флагов, погуглите. Заодно и решите, нужна ли она вам.

Изменено пользователем ixi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

Нет.

 

Если вам интересно, зачем нужен фильтр для именно этой комбинации флагов, погуглите. Заодно и решите, нужна ли она вам.

данная комбинация флагов мне не нужна) Мне нужно понять как эти правила работают)
допустим такое правило 

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

тут дропаем трафик с установленными флагами syn,fyn, а как понять первую часть правила?? так как если ваершарком  развернуть пакет, то там всегда будут все флаги и установлены тока некоторые, в зависимости от трафика

image.png.25043451cfb4e2df650c08b9d0e6bde1.png

в чем тогда разница если я напишу такие  правила:

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

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

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

 

мы по сути всегда смотрим в покет со всеми флагами, но выбираем тока нужные установленные флаги. Либо я чет не понимаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 15.12.2023 в 15:45, Владимир320 сказал:

в чем тогда разница если я напишу такие  правила:

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

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

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

1 syn/fin=1, urg/ack/psh/rst=любые

2 syn/fin=1, urg/ack/psh/rst=0

3 syn/fin=1, rst/ack=0, psh/rst=любые

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата
  В 15.12.2023 в 15:45, Владимир320 сказал:

в чем тогда разница если я напишу такие  правила:

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

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

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

1 syn/fin=1, urg/ack/psh/rst=любые

2 syn/fin=1, urg/ack/psh/rst=0

3 syn/fin=1, rst/ack=0, psh/rst=любые

Спасибо за ответы, но все же я не понимаю разницы в правилах этих, так как в пакетах всегда есть все флаги, но установлены некоторые. Зачем тогда мне указывать какие то флаги, когда будет равнозначное правило --tcp-flag all какой то флак

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

к примеру я хочу ловить трафик где установлены PSH, ACK флаги

image.thumb.png.ccb50bac1db28b5b88554ebac0e7e5df.png

я могу написать правила согласно инструкции:

-p tcp --tcp-flags ALL ACK,PSH -j LOG

-p tcp --tcp-flags FIN,SYN,RST ACK,PSH -j LOG
-p tcp --tcp-flags RST ACK,PSH -j LOG

 

и этот пакет, будет попадать под эти три правила или же не будет? Смысл вообще в первой части правила? Типа рассматриваем пакеты в которых есть такие флаги, если всегда во всех пакетах есть все флаги)) взрыв мозга

Изменено пользователем Владимир320

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

19 часов назад, Владимир320 сказал:

Типа рассматриваем пакеты в которых есть такие флаги, если всегда во всех пакетах есть все флаги

Флаг всегда есть, но для фильтра существует три варианта: 1, 0 или значение не важно. Поэтому сначала фильтруются те флаги, которые интересуют и должны иметь конкретное значение, потом сверяется сами значения

 

20 часов назад, Владимир320 сказал:

к примеру я хочу ловить трафик где установлены PSH, ACK флаги

Если другие флаги неважны, то PSH,ACK PSH,ACK.
Если важно, чтобы SYN при этом не был установлен, то SYN,PSH,ACK PSH,ACK

 


Второй и третий вариант вряд ли будут работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

Если другие флаги неважны, то PSH,ACK PSH,ACK.

Как работает эта запись? Ведь слева мы указали те флаги, которые мы рассматриваем и которые должны быть неустановлены, с справа список установленных флагов. Тут какое-то противоречие получается.

Или слева список, который мы просто рассматриваем

Изменено пользователем Владимир320

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

7 часов назад, Владимир320 сказал:

Как работает эта запись? Ведь слева мы указали те флаги, которые мы рассматриваем и которые должны быть неустановлены

Неправильно, слева указываются те флаги, которые мы рассматриваем. Установлены они или нет, зависит от второго списка.

 

 

2 часа назад, disappointed сказал:

chatGPT

Человечество пока в безопасности :) Вы бы проверили хотя бы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибки есть? А я не проверил, чёт привык, давно всякую мелочь типа js с ним делаю.

Вообще он что-то начал загоянться последнее время, весной работало супер, я текстом сложнейшие ТЗ писал он мне правила iptables только в путь выдавал.

Снимок экрана 2023-12-29 161926.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

больше вопрос к такому виду правила  PSH,ACK PSH,ACK. рассматриваем покеты с флагами PSH,ACK и в тоже время они должны быть установлены, а значение остальных флагов SYN,RST,FIN,URG нам не важно, оно может иметь значение либо 0 либо 1...?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

21 час назад, Владимир320 сказал:

больше вопрос к такому виду правила  PSH,ACK PSH,ACK. рассматриваем покеты с флагами PSH,ACK и в тоже время они должны быть установлены, а значение остальных флагов SYN,RST,FIN,URG нам не важно, оно может иметь значение либо 0 либо 1...?

PSH = 1 И ACK = 1

Остальные неважны.

 

Первый аргумент говорит.. "Так, только вот эти флаги будем проверять, условимся, что они все должны быть в 0".

Второй как бы потом первую инструкцию дополняет и меняет инвертируя - "А да, забыл! Не все в 0! Вот эти из них должны быть в 1".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 29.12.2023 в 15:48, Владимир320 сказал:

рассматриваем покеты с флагами PSH,ACK и в тоже время они должны быть установлены, а значение остальных флагов SYN,RST,FIN,URG нам не важно, оно может иметь значение либо 0 либо 1...?

Да.

Если вам проще математически, должно выполнять условие flags & mask == comp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.