AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1156197
Accepted
ange
ange
Asked: 2024-03-13 20:30:34 +0800 CST2024-03-13 20:30:34 +0800 CST 2024-03-13 20:30:34 +0800 CST

绕过 nftables 丢弃规则

  • 772

太棒了;如果另一个表中存在匹配的丢弃(如firewalld的默认规则),则网桥(见下文)将不起作用。

你好,
我正在构建自己的虚拟机库(类似于Quickemu)。
我对桥接的防火墙规则有疑问。我从 iptables-nft 开始,它工作得很好,直到我在 fedora 上测试了我的脚本。无论我做什么,firewalld 都会阻止一切。因此,我使用 nftables 尝试直接绕过firewalld规则,但即使如此,我也无法找到一种方法使其在不删除firewalld规则的情况下工作。

据我了解,优先级仅影响测试规则的顺序,如果有丢弃,即使在最后,数据包也会被丢弃?

有没有办法绕过我不知道的这种行为?我尝试查看标记,但不确定这是正确的解决方案。

这是我用于桥的规则(如果规则集中没有其他表,则效果很好):

#!/usr/bin/nft -f
# vim:set ts=2 sw=2 et:

table ip QEMU
delete table ip QEMU
table ip QEMU {
  chain input {
    type filter hook input priority filter - 1;

    ct state {established,related} iifname "virbr0" counter accept
  }

  chain forward {
    type filter hook forward priority filter - 1;

    ct state {established,related} iifname "virbr0" counter accept
  }

  chain postrouting {
    type nat hook postrouting priority srcnat;

    iifname "virbr0" counter masquerade
  }
}
firewall
  • 1 1 个回答
  • 27 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2024-03-14T05:59:58+08:002024-03-14T05:59:58+08:00

    吹毛求疵:尽管virbr0是一个桥接接口,但这只是关于路由,而不是桥接。防火墙发生在网桥的路由端:网桥接口本身,而不是网桥端口(这需要防火墙table bridge而不是table ip防火墙)。所以下面就不再提及桥接这个词了。

    当数据包在 netfilter(包括nftables)内被丢弃时,它会保持丢弃状态。当数据包被接受时,它将继续遍历其他钩子,可能会导致该数据包稍后被丢弃,如以下提醒nft(8):

    接受

    终止规则集评估并接受数据包。数据包仍然可以稍后被另一个钩子丢弃,例如,前向钩子中的接受仍然允许稍后在后路由钩子中丢弃数据包,或者另一个具有更高优先级编号并随后在处理管道中进行评估的前向基本链。

    降低

    终止规则集评估并丢弃数据包。掉落立即发生,不再评估进一步的链条或钩子。不可能再次接受稍后链中的数据包,因为不再对数据包进行评估。

    这会导致具有默认丢弃行为并仅接受某些流(从安全角度来看这是一个良好的行为)的防火墙工具,而不是具有默认接受行为并丢弃某些流(从安全角度来看这不太好)的工具变得神秘其他防火墙工具的决定:它们会放弃其他工具会选择接受的内容。

    因此,要使两种工具共存,通常必须对它们执行操作。


    对于这种情况,可以告诉firewalld忽略(即:accept)与一个或多个特定接口相关的流,因此该特定接口的处理仍然由其他工具控制。如果在其他地方不进行此类处理,则可能会打开安全漏洞,因此必须适当考虑这一点。

    这个答案需要firewalld >= 0.9.0 来利用最初引入的firewalld策略:

    策略以有状态单向方式应用于区域之间流动的流量。这允许根据流量方向采取不同的策略。

    +----------+     policyA     +----------+
    |          |  <------------  |          |
    | libvirt  |                 |  public  |
    |          |  ------------>  |          |
    +----------+     policyB     +----------+
    

    区域用于远程端和主机之间,策略用于区域之间的路由。他们将重用附加到区域的接口。

    创建一个新区域:

    firewall-cmd --permanent --new-zone=local-ignore
    

    让该区域默认接受任何内容:

    firewall-cmd --permanent --zone=local-ignore --set-target=ACCEPT
    

    将目标接口添加到该区域:

    firewall-cmd --permanent --zone=local-ignore --add-interface=virbr0 
    

    这将处理虚拟机和主机之间的流量(重新加载规则后)。

    添加将使用此区域的防火墙策略,一次用于入口,一次用于出口,与ANY另一侧一样,并将它们设置为默认行为ACCEPT:

    firewall-cmd --permanent --new-policy=local-ignore-from
    firewall-cmd --permanent --policy=local-ignore-from --add-ingress-zone=local-ignore
    firewall-cmd --permanent --policy=local-ignore-from --add-egress-zone=ANY
    firewall-cmd --permanent --policy=local-ignore-from --set-target=ACCEPT
    
    firewall-cmd --permanent --new-policy=local-ignore-to
    firewall-cmd --permanent --policy=local-ignore-to --add-egress-zone=local-ignore
    firewall-cmd --permanent --policy=local-ignore-to --add-ingress-zone=ANY
    firewall-cmd --permanent --policy=local-ignore-to --set-target=ACCEPT
    

    最后重新加载规则:

    firewall-cmd --reload
    

    这可以保证与virbr0不受firewalld阻碍相关的流量。

    现在(巨大的)nftables表inet firewalld应该与 OP 的 table 和平共存ip QEMU。无论firewalld是否正在运行(即:它的规则被删除)都不应该改变与virbr0. 所有限制都必须在表中处理ip QEMU。

    目前表ip QEMU根本不限制任何内容(没有删除规则或删除策略),因此应该正确修复。不应使用丢弃策略,否则这将在另一个方向再次导致刚刚解决的问题。virbr0只需删除其中任何与(尤其是与virbr0)相关的不需要的流量即可。


    可以将其他接口添加到忽略列表中,例如添加lxcbr0(意思是:让 LXC 不受firewalld阻碍):

    firewall-cmd --permanent --zone=local-ignore --add-interface=lxcbr0
    firewall-cmd --reload
    
    • 1

相关问题

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • MSMQ 防火墙端口

  • IP-KVM(在我的例子中是 ADDER Ipeps):轻松防火墙穿越

  • 远程连接 sql server 不工作,但如果防火墙禁用它呢?

  • 服务器 2003 R2 上的 Cisco VPN 客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve