全球主机交流论坛

标题: 使用Caddy进行反代并隐藏源站IP-低成本实现TB级抗DDoS清洗 [打印本页]

作者: StudyOverseas    时间: 2022-2-12 23:10
标题: 使用Caddy进行反代并隐藏源站IP-低成本实现TB级抗DDoS清洗
本帖最后由 StudyOverseas 于 2022-2-12 23:15 编辑

原文链接:https://www.liujason.com/article/1196.html
版权声明,本文允许转载但请务必保留原文链接!

本教程适用于已有在海外源站服务器,并希望获得OVH的TB级抗DDoS清洗功能的同学。
这里反代服务器使用的是云筏的OVH-US-XS1,机房在美国,如果自己源站在欧洲的话建议购买OVH-Fr-XS1,源站在欧洲。
这个机器除了TB级抗D外,还有个特点就是50M带宽保障且不限流量,作为小型网站的反代完全够用。

购买链接:https://www.cloudraft.cn/user/vds/purchase
5折优惠码HappyNewYear 折后分别是7.5元/月和8.5元/月。

教程正文见下页



简称及指代
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,输入以下命令:

  1. iptables -I INPUT -s 9.9.9.9 -p tcp --dport 80 -j ACCEPT
  2. iptables -I INPUT -s 9.9.9.9 -p tcp --dport 443 -j ACCEPT
  3. iptables -I INPUT -p tcp --dport 80 -j DROP
  4. iptables -I INPUT -p tcp --dport 443 -j DROP

  5. service iptables save
  6. service iptables restart
复制代码

这里要注意一下,如果用宝塔之类的面板,可能会改掉已经设置好的iptables规则,需要删掉80和443全部放行的规则。

如果服务器供应商提供防火墙规则,需要防火墙将80和443端口默认关闭,然后仅放行通过反代机的IP(9.9.9.9)

这时候进行以下测试:


如果和上面一致则说明设置正确了,可以进行下一步了。



反代机
系统要求
教程以Debian为例,建议小白同学也照做就是了,购买开通云筏的VDS后点【重装系统】,选择Debian系统并确认,右上角弹出的密码记得存一下

安装Caddy
  1. sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
  2. curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
  3. curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
  4. sudo apt update
  5. sudo apt install caddy
复制代码


设置DNS解析
在域名DNS服务商处设置域名指向反代机,即:
proxy-test.liujason.com A 9.9.9.9
如果后面反代服务器要用自动签名的话,需要等待解析生效后再进行下一步,根据TTL不同等待时间不定,多数免费DNS是600秒

设置Caddy
根据我下面的注释修改后执行

  1. echo '
  2. proxy-test.liujason.com {

  3.   tls [email][email protected][/email]  # 这里换成你的邮箱

  4.   reverse_proxy https://6.6.6.6 {
  5.   
  6.     # 这里是用的443回源,你也可以用http,然后下面的transport http部分就可以删了
  7.     transport http {
  8.       tls
  9.       tls_insecure_skip_verify
  10.           # 源站用的是自签名的证书,所以跳过验证
  11.     }
  12.        
  13.         # 给回源header添加host
  14.         header_up Host proxy-test.liujason.com
  15.         header_up X-Forwarded-Host proxy-test.liujason.com
  16.        
  17.         # 你也可以添加其他参数
  18.         # 其中X-Forwarded-For是默认添加的,所以源站是能知道访问用户的实际IP的
  19.   }
  20. }
  21. ' > /etc/caddy/Caddyfile
复制代码


测试反代
执行以下命令,不要关闭ssh或者按ctrl-c

  1. caddy run -config /etc/caddy/Caddyfile
复制代码


你应该能看到:

  1. 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]"}
  2. 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]"}
  3. 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"}
  4. 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}
  5. 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"}
  6. 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"}
  7. 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连接后网站依然能够正常访问

  1. 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}
  2. 2022/02/12 14:11:00.944 INFO    http    enabling automatic HTTP->HTTPS redirects        {"server_name": "srv0"}
  3. 2022/02/12 14:11:00.944 INFO    http    enabling automatic TLS certificate management   {"domains": ["proxy-test.liujason.com"]}
  4. 2022/02/12 14:11:00.945 INFO    autosaved config (load with --resume flag)      {"file": "/root/.config/caddy/autosave.json"}
  5. 2022/02/12 14:11:00.945 INFO    serving initial configuration
  6. 2022/02/12 14:11:00.945 INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0xc00053dc70"}
  7. 2022/02/12 14:11:00.945 INFO    tls     cleaning storage unit   {"description": "FileStorage:/root/.local/share/caddy"}
  8. 2022/02/12 14:11:00.945 INFO    tls     finished cleaning storage units
  9. Successfully started Caddy (pid=1548) - Caddy is running in the background
复制代码


开机启动
  1. systemctl enable caddy.service
复制代码

作者: tianzi1981    时间: 2022-2-21 19:12
虽然看不懂,但是大受震撼,收藏了谢谢。
作者: jacob    时间: 2022-2-26 07:53
收藏了 ,以后流量大了就用
作者: jacob    时间: 2022-2-26 10:34
自签名浏览器会不会提示不安全警告呢?
作者: StudyOverseas    时间: 2022-2-27 17:48
jacob 发表于 2022-2-26 10:34
自签名浏览器会不会提示不安全警告呢?

Caddy用的是ZeroSSL或者LetsEncrypt证书,不会提示不安全,需要根据我的教程提前设置好解析
作者: jacob    时间: 2022-3-15 22:12
源站怎么自签证书呀楼主
作者: Qimiao    时间: 2022-3-28 00:51
没流量的站点不需要cdn
作者: StudyOverseas    时间: 2022-4-9 20:49
jacob 发表于 2022-3-15 22:12
源站怎么自签证书呀楼主

用openssl生成,然后把生成的crt和key写到nginx规则里(宝塔的话贴到ssl里就行了)
openssl req -newkey rsa:4096 \
            -x509 \
            -sha256 \
            -days 3650 \
            -nodes \
            -out example.crt \
            -keyout example.key

实在搞不定的话就去CF里生成一个然后上传
作者: xiaotangke    时间: 2025-3-12 22:36
给力




欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4