前言
版权声明,本文允许转载但请务必保留原文链接!
本教程适用于已有在海外源站服务器,并希望获得OVH的TB级抗DDoS清洗功能的同学。
这里反代服务器使用的是云筏的OVH-US-XS1,机房在美国,如果自己源站在欧洲的话建议购买OVH-Fr-XS1,源站在欧洲。
这个机器除了TB级抗D外,还有个特点就是50M带宽保障且不限流量,作为小型网站的反代完全够用。
购买链接:https://www.cloudraft.cn/user/vds/purchase 8折优惠码U_CloudRaft
折后分别是12元和14元。
简称及指代
1. 源站机,即你装了网站应用的服务器,假设IP为6.6.6.6
2. 反代机,即云筏的高防服务器,假设IP为9.9.9.9
3. 此处假设建站域名为 proxy-test.liujason.com
源站机
注意事项
源站机的IP(6.6.6.6)要没有暴露过,自行去 https://search.censys.io/ 查查看吧,如果暴露了最好换个IP,不然攻击者还是能直接查到你的源站机。
建站
使用自己习惯的方式在源站机里建站即可,注意监听80和443端口,其中如果要用证书的话:
务必使用自签证书,不要包含域名信息,不要用Let's Encrypt!!!
务必使用自签证书,不要包含域名信息,不要用Let's Encrypt!!!
务必使用自签证书,不要包含域名信息,不要用Let's Encrypt!!!
域名此时不要做解析,可以等配置完反代机之后再做,如果确实需要本地浏览器访问网站进行配置的话,请修改自己电脑的hosts
Windows修改C:\Windows\System32\drivers\etc\hosts
MacOS和Linux修改/etc/hosts
添加一行:
6.6.6.6 proxy-test.liujason.com
调试完成后记得删除这条记录
防火墙规则
源站机需安装iptables或服务器供应商提供防火墙规则,如果是iptables,输入以下命令:
iptables -I INPUT -s 9.9.9.9 -p tcp --dport 80 -j ACCEPT iptables -I INPUT -s 9.9.9.9 -p tcp --dport 443 -j ACCEPT iptables -I INPUT -p tcp --dport 80 -j DROP iptables -I INPUT -p tcp --dport 443 -j DROP service iptables save service iptables restart
这里要注意一下,如果用宝塔之类的面板,可能会改掉已经设置好的iptables规则,需要删掉80和443全部放行的规则。
如果服务器供应商提供防火墙规则,需要防火墙将80和443端口默认关闭,然后仅放行通过反代机的IP(9.9.9.9)
这时候进行以下测试:
- 在反代机中
curl http://6.6.6.6
,能看到html页面代码 - 在自己电脑浏览器中,打开http://6.6.6.6 提示拒绝访问(错误码:ERR_CONNECTION_REFUSED),注意不是404错误,如果看到404说明你防火墙没屏蔽成功
如果和上面一致则说明设置正确了,可以进行下一步了。
反代机
系统要求
教程以Debian为例,建议小白同学也照做就是了,购买开通云筏的VDS后点【重装系统】,选择Debian系统并确认,右上角弹出的密码记得存一下
安装Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
设置DNS解析
在域名DNS服务商处设置域名指向反代机,即:
proxy-test.liujason.com A 9.9.9.9
如果后面反代服务器要用自动签名的话,需要等待解析生效后再进行下一步,根据TTL不同等待时间不定,多数免费DNS是600秒
设置Caddy
根据我下面的注释修改后执行
echo ' proxy-test.liujason.com { tls [email protected] # 这里换成你的邮箱 reverse_proxy https://6.6.6.6 { # 这里是用的443回源,你也可以用http,然后下面的transport http部分就可以删了 transport http { tls tls_insecure_skip_verify # 源站用的是自签名的证书,所以跳过验证 } # 给回源header添加host header_up Host proxy-test.liujason.com header_up X-Forwarded-Host proxy-test.liujason.com # 你也可以添加其他参数 # 其中X-Forwarded-For是默认添加的,所以源站是能知道访问用户的实际IP的 } } ' > /etc/caddy/Caddyfile
测试反代
执行以下命令,不要关闭ssh或者按ctrl-c
caddy run -config /etc/caddy/Caddyfile
你应该能看到:
2022/02/12 13:58:02.046 INFO tls.issuance.acme waiting on internal rate limiter {"identifiers": ["proxy-test.liujason.com"], "ca": "https://acme.zerossl.com/v2/DV90", "account": "[email protected]"} 2022/02/12 13:58:02.046 INFO tls.issuance.acme done waiting on internal rate limiter {"identifiers": ["proxy-test.liujason.com"], "ca": "https://acme.zerossl.com/v2/DV90", "account": "[email protected]"} 2022/02/12 13:58:04.802 INFO tls.issuance.acme.acme_client trying to solve challenge {"identifier": "proxy-test.liujason.com", "challenge_type": "http-01", "ca": "https://acme.zerossl.com/v2/DV90"} 2022/02/12 13:58:08.047 INFO tls.issuance.acme served key authentication {"identifier": "proxy-test.liujason.com", "challenge": "http-01", "remote": "91.199.212.132:59994", "distributed": false} 2022/02/12 13:58:12.502 INFO tls.issuance.acme.acme_client validations succeeded; finalizing order {"order": "https://acme.zerossl.com/v2/DV90/order/eK8C3_3JejPkEz9B14hjPw"} 2022/02/12 13:58:37.401 INFO tls.issuance.acme.acme_client successfully downloaded available certificate chains {"count": 1, "first_url": "https://acme.zerossl.com/v2/DV90/cert/u568TdOIykGuJtUu5TlARg"} 2022/02/12 13:58:37.401 INFO tls.obtain certificate obtained successfully {"identifier": "proxy-test.liujason.com"}
说明证书已经自动签发成功了,这时候访问域名 https://proxy-test.liujason.com/ 发现已经可以正常访问,且证书也正常
持久化运行
caddy start -config /etc/caddy/Caddyfile
应该能看到,同时关掉ssh连接后网站依然能够正常访问
2022/02/12 14:11:00.944 INFO http server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS {"server_name": "srv0", "https_port": 443} 2022/02/12 14:11:00.944 INFO http enabling automatic HTTP->HTTPS redirects {"server_name": "srv0"} 2022/02/12 14:11:00.944 INFO http enabling automatic TLS certificate management {"domains": ["proxy-test.liujason.com"]} 2022/02/12 14:11:00.945 INFO autosaved config (load with --resume flag) {"file": "/root/.config/caddy/autosave.json"} 2022/02/12 14:11:00.945 INFO serving initial configuration 2022/02/12 14:11:00.945 INFO tls.cache.maintenance started background certificate maintenance {"cache": "0xc00053dc70"} 2022/02/12 14:11:00.945 INFO tls cleaning storage unit {"description": "FileStorage:/root/.local/share/caddy"} 2022/02/12 14:11:00.945 INFO tls finished cleaning storage units Successfully started Caddy (pid=1548) - Caddy is running in the background
开机启动
systemctl enable caddy.service