Categories
翻墙姿势

LAMP + V2ray 二合一服务器配置

最近GFW经常发威,科学上网真的越来越难了
所以天天换服务器,多浪费,而且容易被定点爆破
所以我想在一个服务器,上同时架设个人网站和v2ray,这是个很经典的想法,但是之前一直没有实践过,于是我决定要实践一下

于是我就选择了一个vultr的3.5美金一个月的服务器
选择安装的是Fedora31系统

先安装lamp服务作为wordpress服务的基础
dnf -y update
安装Apache服务
dnf -y install httpd
安装PHP
dnf -y install php php-cli php-php-gettext php-mbstring php-mcrypt php-mysqlnd php-pear php-curl php-gd php-xml php-bcmath php-zip
安装Mariadb(Mysql的代替方案)
dnf install mariadb-server
systemctl start mariadb
systemctl enable mariadb
设置mysql的安全相关内容(包括root密码,之后会在wordpress的安装中用到)
mysql_secure_installation
连接本地MySQL服务器
mysql -u root -p
创建wordpress数据库
CREATE DATABASE wordpress;
退出MySQL连接
exit
在防火墙中允许http(80端口)和https(443端口)流量
firewall-cmd --add-service={http,https} --permanent
firewall-cmd --reload

启动Apache服务器
systemctl start httpd
systemctl enable httpd
wget https://wordpress.org/latest.zip
mv wordpress/* /var/www/html/
chown -R apache:apache /var/www/html
chmod -R 755 /var/www/html

在selinux中允许apache访问文件(非常重要,坑了我好久,因为以前从来不开selinux😄)
chcon -R -t httpd_sys_content_t /var/www/html/
setsebool -P httpd_can_network_connect 1
systemctl restart httpd

然后就可以在自己的电脑上访问服务器的ip然后根据屏幕上的指引完成安装
这样就完成了wordpress个人网站的安装

当然我们需要启用https这个年代了还有谁不启用https的嘛?
首先启用https,需要一个SSL证书,在几年前我初中的时候服务器证书还是需要购买的,现在不一样了Let’s Encrypt的出现帮助推动了全https的进步,也让我们这些普通的个人站长不用承担一年几百的SSL费用。
我选择Certbot来帮助我们获得证书
https://certbot.eff.org/
安装Certbot
dnf install certbot
使用dns方式验证域名所有权来获得SSL证书,期间会需要增加一条txt记录
certbot certonly --manual --preferred-challenges dns

获得SSL证书之后的界面

接下来需要把SSL证书告诉Apache允许它调用(证书文件路径在获得的屏幕中又写明,请按情况替换)
编辑 /etc/httpd/conf.d/ssl.conf
vim /etc/httpd/conf.d/ssl.conf
确认以下几条内容
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.tingou.xyz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.tingou.xyz/privkey.pem

然后重启httpd服务
systemctl restart httpd
至此你就可以看到激动人心的小锁标志啦

有了小锁的https连接

然后是配置cdn,Cloudflare的CDN非常简单方便使用,所以我选择用它。
在Cloudflare的后台中填上服务器的IP地址即可

设定Cloudflare CDN

等DNS记录生效之后(如果等不及可以尝试把本地DNS改成1.1.1.1)
会发现我们的SSL证书已经变成了Cloudflare免费赠送的

接下来在Cloudflare的后台中启用SSL。(免费的那必须白嫖)

在这里可以看到4种选项,那他们分别有什么区别呢?

第一种是关闭,不需要解释,就是任何一个在你通讯线路上的人都可以知道你在访问什么内容,内容都是公开的。基本没有隐私。

第二个选项是Flexible那Google翻译告诉我意思是灵活的,那实际上是什么呢?那就是用户在连接Cloudflare服务器这一段使用加密而Cloudflare到服务器使用明文通讯,如果是为了防止被伟光正的中间人监听的话这个选项是足够的,因为Cloudflare的服务器都在境外,在出国的过程中使用了加密流量,但是国外的人就可以监听Cloudflare和服务器之间的通讯。所以总之是不大推荐吧,毕竟坏人不仅在国内嘛。

第三种就很好理解,全程使用加密

那第四种又是什么呢?第三种已经使用了全程的加密,但是它不会验证服务器的证书是不是有效的,意思就是如果你的服务器被人偷换了,Cloudflare是不会发现证书文件不是经过你授权的,伪造的证书也是可以通过验证的,鉴于以前出现过伪造Gmail域名证书的恶性事件,我建议是打开全程的严格加密,会保证最佳的安全性。

那我们的服务器由于使用了Let’s Encryption的真实证书所以是可以通过Cloudflare的验证的,所以毅然决定用最严格的加密方式,那就是第四种。

Cloudflare自己给自己颁发的证书(大佬的味道)

然后安装v2ray,使用官方的安装脚本
bash <(curl -L -s https://install.direct/go.sh)
然后编辑配置文件
vim /etc/v2ray/config.json
在自动生成的Inbound Object中添加以下传输设置(记得在上一行末尾添加逗号)
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/【写你想写的东西】/",
"headers": {
"Host": "www.tingou.xyz"
}
}
}

其中path指的就是这个WebSocket的路径之后会在apache的配置文件修改中用到
Host指的是这个假装网站的域名,要和之前配置的网站域名一样
然后编辑Apache的配置文件
vim /etc/httpd/conf/httpd.conf
在文件中添加一段配置
ProxyPass “ws://127.0.0.1:【V2ray的端口】/【写你想写的东西】/” upgrade=WebSocket ProxyAddHeaders Off ProxyPreserveHost On RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s

然后重启Apache和v2ray服务
systemctl restart httpd
systemctl restart v2ray

这样一个网站和v2ray二合一的网站就搭建完毕了,而且还使用了cloudflare CDN的转发让追踪变得非常困难。

那我们来测试一下。

我使用wireshark对网络上的数据包进行分析。

首先是正常访问网站的数据

服务器->用户方向
用户->服务器方向

然后是v2ray的数据

服务器->用户方向
服务器->用户方向

可以发现都是TLS的加密数据,对网络运营商来说都是一次普通的访问网页。根本无法分辨。

参考文献:

https://toutyrater.github.io/advanced/wss_and_web.html
https://v2ray.com/
https://certbot.eff.org/docs/using.html#manual
https://computingforgeeks.com/how-to-install-lamp-stack-on-fedora/

本文发布于本人网站,

如有错误欢迎指出。

如需转载请注明出处。

1 reply on “LAMP + V2ray 二合一服务器配置”

Leave a Reply

Your email address will not be published. Required fields are marked *