Владимир320 Posted December 12, 2023 Posted December 12, 2023 (edited) Всем салют, мучает вопрос с правила 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? Edited December 12, 2023 by Владимир320 Вставить ник Quote
ixi Posted December 12, 2023 Posted December 12, 2023 4 минуты назад, Владимир320 сказал: Для примера возьму в разбор это правило iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP Что я тут проверяю? пакет с установленным флагом FIN и неустановленными влагами RST FIN,RST? Два списка разделяются пробелом. Из первого списка должны быть установлены те и только те флаги, которые перечислены во втором. В данном случае проверка на взаимоисключающие флаги FIN и RST, они не должны быть установлены одновременно Вставить ник Quote
Владимир320 Posted December 12, 2023 Author Posted December 12, 2023 (edited) С чего это я перестал мочь отвечать с цитированием в этом форуме???? не работает кнопка. Ок, если взять правило из мана: --tcp-flags SYN,ACK,FIN,RST SYN зачем нам рассматривать пакеты с флагами SYN,ACK,FIN,RST в котором должен быть установлен тока SYN. Как вообще формируется первый список? У меня же в голове что я могу написать какие флаги установлены и далее дропать или нет Edited December 12, 2023 by Владимир320 Вставить ник Quote
jffulcrum Posted December 12, 2023 Posted December 12, 2023 1 час назад, Владимир320 сказал: --tcp-flags SYN,ACK,FIN,RST SYN Возьми ВСЕ пакеты, где есть ЛЮБОЙ из флагов SYN,ACK,FIN,RST, примени ДЕЙСТВИЕ к пакетам в которых есть ТОЛЬКО флаг SYN Соответственно, мутанты с несколькими флагами одновременно пойдут ДАЛЬШЕ по цепочке Вставить ник Quote
Владимир320 Posted December 12, 2023 Author Posted December 12, 2023 а в этом случаем? --tcp-flags ALL FIN,PSH,URG -j DROP - тое есть берем все пакеты где есть любой из флагов и дропаем где есть один из трех FIN,PSH,URG? Вставить ник Quote
ixi Posted December 13, 2023 Posted December 13, 2023 (edited) 23 часа назад, Владимир320 сказал: --tcp-flags ALL FIN,PSH,URG -j DROP Установлены флаги FIN,PSH,URG и сняты любые другие (в данном случае syn/ack/rst) Edited December 13, 2023 by ixi Вставить ник Quote
Владимир320 Posted December 13, 2023 Author Posted December 13, 2023 (edited) Цитата Установлены флаги FIN,PSH,URG и сняты любые другие (в данном случае syn/ack/rst) а тут разве не один из трех установлен? Или правильней любые из FIN,PSH,URG установлены Edited December 13, 2023 by Владимир320 Вставить ник Quote
ixi Posted December 14, 2023 Posted December 14, 2023 (edited) 21 час назад, Владимир320 сказал: Цитата Установлены флаги FIN,PSH,URG и сняты любые другие (в данном случае syn/ack/rst) а тут разве не один из трех установлен? Или правильней любые из FIN,PSH,URG установлены Нет. Если вам интересно, зачем нужен фильтр для именно этой комбинации флагов, погуглите. Заодно и решите, нужна ли она вам. Edited December 14, 2023 by ixi Вставить ник Quote
Владимир320 Posted December 15, 2023 Author Posted December 15, 2023 Цитата Нет. Если вам интересно, зачем нужен фильтр для именно этой комбинации флагов, погуглите. Заодно и решите, нужна ли она вам. данная комбинация флагов мне не нужна) Мне нужно понять как эти правила работают) допустим такое правило -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP тут дропаем трафик с установленными флагами syn,fyn, а как понять первую часть правила?? так как если ваершарком развернуть пакет, то там всегда будут все флаги и установлены тока некоторые, в зависимости от трафика в чем тогда разница если я напишу такие правила: -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 мы по сути всегда смотрим в покет со всеми флагами, но выбираем тока нужные установленные флаги. Либо я чет не понимаю Вставить ник Quote
ixi Posted December 18, 2023 Posted December 18, 2023 В 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=любые Вставить ник Quote
Владимир320 Posted December 19, 2023 Author Posted December 19, 2023 Цитата Опубликовано 19 часов назад · Жалоба В 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 какой то флак Вставить ник Quote
Владимир320 Posted December 25, 2023 Author Posted December 25, 2023 (edited) к примеру я хочу ловить трафик где установлены PSH, ACK флаги я могу написать правила согласно инструкции: -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 и этот пакет, будет попадать под эти три правила или же не будет? Смысл вообще в первой части правила? Типа рассматриваем пакеты в которых есть такие флаги, если всегда во всех пакетах есть все флаги)) взрыв мозга Edited December 25, 2023 by Владимир320 Вставить ник Quote
ixi Posted December 26, 2023 Posted December 26, 2023 19 часов назад, Владимир320 сказал: Типа рассматриваем пакеты в которых есть такие флаги, если всегда во всех пакетах есть все флаги Флаг всегда есть, но для фильтра существует три варианта: 1, 0 или значение не важно. Поэтому сначала фильтруются те флаги, которые интересуют и должны иметь конкретное значение, потом сверяется сами значения 20 часов назад, Владимир320 сказал: к примеру я хочу ловить трафик где установлены PSH, ACK флаги Если другие флаги неважны, то PSH,ACK PSH,ACK. Если важно, чтобы SYN при этом не был установлен, то SYN,PSH,ACK PSH,ACK Второй и третий вариант вряд ли будут работать Вставить ник Quote
Владимир320 Posted December 28, 2023 Author Posted December 28, 2023 (edited) Цитата Если другие флаги неважны, то PSH,ACK PSH,ACK. Как работает эта запись? Ведь слева мы указали те флаги, которые мы рассматриваем и которые должны быть неустановлены, с справа список установленных флагов. Тут какое-то противоречие получается. Или слева список, который мы просто рассматриваем Edited December 28, 2023 by Владимир320 Вставить ник Quote
ixi Posted December 28, 2023 Posted December 28, 2023 7 часов назад, Владимир320 сказал: Как работает эта запись? Ведь слева мы указали те флаги, которые мы рассматриваем и которые должны быть неустановлены Неправильно, слева указываются те флаги, которые мы рассматриваем. Установлены они или нет, зависит от второго списка. 2 часа назад, disappointed сказал: chatGPT Человечество пока в безопасности :) Вы бы проверили хотя бы... Вставить ник Quote
disappointed Posted December 29, 2023 Posted December 29, 2023 Ошибки есть? А я не проверил, чёт привык, давно всякую мелочь типа js с ним делаю. Вообще он что-то начал загоянться последнее время, весной работало супер, я текстом сложнейшие ТЗ писал он мне правила iptables только в путь выдавал. Вставить ник Quote
Владимир320 Posted December 29, 2023 Author Posted December 29, 2023 больше вопрос к такому виду правила PSH,ACK PSH,ACK. рассматриваем покеты с флагами PSH,ACK и в тоже время они должны быть установлены, а значение остальных флагов SYN,RST,FIN,URG нам не важно, оно может иметь значение либо 0 либо 1...? Вставить ник Quote
disappointed Posted December 30, 2023 Posted December 30, 2023 21 час назад, Владимир320 сказал: больше вопрос к такому виду правила PSH,ACK PSH,ACK. рассматриваем покеты с флагами PSH,ACK и в тоже время они должны быть установлены, а значение остальных флагов SYN,RST,FIN,URG нам не важно, оно может иметь значение либо 0 либо 1...? PSH = 1 И ACK = 1 Остальные неважны. Первый аргумент говорит.. "Так, только вот эти флаги будем проверять, условимся, что они все должны быть в 0". Второй как бы потом первую инструкцию дополняет и меняет инвертируя - "А да, забыл! Не все в 0! Вот эти из них должны быть в 1". Вставить ник Quote
ixi Posted January 5, 2024 Posted January 5, 2024 В 29.12.2023 в 15:48, Владимир320 сказал: рассматриваем покеты с флагами PSH,ACK и в тоже время они должны быть установлены, а значение остальных флагов SYN,RST,FIN,URG нам не важно, оно может иметь значение либо 0 либо 1...? Да. Если вам проще математически, должно выполнять условие flags & mask == comp Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.