@小杰不可以
@小杰不可以
动态 帖子 2 评论 0 短评 0 收到的赞 0 送出的赞 0
  1. 小杰不可以   在小组 国家局域网研究所 发表文章

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

    本文主要阐述了如何通过在基于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
    
  2. 小杰不可以   在小组 国家局域网研究所 发表文章

    教你在debian上用五分钟搭建好 openconnect vpn server

    这篇文章的主要内容是,让你用最短的时间让你在debian系统的服务器上搭建好openconnect vpn server,以供openconnect或者anyconnect客户端连接(黑莓手机、只能登录中国大陆AppleID的账号的IPhone对此是刚需):

    具体方法:

    第一步:使用apt安装所需的软件包

    apt-get install iptables-persistent ocserv
    

    第二步:修改配置文件

    首先,需要修改 /etc/sysctl.conf,以用于开启IP转发。(对于VPN服务器而言,这是必要的。确保以下内容存在于文件中,若不存在将以下内容添加到配置文件末尾即可)

    net.ipv4.ip_forward = 1
    net.ipv4.ip_forward_update_priority = 0
    net.ipv4.ip_forward_use_pmtu = 1
    net.ipv6.conf.all.forwarding = 1
    

    然后,继续需要修改 /etc/ocserv/ocserv.conf,以用于设置服务器基本配置参数。(这是必要的,以下贴出的配置文件中的信息可以按需修改,再编辑文件之前,建议将原始文件备份,以用作参考)

    # openconnect server user
    run-as-user = ocserv
    run-as-group = ocserv
    
    # require file while server run
    socket-file = /run/ocserv-socket
    chroot-dir = /var/lib/ocserv
    
    # isolate sub proccess control
    isolate-workers = true
    
    # net interface for server
    device = op
    
    # mtu size for server
    mtu = 1480
    
    # log level
    log-level = 1
    
    # auth method
    auth = "plain[/etc/ocserv/ocpasswd]"
     
    # maximum users allowed connect
    max-clients = 10
     
    # maximum client allowed connect for per user
    max-same-clients = 5
     
    # server listen address (default is all)
    # listen-host = 
     
    # server listen ports (default is 443, but can modified)
    tcp-port = 443
    udp-port = 443
     
    # mtu auto discovery for per tunnel
    try-mtu-discovery = true
     
    # user certificate type
    # cert-user-oid = 2.5.4.3
     
    # certificate and private key for server
    server-cert = /etc/ocserv/server.pem
    server-key = /etc/ocserv/server.key
     
    # dns while clients connected use
    dns = 8.8.8.8
    dns = 9.9.9.9
    tunnel-all-dns = true
    
    # route option (set it to default as a gateway)
    #route = 192.168.1.0/255.255.255.0
    route = default
     
    # enable cisco anyconnect compatible
    cisco-client-compat = true
    
    # keep alive interval
    keepalive = 32400
    dpd = 60
    mobile-dpd = 120
    
    # other option
    output-buffer = 0
    rate-limit-ms = 0
    
    # access control
    restrict-user-to-routes = false
    restrict-user-to-ports = ""
    
    # disconnected idle time
    # idle-timeout = 1200
    # mobile-idle-timeout = 1800
    
    # dtls protocol control
    dtls-legacy = true
    switch-to-tcp-timeout = 30
    tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.2"
    
    # compression control
    compression = true
    no-compress-limit = 0
    
    # speed limit by per client
    rx-data-per-sec = 0
    tx-data-per-sec = 0
    
    # client auth control
    auth-timeout = 240
    min-reauth-time = 300
    max-ban-score = 80
    ban-reset-time = 1200
    
    # client status control
    cookie-timeout = 600
    rekey-time = 172800
    deny-roaming = false
    use-occtl = true
    
    # internal network settings
    ipv4-network = 10.255.255.0/24
    ipv6-network = fd09::/80
    ipv6-subnet-prefix = 128
    client-bypass-protocol = false
    predictable-ips = true
    ping-leases = true
    net-priority = 3
    

    第三步:签发自签名SSL证书、设置相应的iptables转发规则

    首先,运行以下命令来签发一个自签名SSL证书。(命令运行后会提示填写相应信息,按照自己的需要按需填写即可,若未修改上述配置文件中的SSL证书私钥保存路径,则应将生成的文件放置在 /etc/ocserv 下)

    openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout server.key -out server.pem
    

    之后,为了确保客户端连接后能正常访问互联网,我们需要设置相应的规则以用作开启NAT转发。

    # 这几句话的意思是,允许相应网段的流量经过机器转发,如果不正确配置此规则,则客户端到公网的UDP连接是不通的
    iptables -I FORWARD -s 10.255.255.0/24 -j ACCEPT
    iptables -I FORWARD -d 10.255.255.0/24 -j ACCEPT
    ip6tables -I FORWARD -s fd09::/80 -j ACCEPT
    ip6tables -I FORWARD -d fd09::/80 -j ACCEPT
    # 这几句话的意思是,对于来源于VPN服务器的网段的流量,NAT之后再到公网
    iptables -A POSTROUTING -s 10.255.255.0/24 ! -o op+ -j MASQUERADE
    ip6tables -A POSTROUTING -s fd09::/80 ! -o op+ -j MASQUERADE
    

    设置完成规则后,需要将其保存到配置文件中才能永久生效,以下是具体方法(若服务器原本已经存在相应的配置文件,则此类方法可能不适用,请考虑将上述规则转换后直接写入配置文件)

    iptables-save >> /etc/iptables/rules.v4
    ip6tables-save >> /etc/iptables/rules.v6
    

    第四步:添加用户

    如果没有修改配置文件中用户验证的方法的话,默认是需要手动添加用户的,此时就需要添加用户到指定的配置文件中。(格式为 ocpasswd 用户名 -c /etc/ocserv/ocpasswd ,运行命令后会提示给相应的用户设置一个密码,若以后需要删除相应用户的话,直接修改对应的文件,删除相应行即可)

    ocpasswd boss -c /etc/ocserv/ocpasswd
    

    第五步:开启相应端口

    若服务器本身存在防火墙白名单规则的话,则需要按需开放防火墙端口,以下是对于iptables而言的方法。

    iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
    iptables -I INPUT -p udp --dport 端口号 -j ACCEPT
    

    第六步:重启服务器

    完成上述步骤后,就可以使用openconnect或者anyconnect客户端测试是否能正常连接了。

    可选步骤: 若能将服务器端的ocserv版本升级到1.2.1以上的话,还可以开启入口伪装功能,以让外界更难发现这是一个VPN服务器,若可以确认版本在此之上,只需要向配置文件添加以下内容到末尾,就可以开启伪装功能。(开启此功能后 客户端只能通过 https //SERVER/?secret 的方式连接到服务器)

    # camouflage
    camouflage = true
    camouflage_secret = "dark"
    camouflage_realm = "router admin panel"
    

    常见疑问:

    1.为什么搭建的服务连接速度特别慢? 这一般是由于客户端到服务器的网络质量不好导致的。若确认不是网络质量导致的问题,则可以通过修改配置文件的方式,将传输压缩功能关闭就可以了。

    2.我想要在iphone上连接,但是它登录的是中国大陆的appleid,我应该怎么做? 只需要在大陆区应用商店下载安装cisco anyconnect客户端,然后填写相应信息连接即可。

    3.我在河南省,这个方法在我这不可用怎么办? 不要尝试使用域名的方式连接,直接填写服务器IP连接就可以了。(若开启了伪装功能则将URL中的地址替换为服务器本身的IP地址就可以了)