xiaorouji / openwrt-passwall

7.02k stars 2.62k forks source link

[Bug]: 访问控制功能NFTABLE表项配置存在缺失和冗余 #2676

Closed Joee-D closed 1 year ago

Joee-D commented 1 year ago

描述您遇到的bug

1.TPOXY模式,访问控制设置,设置某一段IP不走代理(TCP、UDP),TCP仍然会走代理 2.跳过全部端口模式下,生成了太多无用表项

复现此Bug的步骤

1.访问控制配置 image 2.查看防火墙表项 image

设置为redir模式没问题,tproxy模式有问题

您想要实现的目的

1.生成正确的TCP直连表项,当前看没有正确生成 https://github.com/xiaorouji/openwrt-passwall2/blob/main/luci-app-passwall2/root/usr/share/passwall2/nftables.sh 似乎是267行,tcp对于PSW_MANGLE没有生效,PSW_NAT下生效 nft "add rule inet fw4 $nft_prerouting_chain ${_ipt_source} ip protocol tcp tcp dport {$tcp_no_redir_ports} counter return comment \"$remarks\" udp是生效了的 nft add rule inet fw4 PSW_MANGLE meta l4proto udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return

2.不应该出现如上标出的冗余表项。 passwall没有不代理tcp/udpd的tcp_proxy_mode、udp_proxy_mode配置,导致脚本中的跳过功能不生效,只能通过曲线设置不代理端口的方式设置,期望在不代理所有端口的模式下,(TCP、UDP分别)仅有如下两条规则

nft "add rule inet fw4 PSW_MANGLE ip protocol udp ${_ipt_source} counter return comment \"$remarks\""
nft "add rule inet fw4 PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} counter return comment \"$remarks\"" 2>/dev/null

日志信息

config acl_rule
        option enabled '1'
        option remarks 'Direct'
        option sources '192.168.1.10-192.168.1.100'
        option tcp_no_redir_ports '1:65535'
        option udp_no_redir_ports '1:65535'
        option tcp_redir_ports 'default'
        option udp_redir_ports 'default'
        option node 'default'
ip protocol tcp ip saddr 192.168.1.10-192.168.1.100 ip daddr 198.18.0.0/16 counter packets 0 bytes 0 jump PSW2_RULE comment "Direct"
ip protocol tcp ip saddr 192.168.1.10-192.168.1.100 counter packets 30 bytes 3226 jump PSW2_RULE comment "Direct"
meta l4proto tcp ip saddr 192.168.1.10-192.168.1.100 counter packets 30 bytes 3226 meta mark 0x00000001 tproxy ip to :1041 comment "Direct"
ip protocol tcp ip saddr 192.168.1.10-192.168.1.100 counter packets 29 bytes 3186 return comment "Direct"
meta l4proto udp ip saddr 192.168.1.10-192.168.1.100 counter packets 11 bytes 695 return
ip protocol udp ip saddr 192.168.1.10-192.168.1.100 ip daddr 198.18.0.0/16 counter packets 0 bytes 0 jump PSW2_RULE comment "Direct"
ip protocol udp ip saddr 192.168.1.10-192.168.1.100 jump PSW2_RULE comment "Direct"
ip protocol udp ip saddr 192.168.1.10-192.168.1.100 counter packets 0 bytes 0 meta mark 0x00000001 tproxy ip to :1041 comment "Direct"
ip protocol udp ip saddr 192.168.1.10-192.168.1.100 counter packets 0 bytes 0 return comment "Direct"

截图

No response

系统相关信息

Passwall2版本:1.17-2

其他信息

建议: 1.支持passwall跳过udp代理、tcp代理的acl模式选择 2.或者重新设计跳过全部端口的逻辑

简单更改思路建议: 判断acl中 tcp_no_redir_ports如果为1:65535,设置tcp_proxy_mode=“disable” udp_no_redir_ports如果为1:65535,设置udp_proxy_mode=“disable” 这样行为应该就和passwall一致了

Joee-D commented 1 year ago

提错项目,改到passwall2