Настраивал бридж и файервол на Almalinux 9, нативными средствами - с помощью nmcli и firewalld , и решил записать памятку, что бы впоследствии не искать всю инфу заново.
Настройка бриджа со статичным адресом:
- Создаем бридж, как устройство, и сразу корректируем название, ибо встроенные названия подключений мне не очень нравятся:
nmcli con add type bridge ifname br0
nmcli co mod bridge-br0 connection.id br0
- Отключаем ipv6, ибо нема, и сразу прописываю адресацию
nmcli co mod br0 ipv6.method disabled
nmcli co mod br0 ipv4.addresses 11.22.33.44/24
nmcli co mod br0 ipv4.gateway 11.22.33.1
nmcli co mod br0 ipv4.method manual
nmcli co mod br0 stp off # Те, кому нужен STP, знают об этом, остальным можно выключить для избежания лишнего головняка
- Добавляем в бридж устройство eno2 и правлю название, ибо нафиг рабов.
nmcli con add type bridge-slave ifname eno1 master br0
nmcli co mod bridge-slave-eno1 connection.id bridge-eno1
- Удаляем стандартное подключение "eno1"
nmcli co del eno1
- Можно включить бридж, и проверить.
nmcli co up br0
nmcli co sh #(все должно быть зеленым)
ip r # у меня тут 2 default gateway-я, что не есть правильно.
- Отключаю гейтвей на второй сетевухе
nmcli co mod eno2 ipv4.gateway ""
nmcli co up eno2
ip r # гейт остался один, который прописывал на втором шаге, все ок, можно проверять пингом внешку.
Настройка firewalld по белому списку
- Для начала перевесим ssh на альтернативный порт:
sed -i -e 's/#Port\ 22/Port\ 32202/g' /etc/ssh/sshd_config
semanage port -a -t ssh_port_t -p tcp 32202 # если не отключать selinux
firewall-cmd --permanent --service=ssh --add-port=32202/tcp
firewall-cmd --permanent --service=ssh --remove-port=22/tcp #правила не применятся пока не сделать firewall-cmd --reload, установленные соединения не оборвутся даже после reload-а.
- Назначим зоны для trested-а и public - интернета. Можно использовать зону dmz, вместо trusted, разные варианты открытости.
firewall-cmd --zone=public --change-interface=br0 --permanent # eno1 в бридже, он ни на что не влияет
firewall-cmd --zone=trusted --change-interface=eno2 --permanent
- Создаем и заполняем вайтлист
firewall-cmd --permanent --new-ipset=whitelist --type=hash:net
firewall-cmd --permanent --ipset=whitelist --add-entry=22.33.44.0/24
firewall-cmd --permanent --ipset=whitelist --add-entry=33.44.55.0/24
...
смотрим на результат
firewall-cmd --permanent --ipset=whitelist --get-entries
- Разрешаем подключение из вайтлиста к нужным портам
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="whitelist" service name="ssh" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="whitelist" service name="ntp" accept'
...
- В настройках зоны public разрешено подключение к ssh и некоторым другим портам, мне оно не нужно, оставляем только тех, кто в вайтлисте.
firewall-cmd --list-services --zone=public
firewall-cmd --zone=public --permanent --remove-service=cockpit
firewall-cmd --zone=public --permanent --remove-service=dhcpv6-client
firewall-cmd --permanent --zone=public --remove-service=ssh
- Осталось проверить, все ли хорошо, и релоуд (все правила кучей применятся)
firewall-cmd --set-default-zone public # все новые подключения пойдут в зону public, мало ли сетевуха сменит название.
firewall-cmd --info-zone=public
firewall-cmd --reload
- Проверяю, что недоступно не из вайтлиста и доступно из вайтлиста по ssh (ибо встречался, что ссш остался торчать).
ssh -p32202 myserver