The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск пакетного фильтра nftables 1.0.8, opennews (??), 15-Июл-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


10. "Выпуск пакетного фильтра nftables 1.0.8"  +1 +/
Сообщение от lucentcode (ok), 15-Июл-23, 17:24 
Ну, а фильтрацию по string, как в iptables --match string не завезли до сих пор? Уже не один год простейшее(модуль string) завести не могут. Нет, я конечно понимаю, что можно перевести строку в байты, и по байтам фильтровать пакеты, но делать это вручную жутко не удобно. То ли дело фичи модуля string, с ними дело идёт куда веселей.
Ответить | Правка | Наверх | Cообщить модератору

11. "Выпуск пакетного фильтра nftables 1.0.8"  +/
Сообщение от Аноим (?), 15-Июл-23, 17:54 
Если вас не устраивает nftables, зачем на него переезжать?
Оставайтесь с iptables
Ответить | Правка | Наверх | Cообщить модератору

13. "Выпуск пакетного фильтра nftables 1.0.8"  +2 +/
Сообщение от Андрей04091977 (ok), 15-Июл-23, 17:59 
из rhel 9 iptables выпилен
Ответить | Правка | Наверх | Cообщить модератору

24. "Выпуск пакетного фильтра nftables 1.0.8"  +/
Сообщение от Tron is Whistling (?), 15-Июл-23, 20:44 
Кто вам такое сказал? iptables-legacy на месте, мы допустим на nftables не переехали ещё.
Ответить | Правка | Наверх | Cообщить модератору

15. "Выпуск пакетного фильтра nftables 1.0.8"  +5 +/
Сообщение от Аноним (15), 15-Июл-23, 18:50 
Айпишник - это не строка. Это 32 бита в случае с IPv4. Фильтруются по префиксу.

Пакет - это тоже не строка. Это не UTF-8 строка, это не ASCII-строка, это не еще-черт-знает-в-какой-кодировке строка. Это набор байт, причем потенциально зашифрованных в случае с TLS. Что ты там собрался фильтровать по строке - остается загадкой блдь.

Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

22. "Выпуск пакетного фильтра nftables 1.0.8"  +/
Сообщение от Аноним (21), 15-Июл-23, 20:19 
Собирается впарить в пользовательские браузеры корпоратиный безопастный сертефикат.
Ответить | Правка | Наверх | Cообщить модератору

25. "Выпуск пакетного фильтра nftables 1.0.8"  +1 +/
Сообщение от Tron is Whistling (?), 15-Июл-23, 20:45 
В DNS-запросах например можно строку поискать.
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

32. "Выпуск пакетного фильтра nftables 1.0.8"  +/
Сообщение от Аноним (32), 16-Июл-23, 18:50 
Можно, и даже изредка нужно. Но чаще всё равно приходится пользоваться отдельным AF типа Knot resolver, потому что строку поискать мало, надо ещё с результатом что-то сделать, и чаще нетривиальное.
Ответить | Правка | Наверх | Cообщить модератору

41. "Выпуск пакетного фильтра nftables 1.0.8"  +/
Сообщение от lucentcode (ok), 31-Июл-23, 13:18 
> Айпишник - это не строка. Это 32 бита в случае с IPv4. Фильтруются по префиксу.

А кто говорил, что IP — это строка? Я, выше, подобного нигде не писал. Сами за меня придумали тезис, сами его опровергли? Как это похоже на школьника🤣

> Пакет - это тоже не строка. Это не UTF-8 строка, это не ASCII-строка, это не еще-черт-знает-в-какой-кодировке строка.

О великий гуру! Спасибо за твоё наставление(на самом деле — нет, не спасибо). Все в курсе, что пакет — это набор байт, представляете? Как и про то, что некоторые наборы байт можно сопоставить с другими наборами байт, и если они матчатся, правило может дропнуть пакеты, где обнаружило такое совпадение. Прикольно, правда? Бьюсь об заклад, что вам подобное в голову даже не приходило, мало работаете с сетевыми сервисами, верно?

Теперь по существу:

С помощью модуля string можно резать на серваке с веб-сервером запросы к определённому домену

```
iptables -I INPUT -p tcp --dport 80 -m string --string "Host: example.com" --algo kmp -j DROP
```

фильтрация идёт по пакетам, составляющим строку с hostname заголовка Host:. Очень удобное решение, когда у вас на серваке пара десятков сайтов, и на один из них валит HTTP FLOOD, а сайт не стоит того, чтобы его уводить на защиту L7 от DDoS, при этом остальные сайты должны продолжать нормально работать. Да, трюк с такой блокировкой можно обойти, и я даже могу подсказать как, чтобы серверу опять поплохело, но большинство атакующих такие ламеры, что про такие нюансы просто не знают, а потому в 99.99% этот трюк просто работает. И да, заблокировать доступ к виртуальному хосту в конфиге сервера на время, пока сайт заблокирован, ради очень редких случаев обхода подобной блокировки можно, но до этого админу сервачка с недо-сайтами ещё додуматься надо. А порезать трафик правилом, что указано выше, легко, как два пальца об асфальт.

Режем трафик к конкретной странице

```
iptables -I INPUT -p tcp --dport 80 -m string --string "Host: example.com" --algo kmp -m
string --string "GET /admin" --algo kmp -j DROP
```

тоже просто, верно?

Да, последний кейсы будет работать только с HTTP, на HTTPS не сработает. А предыдущий, блокирующий весь домен, отлично работает и с HTTPS со SNI.

А почему работает? Потому что модуль string отлично знает, строка преобразовывается в байты, и умеет сопоставлять байты из трафика с фрагментом строки, переданным ему в качестве образца.

Можно ли сделать то же самое, тупо передав в параметрах фильтрующего правила уже перекодированную в байты подстроку? Естественно. И nftables это умеет, представляете? Но, это не удобно, так как нужно специальным скриптом, или вручную, перекодировать строку в байты. И если правил таких у вас несколько, при просмотре правил, и удалении уже не актуальных, вам нужно каждый раз вспоминать, как выглядит набор байт(к примеру в шестнадцатеричной кодировке), сопоставимых с вашей строкой. Одна беда, nftables умеет фильровать пакеты по содержимому байт только если известно, на смещении  от начала пакета находятся байты, что нужно сравнивать с вашим образцом. iptables же такие низкоуровневые подробности не требует, он и в этом пока ложит nftables на лопатки.

Про DNS выше комрады уже писали. Тоже кейс вполне себе часто встречающийся, когда нужно сделать что-то с трафиком, упоминающим какую-то строку. Но, для udp-запросов режем пакеты по набору байт, так как в случае с udp запросами к dns домен выглядит не так, как в строке(точки заменяются на нули, к примеру), такое сопоставление требует -m string --hex-string.

Но, nftables не умеет делать даже это нормально, у его встроенного режима сопоставления байт по набору их содержимого в шестнадцатеричном виде есть ограничения на длину одного набора байт, сопоставляемых с трафиком, и другие не приятные нюансы. Но, судя по тому, что вы о таких нюансах даже не знаете, вам просто никогда не приходилось использовать подобные запросы. Вероятно вы диванный теоретик, а не реально работающий админ, верно?

Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру