Что же из себя представляет NGFW (Next Generation Firewall)? За основу я взял модель FW Check Point. А значит, как минимум: Firewall Blade - Собственно сам брандмауэр IPS - Intruder Prevention System - система обнаружения и блокировки атак на основе поведенческого анализа по базе сигнатур IPSec - построение VPN-туннелей (site-2-site, client-2-site) Application Control / URL Filtering - контроль приложений и фильтрация по URL Antivirus / AntiBot - проверка на вирусы/боты на лету, анализ пакетов SandBlast - песочница с очисткой активного содержимого в файлах На текущий момент из всего списка компонентов реализовано только FW, IPS, IPSec VPN. Напомню, что все компоненты OpenSource, а сама RedOS бесплатна для домашнего использования.  Версии ПО:RedOS Murom 7.3.3 (server-minimal)Suricata 7.0.1WireGuard 1.0OpenVPN 2.6.0ShadowSocks 2.9.1StrongSwan 5.9.9 В качестве FW будем использовать nftables (в RedOS он хоть и встроен в ядро, самой утилиты управления нет, предполагается, что админ сам выберет утилиту firewalld, nft, iptables) При настройке всех VPN-сервисов важно знать, что сети, выдаваемые клиентам не должны пересекаться, повторяться и т.п. Сразу оговорю, все настройки лучше делать под root. Сейчас в меня посыпятся хейты, однако сразу сообщу, NGFW - это не пользовательская задача. И да, SSH-доступ следует открывать только для внутренних администраторов, с внешней стороны его лучше не открывать. Также PermitRootLogin ставить no, использовать sudoers и т.п. и желательно использовать ssh-ключи с паролем. И да, параметр Listen в /etc/ssh/sshd_config лучше указывать конкретный IP из внутренней сети. Разумеется первым, а вернее нулевым действием после установки чистой ОС ее надо обновить. Во-первых необходимо установить и преднастроить FW, для этого ставим и настраиваем nftables. Предварительно проверяем, что же установлено. В выводе nf_tables означает, что в ядре используется nftables. В моем случае я использовал mininal server инсталляцию, поэтому никаких "обвесов" у меня нет. Но для общего случая следует проверить и по необходимости деинсталировать лишнее  Проверим все ли необходимые модули ядра загружены. xt_conntrack / nf_conntrack (контроль состояния сессий) и 802.1q (для поддержки VLAN) Если таковых нет, необходимо проверить, доступны ли эти модули Если ошибок нет, то добавляем модули для загрузки в boot time. Создаем файл /etc/modules-load.d/mymod.conf Теперь установим необходимую утилиту nft и настроим запуск службы Далее в файле /etc/sysconfig/nftables.conf указываем откуда подгружать конфиг FW Далее есть 2 варианта управления файрволом, через конфиг и службу, либо прямыми командами nft и сохранением конфига nft list ruleset >/etc/nftables/mynetworkfw.nft.Принципиально разницы нет, однако при перезагрузке службы Handle правил будет обнуляться (то же самое при перезагрузке системы в целом). При редактировании правил через команды nft, Handle будет уникальным. Теперь собственно необходим дефолтовый конфиг nftables. В частности, input/output и сама цепочка forward. Ниже приведу примерный файл /etc/nftables/mynetworkfw.nft Поясню по конфигу, 192.168.10.50, 192.168.20.25 это IP-адреса админов NGFW. 192.168.1.1 это наш роутер, подключенный в инет и осуществляющий NAT и играющий роль DNS-сервера локальной сети. Разумеется это лишь пример. Обратите внимание, что фильтрация трафика осуществляется не только на вход к серверу, но и на выход. Когда закончим настройку NGFW основная цепочка будет именно forwarding, тут будут правила NGFW. Забегаю наперед, counter queue to 0 - это уже IPS-правило, его надо будет указать уже после запуска Suricata. Кроме того, в FW уже преднастроены клиенты VPN с портами по умолчанию. Если порты в настройках VPN-сервисов указываете другие, то и в FW их надо учесть. Интерфейсы ens192 (external) и ens224 (internal), на последний из них приходит trunc (802.1q). Все настройки интерфейсов располагаются /etc/sysconfig/network-scripts/, где ifcfg-<interface> - настройки интерфейса, route-<interface> настройки маршрутов если на интерфейсе их не 1. Примеры таких настроек в спойлере ifcfg-ens192 узнать UUID интерфейса можно через nmcli con show отсюда DNS попадут в /etc/resolv.conf, а GATEWAY в таблицу маршрутизации, DEFROUTE=yes означает, что маршрут 0.0.0.0/0.0.0.0 будет через GATEWAY ifcfg-ens224 Обратите внимание, что здесь нет особо никаких настроек. Это публикация интерфейса для использования в 802.1q. UUID здесь также не указан, чтобы NetworkManager не управлял этой заглушкой. ifcfg-ens224.20 после расписывания всех файлов конфигураций, рестартанем NetworkManager systemctl restart NetworkManager Итак, предварительно настроили FW. правила FW применяются "на лету", а значит при ручном написании правил через команду nft, создавая chain в таблице не спешите ставить drop, первоначально лучше ставить accept, чтобы не потерять подключение к серверу. По дефолту, в репозитории Fedora Extra (epel) есть пакет Suricata, однако он скомпилирован с ограничениями, да и версия Python нас не устроит, так что придется собирать из исходников. Установим репозиторий epel, скачиваем исходник Suricata и устанавливаем нужные компоненты для компиляции. Дальше нам необходимо поправить несколько моментов. Во-первых, надо настроить запуск службы suricata. Для этого создаем файл /usr/lib/systemd/system/suricata.service Далее делаем chmod 755 /usr/lib/systemd/system/suricata.service и systemctl daemon-reload. Проверяем права доступа к созданным папкам, файлам, и т.д. /var/run/suricata, /etc/suricata/, /var/log/suricata. Если все права выставлены верно, значит проблем с запуском не возникнет. Запускам службу и ставим в автозапуск. systemctl enable suricata --now Далее в cron добавляем обновление баз и перезагрузку этих правил. crontab -e Установка WireGuard в RedOS задача не тривиальная. Для начала необходимо установить необходимые репозитории. В частности, от Oracle Linux 7. Потом выполнить преконфиг и установку в соответствии с Installation manual WireGuard После чего, эти репозитории можно отключить/удалить и т.п. Больше они не потребуются, но могут мешать. Лучше отключать после чего сделать очистку dnf clean packages После чего также проверяем наличие модуля ядра, его автозагрузку и т.п. Создаем ключи. Публичный ключ будет нужен клиентам, для подключения к нашему серверу. Приватный ключ используем в конфиге туннеля. Настраиваем подключение wireguard. Создаем файл /etc/wireguard/wgtun.conf После чего проверяем его, если ошибок нет, то включаем службу Установка OpenVPN простая, у RedOS есть 2 версии OpenVPN и OpenVPN-Гост. Кому какой нравится. Мне ГОСТ не требуется, поэтому тут все просто. dnf install openvpn -y Пример конфигурации OpenVPN. Создание CA опишу ниже. Этот CA мы будем использовать для OpenVPN / StrongSwan. Обратите внимание, что критично для конфигураций OpenVPN - это размещение конфигов клиента и сервера. В общих чертах, указание port обязательно для server и необязательно для client. Запускать службу OpenVPN будем так: systemctl start openvpn@config.service (для файла конфигурации /etc/openvpn/config.conf), systemctl start openvpn-client@config.service (для файла /etc/openvpn/client/config.conf) или systemctl start openvpn-server@config.service (для файла /etc/openvpn/server/config.conf). В нашем случае это файл /etc/openvpn/server/myvpnserver.conf Теперь перед запуском сервиса необходимо создать все используемые файлы и настроить SELinux Файл cips OpenVPN создаст сам, в нем будет хранить закрепленные за пользователями/серверами IP-адреса. Про сертификаты, ключи Diffie-Hellman, списки отзыва сертификатов ниже, в разделе про StrongSwan. А пока проверим запуск OpenVPN (будут ошибки из-за отсутствующих файлов) Установка же ShadowSocks не тривиальна и снова потребует сборки и компиляции Создаем пользователя, папку конфигов и сервис (для удобства openvpn-like сервис) Содержание файла /usr/lib/systemd/system/shadowsocks@.service Примерное содержание конфига ss (/etc/shadowsocks/main.json) Права и запуск службы Устанавливаем и запускаем Создаем CA (без него не построить туннели на базе сертификатов). Лучше такой CA не держать на сервере в публичной сети, по крайней мере его приватный ключ. Для этой задачи штатно можно использовать strongswan pki, openssl, либо готовый скрипт easy-rsa. Мы возьмем последний, поскольку будем делать универсальный CA для служб OpenVPN и StrongSwan. Инициировали CA, выпустили сертификат, запустили OpenVPN. Что дальше? Настраиваем strongswan. Теперь пишем конфиг /etc/strongswan/ipsec.conf Клиентам StrongSwan нужны будут свои сертификаты в P12. Для OpenVPN можно использовать pem, либо при использовании eToken,ruToken,JaCarta и пр. - pfx с паролем. Для этого можно использовать встроенные в easyrsa командлеты. export-p7, export-p12. Для включения маршрутизации вносим изменения в sysctl. /etc/sysctl.d/10-forward.conf Ну и в конце, после настроек необходимых VPN-сервисов не забывайте открывать для них входящие и исходящие правила на FW. Также для маршрутизации и NAT необходимо прописывать соответствующие правила МЭ. Оф.сайт Suricata. Установка и настройка StrongSwan на Centos 7 Утилита easyrsa