[1] Nftables – włączenie usługi

8 marca 2022 Wyłączono przez Adam [zicherka] Nogły

Tutaj przedstawię podstawowe operacje na Nftables.

[1] W RHEL 8 / CentOS Stream 8 nftables jest używany jako domyślny backend zapory.

[root@vlsr01 ~]# grep nftables /etc/firewalld/firewalld.conf
#       - nftables (default)
FirewallBackend=nftables

[2] Jeśli używasz nftables bezpośrednio, wyłącz usługę firewalld, aby uniknąć wzajemnego wpływu różnych usług zapory.

Ponadto włącz nftables.service, który przywraca zestaw reguł filtrowania po ponownym uruchomieniu systemu.

[root@vlsr01 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@vlsr01 ~]# systemctl enable --now nftables
Created symlink /etc/systemd/system/multi-user.target.wants/nftables.service → /usr/lib/systemd/system/nftables.service.

# [nftables.service] przywraca/wczytuje reguły z [/etc/sysconfig/nftables.conf]
[root@vlsr01 ~]# systemctl cat nftables.service
# /usr/lib/systemd/system/nftables.service

[Unit]
Description=Netfilter Tables
Documentation=man:nft(8)
Wants=network-pre.target
Before=network-pre.target

[Service]
Type=oneshot
ProtectSystem=full
ProtectHome=true
ExecStart=/sbin/nft -f /etc/sysconfig/nftables.conf
ExecReload=/sbin/nft 'flush ruleset; include "/etc/sysconfig/nftables.conf";'
ExecStop=/sbin/nft flush ruleset
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
# [/etc/sysconfig/nftables.conf] domyślnie nie jest ustawiony

[root@vlsr01 ~]# cat /etc/sysconfig/nftables.conf
# Uncomment the include statement here to load the default config sample
# in /etc/nftables for nftables service.
#include "/etc/nftables/main.nft"
# To customize, either edit the samples in /etc/nftables, append further
# commands to the end of this file or overwrite it after first service
# start by calling: 'nft list ruleset >/etc/sysconfig/nftables.conf'.

[3] Jeśli przełączysz się na usługę nftables za pomocą zestawu reguł skonfigurowanego na Firewalld, skonfiguruj jak poniżej.

# potwierdzić reguły Firewalld (na podstawie tego, że firewalld jest uruchomiony)
[root@vlsr01 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: audit cockpit dhcpv6-client ftp ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# potwierdź obecny zestaw reguł nftables jako backend Firewalld
[root@vlsr01 ~]# nft list ruleset
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }
        chain FORWARD {
                type filter hook forward priority filter; policy accept;
        }
        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}
table ip6 filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }
. . . . .

# wypisz aktualny zestaw reguł do [/etc/sysconfig/nftables.conf]
[root@vlsr01 ~]# nft list ruleset > /etc/sysconfig/nftables.conf

# wyłącz usługę firewalld i włącz usługę nftables
[root@vlsr01 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@vlsr01 ~]# systemctl enable --now nftables
Created symlink /etc/systemd/system/multi-user.target.wants/nftables.service → /usr/lib/systemd/system/nftables.service.

# potwierdź wczytane reguły
[root@vlsr01 ~]# nft list ruleset
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }
        chain FORWARD {
                type filter hook forward priority filter; policy accept;
        }
        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}
table ip6 filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }
. . . . .

# na przykład możliwe jest pokazanie ustawień dozwolonych usług [services: cockpit dhcpv6-client ssh] na [firewalld] w następujący sposób
[root@vlsr01 ~]# nft list chain inet firewalld filter_IN_public_allow
table inet firewalld {
        chain filter_IN_public_allow {
                tcp dport 22 ct state { new, untracked } accept
                ip6 daddr fe80::/64 udp dport 546 ct state { new, untracked } accept
                tcp dport 9090 ct state { new, untracked } accept
                tcp dport 60 ct state { new, untracked } accept
                tcp dport 21 ct helper set "helper-ftp-tcp"
                tcp dport 21 ct state { new, untracked } accept
        }
}