找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 917|回复: 5

Openwrt的默认nft table疑问 ?

[复制链接]
发表于 2023-9-28 06:33 | 显示全部楼层 |阅读模式



提出问题:
      为什么默认的nft table里的 “wan的入向”,只有tcp reject ? 难道udp流量都默认放行??

如下是标准的nft table, 在 chain input_wan { } 最后一句 jump reject_from_wan, 然后去到  chain reject_from_wan {} 最后一句jump handle_reject, 然后到chain handle_reject {}最后一句meta l4proto tcp reject with tcp reset, 这里面只有tcp reject, 没有udp reject!


root@OpenWrt:~# nft -s list ruleset
table inet fw4 {
        chain input {
                type filter hook input priority filter; policy accept;
                iifname "lo" accept comment "!fw4: Accept traffic from loopback"
                ct state established,related accept comment "!fw4: Allow inbound established and related flows"
                tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
                iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
                iifname "eth1" jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                ct state established,related accept comment "!fw4: Allow forwarded established and related flows"
                iifname "br-lan" jump forward_lan comment "!fw4: Handle lan IPv4/IPv6 forward traffic"
                iifname "eth1" jump forward_wan comment "!fw4: Handle wan IPv4/IPv6 forward traffic"
                jump handle_reject
        }

        chain output {
                type filter hook output priority filter; policy accept;
                oifname "lo" accept comment "!fw4: Accept traffic towards loopback"
                ct state established,related accept comment "!fw4: Allow outbound established and related flows"
                oifname "br-lan" jump output_lan comment "!fw4: Handle lan IPv4/IPv6 output traffic"
                oifname "eth1" jump output_wan comment "!fw4: Handle wan IPv4/IPv6 output traffic"
        }

        chain prerouting {
                type filter hook prerouting priority filter; policy accept;
                iifname "br-lan" jump helper_lan comment "!fw4: Handle lan IPv4/IPv6 helper assignment"
        }

        chain handle_reject {
                meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic"
                reject comment "!fw4: Reject any other traffic"
        }

        chain syn_flood {
                limit rate 25/second burst 50 packets return comment "!fw4: Accept SYN packets below rate-limit"
                drop comment "!fw4: Drop excess packets"
        }

        chain input_lan {
                jump accept_from_lan
        }

        chain output_lan {
                jump accept_to_lan
        }

        chain forward_lan {
                jump accept_to_wan comment "!fw4: Accept lan to wan forwarding"
                jump accept_to_lan
        }

        chain helper_lan {
        }

        chain accept_from_lan {
                iifname "br-lan" counter accept comment "!fw4: accept lan IPv4/IPv6 traffic"
        }

        chain accept_to_lan {
                oifname "br-lan" counter accept comment "!fw4: accept lan IPv4/IPv6 traffic"
        }

        chain input_wan {
                meta nfproto ipv4 udp dport 68 counter accept comment "!fw4: Allow-DHCP-Renew"
                icmp type echo-request counter accept comment "!fw4: Allow-Ping"
                meta nfproto ipv4 meta l4proto igmp counter accept comment "!fw4: Allow-IGMP"
                tcp dport 22 counter accept comment "!fw4: Allow-SSH"
                meta nfproto ipv6 udp dport 546 counter accept comment "!fw4: Allow-DHCPv6"
                ip6 saddr fe80::/10 icmpv6 type . icmpv6 code { mld-listener-query . no-route, mld-listener-report . no-route, mld-listener-done . no-route, mld2-listener-report . no-route } counter accept comment "!fw4: Allow-MLD"
                icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply, nd-router-solicit, nd-router-advert } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Input"
                icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, nd-neighbor-solicit . no-route, nd-neighbor-advert . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Input"
                jump reject_from_wan
        }

        chain output_wan {
                jump accept_to_wan
        }

        chain forward_wan {
                icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Forward"
                icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Forward"
                meta l4proto esp counter jump accept_to_lan comment "!fw4: Allow-IPSec-ESP"
                udp dport 500 counter jump accept_to_lan comment "!fw4: Allow-ISAKMP"
                jump reject_to_wan
        }

        chain accept_to_wan {
                oifname "eth1" counter accept comment "!fw4: accept wan IPv4/IPv6 traffic"
        }

        chain reject_from_wan {
                iifname "eth1" counter jump handle_reject comment "!fw4: reject wan IPv4/IPv6 traffic"
        }

        chain reject_to_wan {
                oifname "eth1" counter jump handle_reject comment "!fw4: reject wan IPv4/IPv6 traffic"
        }

        chain dstnat {
                type nat hook prerouting priority dstnat; policy accept;
        }

        chain srcnat {
                type nat hook postrouting priority srcnat; policy accept;
                oifname "eth1" jump srcnat_wan comment "!fw4: Handle wan IPv4/IPv6 srcnat traffic"
        }

        chain srcnat_wan {
                meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 wan traffic"
        }

        chain raw_prerouting {
                type filter hook prerouting priority raw; policy accept;
        }

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

        chain mangle_prerouting {
                type filter hook prerouting priority mangle; policy accept;
        }

        chain mangle_postrouting {
                type filter hook postrouting priority mangle; policy accept;
        }

        chain mangle_input {
                type filter hook input priority mangle; policy accept;
        }

        chain mangle_output {
                type route hook output priority mangle; policy accept;
        }

        chain mangle_forward {
                type filter hook forward priority mangle; policy accept;
                iifname "eth1" tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 ingress MTU fixing"
                oifname "eth1" tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 egress MTU fixing"
        }
}

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2023-9-28 08:15 | 显示全部楼层
你那只是handle_reject。
把每一段代码输到bard.google.com,问它,bard替你解决疑难,你心中便明白了,会说:“bard的指示,那是再也不会错的。我们有什么事情不明白,只要去问bard,他总是能好好的教导我们。”
bard唯一不知道的是,你深深爱着的人,却深深的爱着别人,有什么办法?
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-9-28 08:19 | 显示全部楼层
请解释openwer的防火墙:        
chain handle_reject {
                meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic"
                reject comment "!fw4: Reject any other traffic"
        }


这个防火墙规则的作用是拒绝所有入站流量,包括 TCP 和非 TCP 流量。

chain handle_reject 是防火墙规则链的名称。
meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic" 是一个规则,它拒绝所有入站 TCP 流量。它使用 meta l4proto tcp 来匹配 TCP 流量,使用 reject with tcp reset 来拒绝该流量,并使用 comment "!fw4: Reject TCP traffic" 来添加注释。
reject comment "!fw4: Reject any other traffic" 是一个规则,它拒绝所有其他入站流量。它使用 reject 来拒绝该流量,并使用 comment "!fw4: Reject any other traffic" 来添加注释。
因此,这个防火墙规则将拒绝所有入站流量,无论其协议类型如何。

以下是这个防火墙规则的详细解释:

chain handle_reject 是防火墙规则链的名称。防火墙规则链是一个逻辑组,用于将规则组织在一起。在这个例子中,handle_reject 链用于拒绝所有入站流量。
meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic" 是一个规则,它拒绝所有入站 TCP 流量。它使用 meta l4proto tcp 来匹配 TCP 流量,使用 reject with tcp reset 来拒绝该流量,并使用 comment "!fw4: Reject TCP traffic" 来添加注释。
meta l4proto tcp 匹配所有 TCP 流量。
reject with tcp reset 拒绝该流量,并使用 TCP RST 包来终止该连接。
comment "!fw4: Reject TCP traffic" 添加注释,说明该规则的作用。
reject comment "!fw4: Reject any other traffic" 是一个规则,它拒绝所有其他入站流量。它使用 reject 来拒绝该流量,并使用 comment "!fw4: Reject any other traffic" 来添加注释。
reject 拒绝该流量。
comment "!fw4: Reject any other traffic" 添加注释,说明该规则的作用。
这个防火墙规则可以用于以下场景:

在开发环境中,您可能希望拒绝所有入站流量,以防止恶意软件或其他攻击。
在生产环境中,您可能希望拒绝所有入站流量,除非它们来自受信任的源。
当然,您可以根据您的需要修改这个防火墙规则。例如,您可以添加规则来允许特定的流量,例如来自特定 IP 地址或端口的流量。

点评

谢谢大佬, 我没看到这句 reject comment "!fw4: Reject any other traffic", 这句的命令,就是reject, 其没有指明是udp,还是tcp, 也就是说是reject 所有udp流量了 我理解为什么画蛇添足有第一句meta l4proto  详情 回复 发表于 2023-9-28 09:09
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-9-28 08:19 | 显示全部楼层
chain input_wan {
                meta nfproto ipv4 udp dport 68 counter accept comment "!fw4: Allow-DHCP-Renew"
                icmp type echo-request counter accept comment "!fw4: Allow-Ping"
                meta nfproto ipv4 meta l4proto igmp counter accept comment "!fw4: Allow-IGMP"
                tcp dport 22 counter accept comment "!fw4: Allow-SSH"
                meta nfproto ipv6 udp dport 546 counter accept comment "!fw4: Allow-DHCPv6"
                ip6 saddr fe80::/10 icmpv6 type . icmpv6 code { mld-listener-query . no-route, mld-listener-report . no-route, mld-listener-done . no-route, mld2-listener-report . no-route } counter accept comment "!fw4: Allow-MLD"
                icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply, nd-router-solicit, nd-router-advert } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Input"
                icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, nd-neighbor-solicit . no-route, nd-neighbor-advert . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Input"
                jump reject_from_wan
        }
这个防火墙规则链是 OpenWrt 上默认的 WAN 输入规则链。它允许以下流量:

DHCP Renew 流量(UDP 端口 68)
Ping 请求(ICMP Echo Request)
IGMP 流量
SSH 流量(TCP 端口 22)
DHCPv6 流量(UDP 端口 546)
MLD 流量(IPv6 多播监听发现)
ICMPv6 流量,限制为每秒 1000 个包
所有其他流量都将被拒绝。

以下是这个防火墙规则链的详细解释:

meta nfproto ipv4 udp dport 68 counter accept comment "!fw4: Allow-DHCP-Renew" 允许 DHCP Renew 流量(UDP 端口 68)。
icmp type echo-request counter accept comment "!fw4: Allow-Ping" 允许 Ping 请求(ICMP Echo Request)。
meta nfproto ipv4 meta l4proto igmp counter accept comment "!fw4: Allow-IGMP" 允许 IGMP 流量。
tcp dport 22 counter accept comment "!fw4: Allow-SSH" 允许 SSH 流量(TCP 端口 22)。
meta nfproto ipv6 udp dport 546 counter accept comment "!fw4: Allow-DHCPv6" 允许 DHCPv6 流量(UDP 端口 546)。
ip6 saddr fe80::/10 icmpv6 type . icmpv6 code { mld-listener-query . no-route, mld-listener-report . no-route, mld-listener-done . no-route, mld2-listener-report . no-route } counter accept comment "!fw4: Allow-MLD" 允许 MLD 流量(IPv6 多播监听发现)。
icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply, nd-router-solicit, nd-router-advert } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Input" 允许 ICMPv6 流量,限制为每秒 1000 个包。
icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, nd-neighbor-solicit . no-route, nd-neighbor-advert . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter accept comment "!fw4: Allow-ICMPv6-Input" 允许 ICMPv6 流量,限制为每秒 1000 个包。
jump reject_from_wan 跳转到 reject_from_wan 规则链,该规则链拒绝所有流量。
这个防火墙规则链可以用于以下场景:

在家庭或小型办公室网络中,您可以使用这个防火墙规则链来保护您的网络免受常见攻击。
在大型企业网络中,您可以使用这个防火墙规则链作为基础规则链,并在其之上添加更具体的规则。
当然,您可以根据您的需要修改这个防火墙规则链。例如,您可以添加规则来允许特定的流量,例如来自特定 IP 地址或端口的流量。您还可以修改规则链的顺序,以确保您想要允许的流量始终被允许。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-28 09:09 | 显示全部楼层
tr069 发表于 2023-9-28 08:19
请解释openwer的防火墙:        
chain handle_reject {
                meta l4proto tcp reject with t ...

谢谢大佬, 我没看到这句 reject comment "!fw4: Reject any other traffic", 这句的命令,就是reject, 其没有指明是udp,还是tcp, 也就是说是reject  所有udp流量了

我理解为什么画蛇添足有第一句meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic", 这是因为只有tcp的拒绝方式有两种, reject和drop。  而udp似乎只有reject一种。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-9-29 09:26 | 显示全部楼层
我也这几天刚学nftables。由于是面向非连接的,udp是不能reject的。从你的配置看,wan input的tcp和upd都是不开放的
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-10-6 06:48

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表