如何在不使用 IPTables 或 Firewalld 的情况下阻止 CentOS 中的出站流量?

如何在不使用 IPTables 或 Firewalld 的情况下阻止 CentOS 中的出站流量?

我正在尝试实现诸如混沌工程之类的东西,因此手动实现功能。其中一项功能是在不使用 IPTables 或 firewalld 的情况下阻止出站 DNS 流量。

我在这里完全没有想法,我的需求如下

  • 没有 IPTables 或防火墙
  • 我应该能够提及协议类型( TCP/UDP )
  • 和端口号

任何帮助,非常感谢。

谢谢。

答案1

以下是“不使用IPTables或firewalld”的三种方法。如果可能的话,我也会处理 IPv6。

  • 交通管制tc:可能是 CentOS 的任何版本,甚至是 EOL 版本

    需要知道出站接口名称(以及如何提前完成路由)。假设将用于传出流量的接口名为eth0。您可以使用该tc命令添加筛选在一个界面上。过滤器只能添加到有类规则上,因此为此目的添加了一个“虚拟”有类 qdisc,其自己的属性不会在这里真正使用:普里奥

    tc qdisc add dev eth0 root handle 1: prio
    tc filter add dev eth0 parent 1: pref 1 protocol ip basic match '
        (cmp (u8 at 9 layer network eq 6) or cmp (u8 at 9 layer network eq 17)) and
            cmp(u16 at 2 layer transport eq 53)' action drop
    '
    tc filter add dev eth0 parent 1: pref 2 protocol ipv6 basic match '
        (cmp (u8 at 6 layer network eq 6) or cmp (u8 at 6 layer network eq 17)) and
            cmp(u16 at 2 layer transport eq 53)' action drop
    '
    

    笔记:

    • u8 9层网络对于 IPv4 是协议字段IPv4 标头:将其值与 6 进行比较TCP协议或 17 为UDP协议
    • u8 6层网络对于 IPv6 来说,是几乎但不等效的 Next 标头字段IPv6固定标头。这并不能涵盖所有情况:如果有扩展头固定头和有效负载头之间,那么上面使用的 IPv6 固定头的 Next 头将与有效负载协议不匹配(6 表示TCP协议或 17 为UDP协议)。由于可能有多个链接的扩展标头,TC除非它在某些模块中获得内置支持,否则不太适合于此。
    • u16 2 层传输上面是目的港,对于两个都 协议

    这不会被本地应用程序捕获。

  • nftables: nft。 CentOS 7 或 8

    甚至 CentOS 7 的 3.10 内核也有一个向后移植的版本nftables。只需添加相当于iptablesnftables。一个内网family 表同时处理 IPv4 和 IPv6。

    nft add table inet t
    nft add chain inet t output '{ type filter hook output priority 0; policy accept; }'
    nft add rule inet t output udp dport 53 drop
    nft add rule inet t output tcp dport 53 drop
    

    目前还不清楚本地应用程序是否会因为这些规则而捕获错误。

    除非添加例外,否则还将影响从本地系统到自身的本地连接。

  • 策略路由:ip rule。 CentOS 8 只因为这个需要内核 >= 4.17

    较新的内核还可以使用端口来匹配路由规则。因此,只需制定规则,将任何内容丢弃到 udp 端口​​ 53 和 tcp 端口 53,而不是路由它。

    ip rule add ipproto udp dport 53 blackhole
    ip rule add ipproto tcp dport 53 blackhole
    ip -6 rule add ipproto udp dport 53 blackhole
    ip -6 rule add ipproto udp dport 53 blackhole
    

    这将被具有 EINVAL 的本地应用程序捕获(如......中所述)ip route(8))。更改网络“中断”的类型可能会改变错误,从而改变行为(例如:从黑洞禁止)。

    不会影响从系统到自身的本地连接(其本地路由评估发生在之前,优先级为 0)。

相关内容