文章
综合

与其等待自建代理服务器被墙 不如自己先“装死”骗过墙

本文主要阐述了如何通过在基于linux服务器上合理设置相关规则,对抗主动探测,降低被墙概率的操作。本文并不采用端口敲门方式来实现这一点,而是通过拒绝和丢弃相关报文的发出和进入,从而达到“装死”的目的。方法也很简单,只需要修改iptables相关配置文件和/etc/sysctl.conf即可。(若需直接采用相应的配置文件,请删除注释)

若使用了本文提供的方案,则可以达成如下目的: 1.对各种探测方式进行的探测均不回应(开放的端口除外,这就是为什么代理服务端软件需要使用防主动探测的方案,例如xray udp或者hysteria2) 2.不回应来自虚假ip地址报文的请求,降低噪音。其他方面的效果同1。

这是iptables的配置文件:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i lo -j ACCEPT
-A INPUT -i tailscale0 -j ACCEPT
-A INPUT -i op+ -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 9001 -j ACCEPT      # 需要开放的入站tcp端口写在这
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -j DROP
-A INPUT -p udp --sport 53 -j ACCEPT    # 为保证DNS解析正常,不要删除这条
-A INPUT -p udp --dport 9001 -j ACCEPT            # 需要开放的入站udp端口写在这
-A INPUT -p udp -j DROP
-A INPUT -p icmp --icmp-type 8 -j DROP  # 对于会被用于探测服务器是否存活的icmp报文,直接丢弃(相应丢弃的报文类别不影响正常连接网络)
-A INPUT -p icmp --icmp-type 11 -j DROP
-A INPUT -p icmp --icmp-type 13 -j DROP
-A INPUT -p icmp --icmp-type 30 -j DROP
-A INPUT -p icmp --icmp-type 42 -j DROP
-A INPUT -p icmp -j ACCEPT

-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp --tcp-flags ALL RST,ACK -j DROP # 禁止发出 connection refused
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -p icmp --icmp-type 3 -j DROP  # 对于会被用于探测服务器是否存活的icmp报文,直接丢弃(相应丢弃的报文类别不影响正常连接网络)
-A OUTPUT -p icmp --icmp-type 3/0 -j DROP
-A OUTPUT -p icmp --icmp-type 3/1 -j DROP
-A OUTPUT -p icmp --icmp-type 3/2 -j DROP
-A OUTPUT -p icmp --icmp-type 3/3 -j DROP
-A OUTPUT -p icmp --icmp-type 3/6 -j DROP
-A OUTPUT -p icmp --icmp-type 3/7 -j DROP
-A OUTPUT -p icmp --icmp-type 3/8 -j DROP
-A OUTPUT -p icmp --icmp-type 3/9 -j DROP
-A OUTPUT -p icmp --icmp-type 3/10 -j DROP
-A OUTPUT -p icmp --icmp-type 3/11 -j DROP
-A OUTPUT -p icmp --icmp-type 3/12 -j DROP
-A OUTPUT -p icmp --icmp-type 3/13 -j DROP
-A OUTPUT -p icmp --icmp-type 3/14 -j DROP
-A OUTPUT -p icmp --icmp-type 3/15 -j DROP
-A OUTPUT -p icmp --icmp-type 11 -j DROP
-A OUTPUT -p icmp --icmp-type 11/0 -j DROP
-A OUTPUT -p icmp --icmp-type 11/1 -j DROP
-A OUTPUT -p icmp --icmp-type 14 -j DROP
COMMIT

这是ip6tables的配置文件:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i lo -j ACCEPT
-A INPUT -i tailscale0 -j ACCEPT
-A INPUT -i op+ -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 9001 -j ACCEPT   # 需要开放的入站tcp端口写在这
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -j DROP
-A INPUT -p udp --sport 53 -j ACCEPT # 为保证DNS解析正常,不要删除这条
-A INPUT -p udp --dport 9001 -j ACCEPT   # 需要开放的入站udp端口写在这
-A INPUT -p udp -j DROP
-A INPUT -p icmpv6 --icmpv6-type 128 -j DROP  # 对于会被用于探测服务器是否存活的icmpv6报文,直接丢弃(相应丢弃的报文类别不影响正常连接网络)
-A INPUT -p icmpv6 -j ACCEPT

-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp --tcp-flags ALL RST,ACK -j DROP  # 禁止发出 connection refused
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 1 -j DROP  # 对于会被用于探测服务器是否存活的icmpv6报文,直接丢弃(相应丢弃的报文类别不影响正常连接网络)
-A OUTPUT -p icmpv6 --icmpv6-type 1/0 -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 1/3 -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 1/4 -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 3 -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 3/0 -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 3/1 -j DROP
-A OUTPUT -p icmpv6 --icmpv6-type 4/1 -j DROP
COMMIT

这是sysctl.conf所需要添加的相应条目:

# 拒绝处理ICMP路由重定向请求的报文
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 开启反向路由有效性验证,若一个IP来源通过任意反向路径均不可达,则相关报文会被直接丢弃
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
# 开启源IP地址有效性验证,无效报文会被直接丢弃
net.ipv4.conf.all.src_valid_mark = 1
net.ipv4.conf.default.src_valid_mark = 1

# 拒绝处理ICMPv6路由重定向请求的报文
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
菜单
  1. 曷彪  

    现在主动探测本来就没发挥什么作用,都是流量一大就给你丢包,然后就是被封

  2. linda 回复 曷彪 /p/206182

    流量大就丢包的话,墙内人下不了外国的bt种子,我记得很少有墙国人抱怨下外国种子下不了的

  3. 曷彪 回复 linda /p/206206

    防火墙早就能识别BT流量放行,反观你大规模不明流量一下就给你封了