重启后 nftables 会发生变化

重启后 nftables 会发生变化

这是我的/etc/sysconfig/nftables.conf

#!/usr/sbin/nft -f
flush ruleset
table ip filter {
    chain input {
        type filter hook input priority filter; policy accept;
        ct state established,related counter packets 264 bytes 17996 accept
        ct state invalid drop
        tcp dport 22 ip saddr 192.168.0.0/16 accept
        udp sport 53 accept
        drop
    }

    chain forward {
        type filter hook forward priority filter; policy accept;
    }

    chain output {
        type filter hook output priority filter; policy accept;
    }
}

当我使用nft -f /etc/sysconfig/nftables.conf但重新启动后,我还会在上面显示的表格下方得到这些附加规则:

table bridge 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;
    }
}

我不明白是什么?

附加问题。我正在尝试加固机器。该机器本质上应该用于浏览网页,因此必须允许这样做。我希望能够从本地网络通过 ssh 连接到它。我是否错过了一些重要的事情?

答案1

这是由较新版本的命令创建的兼容性表和链ebtables,用于操作桥接器,但使用nftables内核 API 在ebtables兼容模式。有些东西在某处运行了ebtables命令,即使只是为了验证没有ebtables存在规则,或者可能自动加载一些ebtables规则集,已转换为nftables规则集。

你可以通过几种方法知道就是这样(在 CentOS8 上):

  • 实际可执行文件

    # readlink -e /usr/sbin/ebtables
    /usr/sbin/xtables-nft-multi
    
  • 显示版本

    # ebtables -V
    ebtables 1.8.2 (nf_tables)
    
  • 规则监控

    术语1:

    # nft -f /etc/sysconfig/nftables.conf
    # nft monitor #command waits in event mode
    

    术语2:

    # ebtables -L
    Bridge table: filter
    
    Bridge chain: INPUT, entries: 0, policy: ACCEPT
    
    Bridge chain: FORWARD, entries: 0, policy: ACCEPT
    
    Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
    

    再次第 1 学期(Fedora 较新的nftables版本将显示网桥的-200优先级价值以其象征性的相等的filter):

    add table bridge filter
    add chain bridge filter INPUT { type filter hook input priority -200; policy accept; }
    add chain bridge filter FORWARD { type filter hook forward priority -200; policy accept; }
    add chain bridge filter OUTPUT { type filter hook output priority -200; policy accept; }
    # new generation 7 by process 16326 (ebtables)
    

由于基础链不包含任何规则并且具有接受政策,不会有任何影响。该系统还需要有一座桥才能使用这张桌子和链条。

如果 CentOS8 和您当前的 Fedora 版本仍然足够接近,这可能是通过使用 systemd 创建的ebtables服务来自iptables-ebtables包裹。如果不需要桥接过滤,可以考虑删除这个包。您仍然可以使用NFFT如果确实需要的话。

事实上,添加的桌子是家庭的告诉它是ebtables而不是iptables,ip6表或者arp表这都会产生相同的行为,如果尚未呈现的话,则会创建一个不同的表系列(分别是)。ip,ip6或者ARP)及其基础链。因此,应该避免使用相同的表名以避免任何冲突,或者至少不要使用相同的表+链组合(例如:NFFT(大写)链中的规则ip filter INPUT可能会与iptablesETC。)

有关此的更多信息,请参见此处:

从 iptables 迁移到 nftables - nftables wiki

旧版 xtables 工具 - nftables wiki

使用 iptables-nft:混合 Linux 防火墙 - Red Hat


关于附加问题:

您的规则似乎允许基本客户端使用(包括从 LAN 进行 SSH 访问),但有一个重要的例外:

udp sport 53 accept

将允许访问任何你系统的UDP端口,只要从UDP源端口53进行“扫描”即可。

将其替换为以下更明智的规则:

iif lo accept

允许本地通信不受阻碍(包括可能的本地 DNS 服务器)。

相关内容