Сформирован выпуск динамически управляемого межсетевого экрана firewalld 2.3, реализованного в форме обвязки над пакетными фильтрами nftables и iptables. Firewalld запускается в виде фонового процесса, позволяющего динамически изменять правила пакетного фильтра через D-Bus, без необходимости перезагрузки правил пакетного фильтра и без разрыва установленных соединений. Проект уже применяется во многих дистрибутивах Linux, включая RHEL 7+, Fedora 18+ и SUSE/openSUSE 15+. Код firewalld написан на языке Python и распространяется под лицензией GPLv2...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=62183
Для тех кто не понимает зачем нужна эта прослойка...iptables и nftables работают с цепочками обработки пакетов в модуле netfilter, а этот файрволл порождает гуманитарную абстракцию работающую в сочетании с NetworkManager, которая смотрит на:
- сервисы,
- зоны,
- интерфейсы и соединения NM
В сочетании с возможностью задавать конфигурацию через D-Bus и полностью декларативным форматом конфигурации он является рабочим решением для организации файрволла на конечном сервере, на котором не меняются сетевые параметры.Мы жертвуем гибкостью netfilter в угоду удобства оркестрации под конкретный набор задач. Ну, то есть, если вам нужно сделать виртуальный файрволл+роутер то firewalld нужно будет удалить, потому что он будем мешать.
UFW, кстати, - это то же самое, только сильно упрощенное и более подходящее для рабочих станций и виртуальных серверов с одним сетевым интерфейсом.
nftables тоже вполне себе декларативный.
посмотрите синтаксис .nft файлов.
потому, реальным плюсом является только предоставление dbus-интерфейса.
Кто может подсказать - в современных версиях KDE прямо в "Параметрах системы" есть графический файрвол. Там под капотом firewalld или что-то еще?
Я бы сказал проще - вводит понятие зоны. По факту это отдельные цепочки правил iptables. Пакет попадает в зону, например, в зависимости от IP источника.
Как он определяет на каком порту работает сервис?
через пачку предустановленных xml, которые ты можешь дополнить своими кастомными вариантами
Откуда они могут знать, на каком порту мне нужно запускать сервисы?Ну, а вручную xml писать какое-то сомнительное удовольствие, даже по сравнению с nft.
> Откуда они могут знать, на каком порту мне нужно запускать сервисы?Если ты запускаешь сферический http сервер, порты очевидны и дефолтные прописаны (а точнее - вероятнее даже просто протянуты http/https протоколы). Хочешь нестандартную настройку — пишешь сам. Про полную поддержку любых сервисов никто и не говорил.
> Ну, а вручную xml писать какое-то сомнительное удовольствие, даже по сравнению с nft.
Да, полная хрень, каждый раз плююсь.
Субъективно очень неудобная штука. После ufw команды firewall-cmd, казалось, объявили принципу наименьшего удивления войну
Я даже не понял, почему она в RedHat-based Distros нужна, с одной стороны не сильно упрощает, с другой стороны на серверах вызывает инциденты в неожиданных местах.
потому что там до определенного момента был iptables и fwd жизнь действительно упрощал, при том, предоставляя чуть больше возможностей, чем "открыть/закрыить портек", в отличии oт ufw.
а если сейчас его выкинуть - перестанет наполную мощность работать nm и прочий дистрибутивный стек, у админов сломаются конфиги и они расхотят платить за подписку.
Упрощает, в смысле - простота хуже воровства. Когда нужно сделать что-то чуть более сложное - всё усложняется на порядки. А если надо отладить - это становится закатом Солнца вручную. Была бы эта штука критической важности, то имело бы свою инфраструктуру, интегрированную в ядро, а не мешало работать с nftables.
Если вы на серверах руками делаете на fw что-то "более сложное" - скорее всего, вы делаете полную бнопню, извините. А вот с автоматикой, которая делает это "более сложное" - всякими доскерами, куберами, cni и тэ дэ firewalld, в отличие от handmade-портянок - не конфликтует.
Девособаки - неосиляторы? Планировать надо от требований ИБ, а не против них. А firewalld - это имитация.
Если уж на то пошло, то нужно юзать коммерческий настоящий фаервол для виртуализированных сред в целях микросегментации сетей, а не эту игрушку. У нее черным по белому в доке написано - для рабочих станций и простых инсталляций.
> Девособаки - неосиляторы? Планировать надо от требований ИБ, а не против них.
> А firewalld - это имитация.
> Если уж на то пошло, то нужно юзать коммерческий настоящий фаервол для
> виртуализированных сред в целях микросегментации сетей, а не эту игрушку. У
> нее черным по белому в доке написано - для рабочих станций
> и простых инсталляций.Угу. Firewalld, сталбыть, имитация, а bashпортянко (Шоб уж совсем-Ъ!) с правилами в legacy-синтаксисе, делающая "чуть более сложное"(ТМ) (Главное потом суметь "смежникам"(ТМ) доказать, чтоэтонеты - ну или быстро-быстро поправить, а потом уже "доказать"(ТМ)) - самая что ни на есть "информационная безопасность"(ТМ) и есть, ясно-понятно.
Ага, хренакс "firewall-cmd --remove --service=ssh" и не зайти на сервер даже из локальной сети.
С чего это вдруга кто будет делать "firewall-cmd --reload"
а зачем? правило ж в риалтайм добавили - без --permanent
значит после ближайшей перезагрузки доступ опять появится!
А если сделатьrm -rf --no-preserve-root
будет ещё интереснее.
Разрешите докопаться- Если локальная сеть будет в зоне trust, то правила не будут применяться. Там уже стоит ACCEPT по умолчанию на все входящие
- Правила будут применться к новым соеденениям(ct state { established, related } accept), текущая ssh сессия будет работать
- У firewalld есть опция --persistent. Команды без нее не сохраняться постоянно. Так что всегда можно откатить, ну или на худой конец перезагрузить комп
- У firewall-cmd есть опции timeout(или как-то так), которые отменят команду через заданное время. Вполне подходит для любителей заблокиновать sshВ вот в чем firewalld однозначно плох, так это поддержка ipv6. MASQURADE, port forwading извольте писать через rich syntax(по сути nft)
>при создании правил отталкивается не от IP-адресов, сетевых интерфейсов и номеров портов, а от названий службДайте угадаю, вы ведь ни разу не пользовались "firewall-cmd"?
Как бы, никто не запрещает вам создавать правила\открывать порты tcp\udp напрямую.
И даже больше - можно создавать "рич правла", прямо в формате iptables\nftables.
Просто для упрощения, есть некий предустановленный список сервисов(с умолчательными портами), а вы в новости вывели это прям как некую аксиому.
"Рич-правила" это то, против чего создавался firewalld, то ради чего была принесена в жертву отладка пакетов. Не говоря о том, что помимо синтаксиса nftables надо еще учить синтаксис firewalld. И это выдвигается как достоинство firewalld? В таком свете firewalld - это лишняя сущность.
>надо еще учить синтаксис firewalldзачем?
99% админов достаточно знать пяток команд firewall-cmd из всего списка ( https://firewalld.org/documentation/man-pages/firewall-cmd.html ):
--add-***
--remove-***
--list-all
--reload
и не забывать про опцию " --permanent"Ну и при первичном поднятии сервера надо один раз настроить интерфейсы - распределить по предустановленным зонам("home"\"public") и "--add-masquerade"
Не самый лучший пример с точки зрения безопасности, но все же наглядный:
firewall-cmd --zone=public --add-port=12345/tcp
firewall-cmd --zone=public --remove-port=12345/tcpfirewall-cmd --zone=public --add-forward-port=port=3389:proto=tcp:toport=3389:toaddr=192.168.1.1
firewall-cmd --zone=public --remove-forward-port=port=3389:proto=tcp:toport=3389:toaddr=192.168.1.1
порт можете прописывать любой, не обязательно RDP-шный ;)
И не говорите, ужасный синтаксис. То ли дело, json поправил и перезалил. Ничего, скоро напишут надстройку над firewalld на dotnet или deno, чтобы все эти команды дёргало.
Группе подсетей назначить группу портов? А отладить по счётчикам и доказать смежникам, что проблема не на вашей стороне. А выявить проблему на вашей стороне? А когда туда ещё добавляется какой-нить crowdsec, sshguard или fail2ban? Как искать, где собака порылась?
Это поделие еще и в RHCSA присутствует.
Достаточно одного квалифицированного админа, а не десятка девособак.
квалифицированные не хотят мараться об nft
проблема ваших поделок именно в том, что у вас ВСЕ примеры - "не самые лучшие с точки зрения безопасности".Сделай-ка мне в качестве самого примитивного образца - простой белый список для подключений к ssh. Я сказал - ssh, а не всей зоны public, там кроме него есть другие сервисы!
Необходимость создания "упрощающих прослоек" -- показатель непрофессионализма проектирования nftables. Или их правильнее называть narcotables?
ну, справедливости ради, синтаксис iptables
тоже с первого раза не всякий осилит.
А там, как мы помним, важны всякие чейны в определенной последовательности, иначе работать не будет.
Так и зампием - девособаки не умеют в пакетные фильтры.
во-первых императивное описание конфигурации это как бы лет 15 уже не рекомендованный метод, поэтому для систем оркестрации желателен демон. И он достаточно не простой, по сравнению с утилиткой ufw.
во-вторых синтаксис у nftables действительно упоротый, как-то читаемо там только в json.
в чем упоротый?
вот в iptables - да, грусть, даже на дебиан fwd ставила.
когда nftables появился - начала руками конфиги писать, проблем нет.
читается, можно сказкть, как текст, за исключением некоторых моментов.
ну,вот не надо ля-ля, синтаксис nft после iptables просто мрак и тлен. а что качаемо firewalld - ненужно оно, вот от слова совсем.
в чем тлен, еще раз спрашиваю?
по-моему, норм.
лапша, а не удобоваримый синтаксис, вот в чём.
открыть или закрыть порт - может и норм, но вот вешать всякие коннтраки и коннлимиты через этот жесон - ну, его, спасибо, лучше мы как нибудь дидовскими чейнами и таблицами разрулим.
Да не осилил он, вот и плюётся. Ему важно херачить, а не получить результат. Отладка ему не нужна.
Ну, как бы это сказать? У iptables _ВООБЩЕ_ нет "синтаксиса" - есть пачка флагов команды, а так чтобы нормальный dsl для описания правил - так это вам куда-нибудь в ipfw или хотя бы в pf. В nft хотя бы попытались, да.
праильно, даешь жирные парсеры, юзерское апи и сервисоонованные биндинги прям в ядро!
мало нам lpe в nftable'вском апи, даешь исполнение на уровне ядра через дырявый парсер конфигов!!
Прошу не обобщать и не путать с профнепригодностью неосиляторов.
странно, что тебя минусуют.
nftables действительно заставляет рыдать.
Всё it построено на прослойках. Ты же программы пишешь не в опкодах процессора? Вот и nft тебя никто не заставляет использовать напрямую.
Безопасный фаерволл на python управляемый через D-Bus? Что может пойти не так..
это не совсем файрволл - это скорее управляющая прослойка НАД файрволлом.
или же, если говорить правильней - просто еще один уровень абстракции.
Для чего он создан? Для упрощения.
Никто вам не запрещает писать напрямую правила iptables\nftables!
Почему ты все время отправляешь по два сообщения вместо одного?
мту маленький, не влезает
мое увлажнение Вам!
сразу видно руку мастера.
и для предоставления адекватного апи.
в современном мире никто бинари дергать не будет, чтобы правила посмотреть/добавить/убрать.
к ним зачастую даже доступа не будет, будет к пиру на шине.
API есть - libnftnl, только это не то что curl-ом дергают. HTTP API это лишь одна из разновидностей.Бинари дергать - а в современном мире и не такую дичь творят - запускают curl из python. Зато не на bash!?!
какое http api? Вы вообще о чем?
>libnftnlэто библиотека .. апи - это когда запрос на сокет шлешь и за тебя все делают .. не когда твое приложение в системные кишки лезет рулить
Это как в автомобиле рулевое колесо заменить на джойстик - проще, но нефункционально.
Подскажите пожалуйста, как проще всего на локальном ПК запретить все сетевые соединения, после чего разрешить через белый список ходить в интернет только браузеру, медиаплееру, чатику и пакетному менеджеру?Чем проще тем лучше.
Portmaster. Не знаю, насколько это просто, но оно работает.
Это же контроль порта, а не приложения.
Запускать в отдельных namespace и рулить пакетным фильтром в каждом namespace.
А никак нельзя так чтобы просто в конфиге прописать пути к нужным бинарникам, а всё остальное не пускать?
Пути пишутся в cgrules.dТогда их после запуска даже вручную cgrulesengd перенесёт в cgroup, которой разрешена сеть.
Там конфиг в три строчки плюс два правила nftables.
Он прочил "чем проще", а не грабельно-костыльное минное поле
Другая альтернатива - контейнеры. namespaces - будут проще и легче. Ему надо контролировать приложение, а не порт.
Запускать в отдельных cgroup net_cls. По net_cls в nftables есть селектор.
opensnitch
а зачем? троян всё равно в браузере, медиаплейере и чатике, а вместо пакетного менеджера у нас теперь вон те две штуковины, похожие на докер, в которых свои трояны
SElinux?
>а зачем?Затем чтобы в интернет ходили только те приложения, которым это явно разрешено, а не "кто угодно входи-выходи, у нас двери нараспашку".
Можно ли как-то прикрутить BPF к нему для увеличения производительности?
Чем производительность nftables не устраивает?