Verify steps
Description

如图,启用 DNS 劫持、IPv6 透明代理的情况下,ShellCrash 会在 prerouting_dns 以及 prerouting 链中添加规则,屏蔽所有外部请求。这个设计是不合理的
它会在 prerouting 阶段就拒绝掉所有不是自己网段的请求。而 openwrt 防火墙通信规则改的是 input_wan 链。即使用户 自己在通信规则里放行 特定端口,也会被 shellcrash 在 prerouting 阶段就拦截下来
如果是处于安全考虑,防止 clash 的 dns 被投到公网上的话,那也它应该只拒绝掉 clash 监听的 dns(udp 1053 端口)。而且 openwrt 的防火墙默认就会在 input 链中拒绝掉除用户规则外的所有入站请求,这部分其实不用 ShellCrash 来做(绝大多数系统的防火墙都是这样)
可以在 ShellCrash 运行的情况下,把路由器 22 端口转发到 wan,然后公网连路由器 SSH 来直接复现
观察到以下几段相关代码(iptables 和 nftables,以及局域网黑白名单的模式都有):
|
nft add rule inet shellcrash "$1"_dns ip saddr != {$HOST_IP} return #屏蔽外部请求 |
|
[ "$1" = 'ip6tables' ] && { #屏蔽外部请求 |
|
nft add rule inet shellcrash $1 ip saddr {$FL_IP} return |
Verify steps
Description
如图,启用 DNS 劫持、IPv6 透明代理的情况下,ShellCrash 会在 prerouting_dns 以及 prerouting 链中添加规则,屏蔽所有外部请求。这个设计是不合理的
它会在 prerouting 阶段就拒绝掉所有不是自己网段的请求。而 openwrt 防火墙通信规则改的是 input_wan 链。即使用户 自己在通信规则里放行 特定端口,也会被 shellcrash 在 prerouting 阶段就拦截下来
如果是处于安全考虑,防止 clash 的 dns 被投到公网上的话,那也它应该只拒绝掉 clash 监听的 dns(udp 1053 端口)。而且 openwrt 的防火墙默认就会在 input 链中拒绝掉除用户规则外的所有入站请求,这部分其实不用 ShellCrash 来做(绝大多数系统的防火墙都是这样)
可以在 ShellCrash 运行的情况下,把路由器 22 端口转发到 wan,然后公网连路由器 SSH 来直接复现
观察到以下几段相关代码(iptables 和 nftables,以及局域网黑白名单的模式都有):
ShellCrash/scripts/start.sh
Line 1315 in ed13d0d
ShellCrash/scripts/start.sh
Line 1050 in ed13d0d
ShellCrash/scripts/start.sh
Line 1241 in ed13d0d