• Welcome to LiuJason's Blog!

使用Caddy进行反代并隐藏源站IP-低成本实现TB级抗DDoS清洗

Linux笔记 Jason 3 months ago (02-12) 50 Views 0 Comments QR code of this page
文章目录[隐藏]

前言

版权声明,本文允许转载但请务必保留原文链接!

本教程适用于已有在海外源站服务器,并希望获得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

This article is under CC BY-NC-SA 4.0 license.
Please quote the original link:https://www.liujason.com/article/1196.html
Like (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址