Xray回落流量和真实WordPress网站共存

/ 0评 / 36

原理

Xray是最新出来的一套网络工具集合,脱胎于V2ray但部分功能比V2ray更加激进,例如XTLS和回落技术,XTLS作为Xray独有的传输方式,的确是超越了目前大部分类似软件的传输协议,既能够做到流量的加密又能做到性能的提升。

而回落功能本质上就是一种类似反向代理的形式,只不过是需要配合Xray本身的XTLS流量才能发挥出最大的功用,例如同样是监听443端口,利用Xray的回落功能配合XTLS的传输方式,使得经过验证的XTLS流量由Xray指定特定的出口方法,而未通过Xray服务端验证的流量则根据对应的回落规则转发到相应的回落端口如8080端口,由监听回落端口8080的应用来处理该流量如Web服务器。

使用回落的好处是所有经过Xray监听进入的流量都可以是Https流量,即使后端服务并不是使用的HTTPS的配置,例如Xray监听443端口并回落8080端口,Nginx监听8080端口提供一个网站服务,Nginx同时将所有80端口流量rewrite重定向到443端口,由此则出现了下图一样的请求过程:

1、所有80端口的请求重定向到443端口,必须使用TLS加密
2、所有443端口的请求均通过Xray过滤转发
3、符合Xray要求的XTLS流量内部通过outbounds处理
3、不符合Xray要求的TLS流量则直接解密转发到8080端口

配置

梳理清楚原理了则可以直接上配置,本文使用oneinstack来部署LNMP,使用标准的Wordpress程序放置网站,监听和处理过程如上一节所叙述。

本文使用环境如下

Nginx配置监听80和8080

下面是Nginx的配置文件,一般不单独使用,而是作为单独的文件引入nginx.conf,例如在nginx.conf标准配置中加入include xyz.abc.conf,其中xyz.abc.conf为下面配置文件名称。
由于Xray会提供证书服务,故Nginx不配置SSL

# 下面两行设置配合Xray的xver:1和Nginx的proxy_protocol可以在日志标识正确流量来源
set_real_ip_from 127.0.0.1;
real_ip_header proxy_protocol;
# 监听80端口并直接重定向到https的443端口
server {
  listen 80;
  server_name xyz.abc;
  rewrite ^(.*)$ https://${server_name}$1 permanent; 
}
# 监听8080端口的wordpress服务
server {
# proxy_protocol使得接收本地的流量能够在日志显示真实来源
  listen 8080 proxy_protocol;
  listen [::]:8080 proxy_protocol;
  server_name xyz.abc;
  access_log /data/wwwlogs/access.log combined;
  index index.html index.htm index.php;
  root /data/wwwroot/xyz.abc;
  # 流量转发后wordpress的样式显示会有问题,识别为不安全,使用该配置upgrade请求
  add_header Content-Security-Policy "upgrade-insecure-requests";
#下面是一些通用的wordpress配置
  include /usr/local/nginx/conf/rewrite/wordpress.conf;
  #error_page 404 /404.html;
  #error_page 502 /502.html;
  location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)$ {
    valid_referers none blocked *.65536.io 65536.io;
    if ($invalid_referer) {
        return 403;
    }
  }
  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
    deny all;
  }
}

完成nginx配置之后通过如下命令重启nginx即可生效,但网站不一定能外网访问,这个不重要(甚至很有好处,文末有解释),重要的是让nginx监听80端口重定向,监听8080端口提供服务即可。
systemctl restart nginx

配置Xray回落Nginx

本质上Xray不用理会回落后的流量怎么被处理,故回落后由Nginx提供什么服务对于Xray并不重要,本例当中Nginx作为wordpress的服务提供者存在。故直接在Xray回落中配置回落端口为8080即可。

本例直接引用Xray官方教程中的配置文件,可以直接到官方教程查看(回落端口变为8080,官方教程为80),也可以在本例中查看

官方教程配置:https://xtls.github.io/documents/level-0/ch07-xray-server/

// REFERENCE:
// https://github.com/XTLS/Xray-examples
// https://xtls.github.io/config/

// 常用的config文件,不论服务器端还是客户端,都有5个部分。外加小小白解读:
// ┌─ 1_log          日志设置 - 日志写什么,写哪里(出错时有据可查)
// ├─ 2_dns          DNS-设置 - DNS怎么查(防DNS污染、防偷窥、避免国内外站匹配到国外服务器等)
// ├─ 3_routing      分流设置 - 流量怎么分类处理(是否过滤广告、是否国内外分流)
// ├─ 4_inbounds     入站设置 - 什么流量可以流入Xray
// └─ 5_outbounds    出站设置 - 流出Xray的流量往哪里去

{
    // 1_日志设置
    "log": {
        "loglevel": "warning",    // 内容从少到多: "none", "error", "warning", "info", "debug" 
        "access": "/home/vpsadmin/xray_log/access.log",    // 访问记录
        "error": "/home/vpsadmin/xray_log/error.log"    // 错误记录
    },

    // 2_DNS设置
    "dns": {
        "servers": [
            "https+local://1.1.1.1/dns-query",    // 首选1.1.1.1的DoH查询,牺牲速度但可防止ISP偷窥
            "localhost"
        ]
    },

    // 3_分流设置
    "routing": {
        "domainStrategy": "AsIs",
        "rules": [
            // 3.1 防止服务器本地流转问题:如内网被攻击或滥用、错误的本地回环等
            {
                "type": "field",
                "ip": [
                    "geoip:private"    // 分流条件:geoip文件内,名为"private"的规则(本地)
                ],
                "outboundTag": "block"    // 分流策略:交给出站"block"处理(黑洞屏蔽)
            },
            // 3.2 屏蔽广告
            {
                "type": "field",
                "domain": [
                    "geosite:category-ads-all"    // 分流条件:geosite文件内,名为"category-ads-all"的规则(各种广告域名)
                ],
                "outboundTag": "block"    // 分流策略:交给出站"block"处理(黑洞屏蔽)
            }
        ]
    },

    // 4_入站设置
    // 4.1 这里只写了一个最简单的vless+xtls的入站,因为这是Xray最强大的模式。如有其他需要,请根据模版自行添加。
    "inbounds": [
        {
            "port": 443,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "", // 填写你的 UUID
                        "flow": "xtls-rprx-direct",
                        "level": 0,
                        "email": "vpsadmin@yourdomain.com"
                    }
                ],
                "decryption": "none",
                "fallbacks": [
                    {
                        "dest": 8080 // 默认回落到防探测的代理
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp",
                "security": "xtls",
                "xtlsSettings": {
                    "allowInsecure": false,    // 正常使用应确保关闭
                    "minVersion": "1.2",       // TLS最低版本设置
                    "alpn": [
                        "http/1.1"
                    ],
                    "certificates": [
                        {
                            "certificateFile": "/home/vpsadmin/xray_cert/xray.crt",
                            "keyFile": "/home/vpsadmin/xray_cert/xray.key"
                        }
                    ]
                }
            }
        }
    ],

    // 5_出站设置
    "outbounds": [
        // 5.1 第一个出站是默认规则,freedom就是对外直连(vps已经是外网,所以直连)
        {
            "tag": "direct",
            "protocol": "freedom"
        },
        // 5.2 屏蔽规则,blackhole协议就是把流量导入到黑洞里(屏蔽)
        {
            "tag": "block",
            "protocol": "blackhole"
        }
    ]
}

例子中需要修改如下地方为自己网站的配置

完成配置之后通过如下命令重启Xray服务(前提是通过官方脚本安装)
官方安装脚本地址:https://github.com/XTLS/Xray-install

systemctl restart xray

WordPress配置

WordPress不仅有配置文件,也有数据库配置,但是前文已经通过Xray回落8080端口,Nginx监听8080端口将整个通路连接起来,现在要做的是确保Wordpress可以正常工作,因为一般来说Wordpress迁移过来都是直接复制整个文件夹和数据库,所以保留了很多之前网站的配置,在本例中要做一些修改以免访问有问题,和一般的Wordpress迁移的注意事项类似。

首先修改数据库配置中wp-options中所的siteurl和home字段(WP在根目录的wordpress目录中)
siteurl字段修改为:http://xyz.abc/wordpress
home字段修改为:http://xyz.abc
注意由于Xray提供了证书服务,故wordpress的所有配置都是标准的http配置,无需在nginx或者wordpress当中使用https形式。

配置完成

完成所有配置之后,无论通过http://xyz.abc的形式,还是https://xyz.abc的形式都可以正常访问网站,对于http访问直接由nginx的80端口重定向到https访问,对于https的直接访问则由Xray处理相关流量,经过验证的流量走Outbounds,未经验证的流量则回落到8080端口的wordpress服务。

根据Xray的特点,整个系统防火墙本质上只需要开放两个端口,即80和443,其他的端口全部都是内部通讯无需对外暴露身份,也提高了VPS本身的防护能力,故推荐开启系统防火墙并只开放标准端口即可。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据