Состоялся (https://marc.info/?l=netfilter&m=156621590113089&w=2) релиз пакетного фильтра nftables 0.9.2 (https://netfilter.org/projects/nftables/), развивающегося в качестве замены iptables, ip6table, arptables и ebtables за счёт унификации интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов. В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.2 изменения включения в состав ядра Linux 5.3.
На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком. Непосредственно логика фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.Основные новшества:
- Возможность проверки номера порта из заголовка пакета транспортного уровня независимо от типа протокола 4 уровня:
add rule x y ip protocol { tcp, udp } th dport 53
- Поддержка восстановления времени жизни набора элементов:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }- Возможность проверки отдельных опций (lsrr, rr, ssrr и ra) из пакетов IPv4:
add rule x y ip option rr exists drop
Для опций маршрутизации возможна проверка полей type, ptr, length и addr:add rule x y ip option rr type 1 drop
- В выражениях теперь допустимо указание сетевых префиксов и диапазонов адресов:iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15
- Поддержка использования переменных в определениях цепочек:define default_policy = accept
add chain ip foo bar { type filter hook input priority filter; policy $default_policy }- Указание приоритета цепочки теперь может производиться как в числовом, таки символьном виде:
define prio = filter
define prionum = 10
define prioffset = "filter - 150"add table ip foo
add chain ip foo bar { type filter hook input priority $prio; }
add chain ip foo ber { type filter hook input priority $prionum; }
add chain ip foo bor { type filter hook input priority $prioffset; }- Реализована поддержка модуля synproxy. Например, для размещения TCP-порта 8888 под защитой synproxy можно использовать набор правил:
table ip x {
chain y {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain z {
type filter hook forward priority filter; policy accept;
tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \\
wscale 7 timestamp sack-perm ct state invalid drop
}
}- Для определения в таблице conntrack связанных с текущим соединением ожидаемых дополнительных соединений, которые применяются в требующих установки нескольких соединений сложных протоколах, таких как FTP, SIP и H.323, теперь можно определять политики через штатные наборы правил. Например, для определения ожидаемых после соединений к TCP порту 5432 последующих соединений к порту 8888 можно указать следующие правила:
table x {
ct expectation myexpect {
protocol tcp
dport 5432
timeout 1h
size 12
l3proto ip
}chain input {
type filter hook input priority 0;
ct state new tcp dport 8888 ct expectation set myexpect
ct state established,related counter accept
}
}
URL: https://marc.info/?l=netfilter&m=156621590113089&w=2
Новость: https://www.opennet.me/opennews/art.shtml?num=51312
осталось подождать когда на eBPF портируют..
> пакетного фильтраПравильно говорить файрволл.
Ага, брандмауер
> Ага, брандмауерhttps://www.opennet.me/openforum/vsluhforumID3/38585.html#11
> Ага, брандмауер
не-a, - Огненная Стена (ОгнеCтен то бишь :)
сетекран
(сетевой экран)
Пофигизм в воспитании детей.
> Для определения в таблице conntrack связанных с текущим соединением ожидаемых дополнительных соединенийВот это интересно, в таблесах нет такого вроде.
>>в таблице conntrack связанных с текущим соединением ожидаемых дополнительных соединений
>в таблесах нет такого вроде.Есть. https://duckduckgo.com/?q=conntrack+iptables&t=ffnt&ia=web
$ ( cd /lib/modules/$(uname -r) && find -name '*conntrack*' )
./kernel/net/ipv4/netfilter/nf_conntrack_ipv4.ko
./kernel/net/ipv6/netfilter/nf_conntrack_ipv6.ko
./kernel/net/netfilter/nf_conntrack_amanda.ko
./kernel/net/netfilter/nf_conntrack_broadcast.ko
./kernel/net/netfilter/nf_conntrack_ftp.ko
./kernel/net/netfilter/nf_conntrack_h323.ko
./kernel/net/netfilter/nf_conntrack_irc.ko
./kernel/net/netfilter/nf_conntrack_netbios_ns.ko
./kernel/net/netfilter/nf_conntrack_netlink.ko
./kernel/net/netfilter/nf_conntrack_pptp.ko
./kernel/net/netfilter/nf_conntrack_proto_dccp.ko
./kernel/net/netfilter/nf_conntrack_proto_gre.ko
./kernel/net/netfilter/nf_conntrack_proto_sctp.ko
./kernel/net/netfilter/nf_conntrack_proto_udplite.ko
./kernel/net/netfilter/nf_conntrack_sane.ko
./kernel/net/netfilter/nf_conntrack_sip.ko
./kernel/net/netfilter/nf_conntrack_snmp.ko
./kernel/net/netfilter/nf_conntrack_tftp.ko
./kernel/net/netfilter/xt_conntrack.ko
./kernel/net/netfilter/nf_conntrack.ko
$ _
Так для iptables только набор готовых модулей, а тут можно прямо в конфиге новый протокол добавить
> Так для iptables только набор готовых модулей, а тут можно прямо в конфиге новый ненужный
> протокол добавитьпоправил, не благодари.
добавь туда таким образом... да вот хоть sip ? (раз уж ftp по мнению местных хомячков нинужна и вообще устаревший и плохой, плохой)
Кто то им реально пользуется? Так вроде и просто выглядит, и одновременно сложно, из мэ замутили скриптовый язык. Понимаю есть, конечно, серьезные конфигурации , но это вроде больше к сетевикам..
А там уже другие железки со своим фаерволом.
Многие, причём даже не зная об этом.
> Кто то им реально пользуется?firewalld и прочие нескучные десктоп-перделки.
> Понимаю есть, конечно, серьезные конфигурации
"сириозные конфигурации" на этом нечитаемом трэшаке невозможны. Это я тебе как сетевик говорю.
Потому что как раз для них нужна удобочитаемость и возможность поменять конкретное правило, не разбираясь в сотнях строк соседних.А на этом будут только автогенеренные поделки и васянские суперсекьюрные разработки, которые, после (или даже до) ухода васяна только выбросить целиком получится.
Ну ничего, зато циска и палоальта продадут больше коробок. (там внутри тоже будет линух, но ни разу не его сетевой стек)
Ну я имел ввиду - попытка сделать что то серьезное
на чем то несерьезном, но ты прав, это - фейл.Остается только надеятся что в один прекрасный
момент прослойку с таблесами не уберут.. :)Да уж лучше пусть продают коробки :)
как это то есть не уберут? Они ее уже объявили deprecated. Что у нас в ведре случается с таким кодом, надо объяснять?Да ладно, было бы по чему плакать... это был проект, как обычно "подававший большие надежды", и в принципе-то и выглядел неплохо на фоне конкурентов, но не доделанный в ста местах.
Ну будем теперь вместо поделок на линухе использовать краденую asaV. Там хоть packet tracer нормальный. Линейные acl'и - ну как-нибудь переживем.
> "сириозные конфигурации" на этом нечитаемом трэшаке невозможны. Это я тебе как сетевик говорю.Серьезный сетевик конечно же купит отдельную железку для stateful firewall, да?
Как, кстати, на серьезных железках будет выглядеть правило, фильтрующее upd/53 внутри gre-туннеля?
Да, туннель транзитный.
>> "сириозные конфигурации" на этом нечитаемом трэшаке невозможны. Это я тебе как сетевик говорю.
> Серьезный сетевик конечно же купит отдельную железку для stateful firewall, да?ну а куда деваться-то? Если последний условно-вменяемый пакетный фильтр десять лет не чинили в десяти тривиальных и нескольких нетривиальных местах, а потом просто притащили вместо него неработающий мартышачий кал, а его объявили устаревшим и неправильным?
> Как, кстати, на серьезных железках будет выглядеть правило, фильтрующее upd/53 внутри gre-
> туннеля?на серьезных железках такой херней не занимаются.
Правило будет выглядеть совершенно иначе - что-нибудь типа "allow dns from vpn clients to google and cloudflare"
Без уточнения айпишников и того что второй - DoH, и без детальных описаний всех возможных оберток.Минус, что в этом полуестественном интеллекте, у тебя только видимость контроля. А реальный - у индуса где-то в горах. Но никакие другие варианты в общем-то уже давно не имеют смысла (ты все равно хуже индуса, да и не очень хочется за него месить навоз). Кроме васянхостовых, а с теми и firewalld справится.
> ну а куда деваться-то? Если последний условно-вменяемый пакетный фильтр десять лет не
> чинили в десяти тривиальных и нескольких нетривиальных местах, а потом простокстати, вот тривиальнейшее место - это нормальный nat/conntrack для gre туннелей.
Нет, никогда не работал, и не мог - и в код лучше даже вообще не смотрите, это п-ц.
Угу, я использую за ради поиграться на парочке машин. Количество косяков и граблей зашкаливает. 092 еще не пробовал ничего не скажу, но 07-091 -- те ещё наборы для нескучных развлечений.
>Кто то им реально пользуется?В последнем debian он, вроде как, дефолтный. Правда там есть пока возможность старые правила с iptable-овским синтаксисом использовать.
"если бы еще и работали".Ну нет, в тех пределах, в которых ими умеет пользоваться доскер - работают, да.
Я пользуюсь, благодаря новым возможностям nftables получилось оптимизировать правила и снизить нагрузку на процессор в 2 раза по сравнению с iptables.
Ничеси,какой суксесс стори? Детали и бенчи будут?
>В выражениях теперь допустимо указание сетевых префиксов и диапазонов адресов:Этого не умел? Так теперь чтобы данный функционал появился в стабильных дистрибутивах минимум года три надо будет ждать.
это нынче такой модный подход - объявить уже почти совсем окончательно готовым, предыдущее работающее решение поломать и выкинуть, а потом доделывать базовые тривиальные вещи, патамушта альтернативно-одаренному разработчику они вообще в голову не приходили - там смузи бродит.
1:0 Девопусы vs сисадминыдевопусы iptables не знали, а теперь он и не нужен. а админам опять страдать.
> девопусы iptables не зналитак им и не надо было - за них доскер все делает сам, интуитивно-приятным образом. Не особо-то и оставляя возможность вмешиваться вручную.
Кстати, у него, кажется, возникли какие-то сложности с nft - официальной поддержки по сей день нет, только кривые васян-скрипты.
Впрочем, через враппер, наверное, кое-как работает.> а админам опять страдать.
админы ненужно и должны страдать, выбрав линух в качестве специализации.
Вон админы вмвари ни разу не страдают - да, фиревал убогонький, но вполне заточен под ручное управление в тех пределах, в которых надо.
Файервол. На гипервизоре. Ох.
* Если оно пилится под аренду "по виртуалке на рыло", вмварь весь профит съест. И вообще непонятно как фронтэнд отдавать. RHEV тогда уж.
* Если арендаторы "внутренние", 802.1q vlan'ы наружу и там на нормальном оборудовании расписывать.
** Если в проекте нет денег, там и трафик вряд ли есть. До ≈200kpps можно непринуждённо таскать через виртуальный "маршрутизатор". Цена вопроса — в пределах 4xCPU, включая NAT. Появятся деньги — меньше проблем вывести маршрутизацию наружу.
> Файервол. На гипервизоре.ну да, у гипервизора, внезапно, сильно не одно вымя, за которое его могут попытаться потрогать.
(нет, файрвол не защищает виртуалки, они у вмвари вообще в физически отдельной сети будут, если все делать по инструкции, а не как подешевле-попроще)
> Если оно пилится под аренду "по виртуалке на рыло", вмварь весь профит съест.
расскажи это вооон тем ребятам: https://www.arubacloud.com/ - а то мне они не верят.
(смотрю, уже не скромное .it, а вполне себе com? хехехе - видать не все вмварь съела)> И вообще непонятно как фронтэнд отдавать.
ну вот эти - справились.
> смотрю, уже не скромное .it, а вполне себе comУ них оба адреса были изначально. Кстати, от твари они постепенно уходят, мне на одной из виртуалок в IT1 предложили нажать кнопку для миграции на KVM, прислали письмо, что начали миграцию и если я хочу, то могу нажать кнопочку, что бы встать в очередь на миграцию(а если не хочу то могу пока сидеть внутри твари)
изначально на .com не перенаправляло. Пацаны явно растут, и уже поняли, что .it - плохая марка за пределами родной Италии.> Кстати, от твари они постепенно уходят, мне на одной из виртуалок в IT1 предложили нажать кнопку
мне пока ничего не предлагают, может, я их меньше затрахал? ;-)
При том что это пресловутые одноевровые виртуалки, для меня в общем загадка, каково экономическое оправдание этого бизнеса.Деньги мафии отмывать, разьве что?
> Возможность проверки номера порта из заголовка пакета транспортного уровня независимо от типа протокола 4 уровняРасскажите как это? В каких случаях использовать? Звучит интересно, но пока не очень понятно.
Например, для работы современного DNS надо отрывать и 53udp и 53tcp. Раньше тебе надо было 2 правила для этого. Сейчас -- одно.Правда жизни состоит в том, что это можно было и раньше решить одним правилом в iptables + ipset.
> Правда жизни состоит в том, что это можно было и раньше решить одним правилом в iptables + ipsetА можно пожалуйста пример как выглядит такое правило?
На ручнике что то я сегодня, вот же оно это правило
> iptables -A INPUT -m set --match-set dropips src -j DROPминус в том что если надо указывать порт то и протокол требуется установить.
ipset create allowed_in bitmap:port range 0-10240 counters
ipset add allowed_in 53
iptables -A INPUT -m conntrack --ctstate NEW -m set --match-set allowed_in -j ACCEPT
А то же самое одновременно для IPv4 и IPv6?
Одним правилом через netfilter невозможно сделать. Нужно одно правило в iptables, а второе - в ip6tables. Теоретически можно извернуться через ingress queue, классификатором ipset и tc action. Но зачем?
> Simplified dual stack IPv4/IPv6 administration, through the new inet family which allows you to register base chains that see both IPv4 and IPv6 traffic. Thus, you don't need to rely on scripts to duplicate your ruleset anymore.https://wiki.nftables.org/wiki-nftables/index.php/Main_diffe...
Спасибо. Вспомнил, что действительно по два правила раньше писал для tcp и udp. RDP сюда же или openvpn, например.
Так что там с заменой ipset? Будет не?
https://wiki.nftables.org/wiki-nftables/index.php/Sets