利用Caddy搭建HTTPS正向代理详解

avatar 2020年6月6日16:29:13利用Caddy搭建HTTPS正向代理详解已关闭评论

用Caddy的插件forwardproxy快速搭建HTTPS正向代理,毕竟Caddy自动请求SSL证书,能够省下许多不必要的折腾。

申请域名和填写DNS记录

首先你要注册一个免费域名,这个可以到Freenom上免费搞一个,不多讲。

域名注册好后,需要添加两条DNS记录,如果没有v6IP的话,就填一个v4IP的A记录,如下:

Name (prefix) Type TTL Target
A 3600 这里填写vps上的v4IP
AAAA 3600 这里填写vps上的v6IP

上面完成后,就开始服务端的配置了。

服务端安装Caddy

下载安装caddy和http.forwardproxy插件,这里建议http.cache一起安装了。

curl https://getcaddy.com | bash -s personal http.forwardproxy,http.cache

这个时候caddy二进制文件也就安装到/usr/local/bin/caddy里去了,直接caddy就可以运行。

配置Caddyfile文件

上面安装好caddy后,现在就来配置Caddyfile文件,caddy配置文件很简单,搞得俺这种nginx用户很心动。

新建一个caddy文件夹,存放Caddyfile文件

mkdir -p /etc/caddy

vi /etc/caddy/Caddyfile

编写Caddyfile文件,添加内容如下:

https://yeahwu.com { #自己的域名
    root /var/www/html  #网站目录
    tls [email protected] #自动注册证书要用到的邮箱
    log stdout 
    forwardproxy {
        basicauth user Password #这里分别填写用户名和密码
        #serve_pac  #PAC文件通过网址/proxy.pac提供,完整地址 https://你的域名/proxy.pac
        #serve_pac /fuckgfw.pac  #当然你也可以自己添加后缀,那么完整pac地址就是 https://你的域名/fuckgfw.pac
        #probe_resistance login.localhost #防嗅探,隐藏站点是正向代理。下文有详细说明
        hide_ip #隐藏客户端IP
        hide_via
    }
}

上面需要修改的地方是自己的域名,添加自己的邮箱,添加用户名和密码就可以了。

默认是使用443端口,你也可以指定别的端口,只要在第一行网址后面添加相应端口,比如1024端口,例如:

https://yeahwu.com:1024 {

检查80端口有没有被其它服务占用,因为caddy需要用80/443端口申请证书,否则会启动失败。下面命令检查端口占用情况:

netstat -lntp

上面配置、检查完就可以启动caddy了,启动命令如下:

caddy -conf /etc/caddy/Caddyfile

启动后会发现,caddy一直在前台运行,很不方便,这个时候俺们就需要注册systemctl服务,用systemctl来启动caddy。

注册服务

新建caddy.service文件,命令:

vi /etc/systemd/system/caddy.service

添加如下内容

[Unit]
Description=Caddy HTTP/2 web server
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

StartLimitIntervalSec=14400
StartLimitBurst=10

[Service]
Restart=on-abnormal

ExecStart=/usr/local/bin/caddy -quic -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID

KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s

LimitNOFILE=1048576
LimitNPROC=512

PrivateTmp=true
PrivateDevices=false
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=multi-user.target

重启systemctl服务 systemctl daemon-reload

到这也就可以启动caddy了,启动命令

systemctl start caddy #启动

systemctl restart caddy #重启

systemctl status caddy #查看状态

systemctl stop caddy #停止

systemctl enable caddy #添加开机自启动

服务端到此也就部署完成了,下面来折腾客户端。https正向代理,不必多讲,安全、快捷,电脑端不用另装客户端,移动端好像还没发现不支持https代理的软件。

客户端配置

电脑端浏览器安装SwitchyOmega插件,新建一个代理情景模式,代理协议填写HTTPS,代理服务器填写你的域名,端口填写你使用的端口,没有另外设置的话就填443,最后点击右边小锁,填写你的用户名和密码。就可以使用了,如果需要分流的话,可以另建立一个自动切换模式。

caddy8

在SwitchyOmega插件上设置代理自动分流模式,另新建一个自动切换模式,设置如下图:

caddy7

移动端,俺们以小火箭和Quantumult X为例,小火箭,选择https代理,服务器填写你的域名,其它看图:

caddy9

Quantumult X 配置文件/编辑/server_local字头下填写:

http=你的域名:443, username=用户名, password=密码, over-tls=true, tls-host=你的域名, fast-open=false, udp-relay=true, tag=caddy

最后,上面caddy的配置文件有添加PAC模式,但未开启,去掉前面#号即可开启,PAC文件通过网址/proxy.pac提供,完整地址 https://你的域名/proxy.pac ,这是https代理的另一种用法,具体用法可以Google一下,应该是全平台可用。

Caddy配置文件还添加了probe_resistance防嗅探,隐藏正向代理,也就是通过代理访问 http://login.localhost 唯一地址触发407验证,而避免其它代理页返回407验证而暴露了自己是一个转发代理。此功能默认关闭,去掉前面#号即可开启。因为是实验性功能,可能会出现一些浏览器不兼容的问题。

参考:

avatar