Роут-демон работает в отдельном network namespace (в примерах — router), поэтому доступ к rib-интерфейсам нужно ограничивать правилами firewall внутри этого netns. firewalld для этого не подходит: его нельзя запустить вторым экземпляром в другом netns и управлять им через firewall-cmd. Поэтому для netns роутера правила задаются напрямую через nftables. Ниже они загружаются отдельным systemd-юнитом при старте системы.
FirewallBackend=nftables в /etc/firewalld/firewalld.conf.
Файл: /etc/nftables/bgp-allow.nft. Имя файла может быть любым, оно указывается дальше в systemd-юните.
#!/usr/sbin/nft -f
flush ruleset
# IP-адреса BGP-пиров, с которых разрешён доступ
define bgp_ipv4_peers = {
172.16.25.168
}
table inet filter {
chain INPUT {
type filter hook input priority filter; policy drop;
ct state established,related accept
iif lo accept
# Разрешить весь трафик от BGP-пиров
ip saddr $bgp_ipv4_peers accept
# Вариант строже: разрешить от пиров только BGP (TCP 179)
#tcp dport 179 ip saddr $bgp_ipv4_peers accept
}
}
drop: всё, что явно не разрешено, отбрасывается. Если в netns роутера используются другие протоколы, добавьте для них разрешающие правила. Например:ip protocol ospf accept;meta l4proto ipv6-icmp accept, иначе перестанет работать Neighbor Discovery.flush ruleset очищает правила только в том netns, в котором выполняется файл. Правила основной системы не затрагиваются.
chmod 600 /etc/nftables/bgp-allow.nft
Файл: /etc/systemd/system/nftables.netns.service
[Unit] Description=nftables rules for netns router Documentation=man:nft(8) # Юнит, запускающий роут-демон в netns router Wants=bird.netns.service After=bird.netns.service [Service] Type=oneshot ProtectSystem=full ProtectHome=true # Укажите имя файла из шага 1 и имя netns из параметра router_netns ExecStart=/sbin/ip netns exec router /sbin/nft -f /etc/nftables/bgp-allow.nft ExecReload=/sbin/ip netns exec router /sbin/nft 'flush ruleset; include "/etc/nftables/bgp-allow.nft";' ExecStop=/sbin/ip netns exec router /sbin/nft flush ruleset RemainAfterExit=yes [Install] WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now nftables.netns.service
ip netns exec router nft list ruleset