Опубликован выпуск пакетного фильтра nftables 1.0.2, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Необходимые для работы выпуска nftables 1.0.2 изменения включены в состав ядра Linux 5.17-rc...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=56739
Не, забавно, конечно, а может, и удобно. Но каждый раз когда начинают сыпать сахар в синтаксис, возникает ситуация, когда одно и то же можно сделать 10ю способами. И всё.Не понял немного про точки, но вообще, если правил не тысячи, "до оптимизации" было читать в столбик проще. IMHO, конечно.
meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 .
1.1.1.2 . 2.2.2.5 } accept
нам -Н -Е --надо --сахара
команда --должна --напоминать --шашлык
настоящее -Б людо --для "суровых мужиков"
Отсыпь.
> Не понял немного про точкиэто типа конкатенация такая
После оптимизации все, что в скобках можно выписать в столбик и дать имя. Тогда останется одна строчка с правилом и отдельно список значений, на соответствие которым это правило и будет проверять
А ICMP и IGMP не фильтрует что ли?
Фильтрует. Но для примера лучше самые попсовые.
R
К сожалению, ничего лучше pf в мире брандмауэров до сих пор не придумано.
Я вот тоже все поглядываю на замены, но что то не вижу альтернатив..Вот где еще можно сделать читабельный конфиг, когда у тебя на хосте 2 внешних интерфейса, 5 локальных сетей, 5-6 инстансов OpenPVN со своими ифейсами + MPD который 50 PPPoE сессий поднимает, тонна пробросов на разные сервисы внутри и т.д.. ?
Надо структурировать задачи и подойти к её решению со стороны zone based firewall.
nftables позволяет сконструировать что угодно.
>MPD который 50 PPPoE сессий поднимает* media-sound/mpd
Latest version available:
Latest version installed: [ Not Installed ]
Size of files: 710 KiB
Homepage: https://www.musicpd.org https://github.com/MusicPlayerDaemon/MPD
Description: The Music Player Daemon (mpd)
License: GPL-2
Шта?
http://mpd.sourceforge.net/
дык проще простого, пиши програмку с читабельным конфигом, которая компеляет ентот человекочитаблеьный конфиг в байт-код nft. и все будет оке.
Ну если на мир смотреть через дырку в сортире, кроме жопы ничего и не видно.> MPD который 50 PPPoE сессий поднимает
просто переходите на темную сторону и заканчивайте создавать проблемы пользователям.
Нет pppoe, нет половины проблемы. А остальное можно оставить в pf.
>К сожалению, ничего лучше iptables в мире брандмауэров до сих пор не придумано.Поправил тебя. Можешь не благодарить.
P.S. И находятся же еще в мире странные существа, считающие это убожество - pf - пределом мечтаний.
>>К сожалению, ничего лучше iptables в мире брандмауэров до сих пор не придумано.
> Поправил тебя. Можешь не благодарить.Ну если быть совсем точным, то iptables - это не брандмауэр, а набор управляющих утилит (как и сабжевый nftables). Брэндмауэр - это netfilter и он в ядре.
А по сабжу, лично мне nftables понравился, хотя и некоторые расширения iptebles пока не реализованы ( https://wiki.nftables.org/wiki-nftables/index.php/Supported_... ). Конфиг пишется понятно и довольно интуитивно, через консоль писать километровые команды построчно - задача не обязательная. Из относительных минусов: документацию хотелось-бы более-менее консистентную, а не ситуационную wiki.
А есть возможность с IPTABLES прослушать трафик на всех портах разом и выяснить какое правило iptables блокирует/разрешает прохождение пакета? Или просто, какие правила пакет проходит и на каких интерфейсах?
modprobe nf_log
iptables -t raw -I PREROUTING <критерий выбора пакета> -j TRACE
только nf_log_ipv4(угу, очередное поулучшайкали)
sysctl который это активировал, соответственно, стал ненужен.
Agnitum Outpost Firewall
Какой-то ад, по-моему. Пфом по функционалу оно не стало. А синтаксис для среднестатистического админа нетривиален. Вопрос знатокам: а зачем? Это под гуй тулзы делалось, чтоб для погроммистов мышкой писать окошки админам мышкой?Пипитаблес звезд с неба не хватал, но был понятен и прозрачен. А для админа который без знаний погроммирования это важно.
Я тут с дебиана 9 на 11 переводил VDSку, так и не разобрался, даже по статьям свежим не работает. В итоге через прослойку iptables сделал. Целый язык-фреймворк придумали. А надо было срочно перейти, т.к. я в команде chmod перед слешем точку не поставил.
Через прослойку вполне нормальный подход. Все знакомые так делали. Импорт, экспорт, потом немного править руками (define-ы те же). Всё работает как часы.
Нет ни одной причины что-то там писать с нуля, кроме академической.
Зная о том как пишутся костыли гхм прослойки и прочие трансляторы, я бы переписал с 0. Так спокойнее.Зы. Посоны, война по ходу началась. Всем соболезную.
Что уж, перепишите...
А мне - оно и так работает.
Там сложность в том, что в iptables куча сторонних модулей, трансляцию синтаксиса которых...
Кто ж виноват, что Вы не готовились заранее?
Да и правила iptables в большинстве случаев транслируются в nft без проблем, затем доводятся на свой вкус.
sets там просто шикарны.
Я использую такой скрипт для nftables:
<quote>
#!/usr/bin/bashBACKUP_DIR="/var/backups/nftables"
NFTCONF_SRC="/etc/nftables.conf"YR=$(date +'%Y')
MN=$(date +'%m')
DY=$(date +'%d')
TM=$(date +'%H%M')if nft -c -f ${NFTCONF_SRC}; then
if [[ ! -d ${BACKUP_DIR}/${YR}/${MN} ]]; then
mkdir -p ${BACKUP_DIR}/${YR}/${MN}
fi
cp /etc/nftables.conf ${BACKUP_DIR}/${YR}/${MN}/nftables.conf-${YR}${MN}${DY}-${TM}
/usr/sbin/nft flush ruleset
/usr/sbin/nft -f ${NFTCONF_SRC}
echo '#!/usr/sbin/nft -f' > /etc/nftables.conf
echo "" >> /etc/nftables.conf
echo "flush ruleset" >> /etc/nftables.conf
echo "" >> /etc/nftables.conf
nft -s list ruleset >> /etc/nftables.conf
fi
</quote>
Это позволяет избежать многих граблей.
В отличие от недоразумений вроде ufw и firewald - оно управляемо, т.к. не вносит гору информационного шума и оставляет возможность оптимизации порядка правил по счётчикам пакетов.
А как сделать перенаправление с виртуального /dev/tap_vpn на внешний интерфейс? Т.е. подключаюсь к сети сервера, но чтобы в инет через него?
Тут сумбур какой-то. Опишите задачу ясней. Половина ответа содержится в правильно сформулированном вопросе.
Если вы приходите по впн, терминируемом сервером, то нужен просто NAT типо такого:
table ip nat {
set lans {
type ipv4_addr
flags interval
auto-merge
elements = { 192.168.0.11,
192.168.0.12,
192.168.0.15-192.168.0.20 }
}chain PREROUTING {
type nat hook prerouting priority dstnat; policy accept;
}chain INPUT {
type nat hook input priority 100; policy accept;
}chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
oif "eno2" ip saddr @lans counter masquerade
}chain OUTPUT {
type nat hook output priority -100; policy accept;
}
}
При запуске сервера запускается это:
ip address add 192.168.250.1/24 dev tap_vb0
iptables -t nat -A POSTROUTING -s 192.168.250.0/24 -j SNAT --to-source 8x.14x.4x.20x
и как это через nft?
table inet filter {
...
set nat {
type ipv4_addr
flags interval
elements = {
192.168.1.0/24,
192.168.250.0/24
}...
chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
oifname "OUT_INTERFACE" ip saddr @nat counter snat to 8x.14x.4x.20x
}
}
и dnsmasq занимается динамическими IP
А по-моему, там всё отлично. Именованные списки sets и maps - очень удобны, жаль только, что не глобальны.
jump, так вообще - вещь, во многих случаях позволяющая избавиться от линейного поиска.
Вот подход линейных портянок pf и ipfilter без каких либо списков, на мой взгляд, не оптимальен - это подход а-ля Cisco acl 20-25 летней давности.
pf пригоден только как хостовый пакетный фильтр, и то часто хотелось бы большего.
>jump, так вообще - вещь, во многих случаях позволяющая избавиться от линейного поискапример в студию
Точно так же, как в iptables. Синтетический пример:
iif eth0 ...
...
iif eth0 ...
iif eth1 ...меняем на
iif eth0 jump eth0-forwardtable eth0 eth0-forward {
ваши проверки
}И пакеты не бегают по линейному списку
>[оверквотинг удален]
> iif eth0 ...
> ...
> iif eth0 ...
> iif eth1 ...
> меняем на
> iif eth0 jump eth0-forward
> table eth0 eth0-forward {
> ваши проверки
> }
> И пакеты не бегают по линейному спискуэто что за пример? по какому линейному списку если правила форвардинга никак не пересекаются с правилами фильтрации. Давайте конкретный полный пример, как с реализацией в iptables так и с nftables.
Правила могут пересекаться как для разных интерфейсов, так и для сервисов.
В гугле всё есть - идите и берите "полный пример".
Кулсисопы негодуе, а сетевикам - каеф xD
/s
Сетевики, однако, на цисках давно, и даже sdn все нихрена не на голых *tables.
В общем, пионэры идите в...
> В общем, пионэры идите в...Пиоэнэры админят свои циски (привет 90е) с венды через pussy.exe, пока профи сидят на линухах (на которых тож внезапно есь огнестена, и давно перешли на жуники). Да и на серваках firewall в приличных конторах настраивает сетевик, а не кулсисоп, как в вашей богадельне.
/s
> Пиоэнэры админят свои циски (привет 90е) с венды через pussy.exe,Вы так говорите, как будто в этом есть что-то плохое)
> Да и на серваках firewall в приличных конторах настраивает сетевик, а не кулсисоп, как в вашей богадельне.Ага. На всех трех. Настраивает и настраивает, настраивает и настраивает, наяривает... В перерывах между извлечением застрявшей бумаги из принтера и переносом монитора Зинаиды Васильевны от окна чтоб не дуло.
Firewall. На серваках. Сетевики. В 2022. Ъ.
В худшем случае это какой нибудь ansible по всему зоопарку делает, в более ином вообще ни файрволла ни серваков - одна оркестрашка в облаке...
> одна оркестрашка в облаке...и сплошной ALLOW для всех.
А потом нвидия такая "ой, даже верилоги поперли!" - кто бы мог подумать, да и было ли, чем.
(особенно учитывая что кульхацкеры ТОЖЕ не смогли - правда "зато у нас есть бэкап!")
Один из немногих вменяемых фильтров пакетов.
После systemd хоть камни с неба
что то не осилил как такую конструкцию втащить?
-A PREROUTING -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name DEFSSH --mask 255.255.255.255 --rsource
-A PREROUTING -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --name DEFSSH --mask 255.255.255.255 --rsource -j DROPа ещё я в ipset добавляю себя на несколько часов когда удачно по ssh захожу и соответственно есть правило
-A PREROUTING -m set --match-set temp_allow_hosts src -j ACCEPTкто то пытался такое перетаскивать в nft?
https://stackoverflow.com/a/69178498 например
С ipset надо переписывать на named sets и named maps. Например:-A PREROUTING -m set --match-set temp_allow_hosts src -j ACCEPT
надо переписать на named setstable ip nat {
set temp_allow_hosts {
type ipv4_addr
flags interval
auto-merge
elements = { 192.0.0.0/24, 192.168.0.0/24,
192.168.10.0/24, 192.168.20.0/24,
192.168.251.0-192.168.254.255 }
}
...
chain POSTROUTING {
ip saddr @temp_allow_hosts counter accept
}
...
}Изучайте документацию - там всё есть.
Есть и недостаток - пока переписаны не все модули.
Шли годы...
А документации по nftables (нет, пара кривых, устаревших вики-страниц - это не она) так и не появлялось.
man nft
как будто документация по iptables была чем-то хороша?Последней качественной линуксной документацией был LARTC. Причем и тот вызывал плевки и перекошенные рожи кодерков "нэ так всэ это было, нэ так!" - поскольку писали его методом реверса, проб и ошибок. Кодеркам было некогда писать документацию, надо было быстрее-быстрее еще что-то поломать.
Раз уж упомянули... скажите, а вы SCTP часто используете?
Я сказал демону sshd использовать SCTP. Работает. Но не тестировал пропускную способность по сранению с TCP.