「Proxy」- 创建 HTTP 与 HTTPS 代理 @20210220

问题描述

由于网络访问的原因,或者需要网络加速,又或者其他原因,我们需要搭建 HTTP 与 HTTPS 代理。

该笔记将记录:如何快速创建 HTTP 与 HTTPS 代理。

方法一、使用 Dokcer 镜像

GitHub/yegor256/squid-proxy

#!/bin/sh

#1 安装Docker服务
# https://docs.docker.com/install/
# 略过……

#2 启动服务
docker run --name proxy -d --restart=always --publish 8081:3128 \
  -e USERNAME=jeffrey -e PASSWORD=swordfish \
  yegor256/squid-proxy

## 附加说明
#(1)根据作者的介绍,这是一个匿名的代理。可以访问http://amibehindaproxy.com/进行验证。
#(2)该服务只启用了基础认证(Basic Authorization)

方法二、使用 Squid 服务

(Squid) forward Proxy for Internet Access Control and Visibility
Wikipedia/Digest access authentication
Squid 3 is only listening only on IPv6

本部分介绍如何使用 Squid 搭建 HTTP 与 HTTPS 代理,并使用基础认证(Digest Access Authentication)功能。

注意,本部分所记录的搭建过程适用于以下发行版,其他发行版也是类似的:

操作系统测试结果
CentOS Linux release 7.5.1804 (Core) 成功
Kali GNU/Linux Rolling 成功

第一步、安装服务

# Debian
apt-get install -y squid apache2-utils

# CentOS
yum install -y squid httpd-tools

第二步、配置服务

# 创建必要的目录
mkdir -pv /etc/squid/conf.d/

# 定义认证信息(Digest Access Authentication)
htdigest -c /etc/squid/password.digest public foo

# 定义配置文件
cat > /etc/squid/conf.d/09-forward-proxy.conf <<EOF
# 在Debian中,取消该行注释
# auth_param digest program /usr/lib/squid3/digest_file_auth -c /etc/squid/password.digest

# 在CentOS中,取消该行注释
auth_param digest program /usr/lib64/squid/digest_file_auth -c /etc/squid/password.digest

auth_param digest realm public
acl acl_require_auth proxy_auth REQUIRED
http_access allow acl_require_auth
EOF

# 引入配置文件(仅在 CentOS 中执行,因为 Debian 默认已经引入)
cat <<EOF >> /etc/squid/squid.conf

# 留个空行,防止配置文件最后一行没有换行
include /etc/squid/conf.d/*.conf
EOF

# 注释某些配置行(在CentOS中需要执行,而Debin可能需要检查一下)
sed -i 's/http_access deny all/# http_access deny all/g' /etc/squid/squid.conf

# 开启IPv4监听(默认只监听IPv6)
sed -i 's/http_port 3128/http_port 0.0.0.0:3128/g' /etc/squid/squid.conf

1)参数含义已在配置文件(squid.conf)的注释中已经解释,因此不再复述
2)要留意配置文件(squid.conf)中有没有 http_access deny all 配置行,尤其是在 CentOS 中。

第三步、启动服务

systemctl start squid.service
systemctl enable squid.service

第四步、服务测试

curl -O -x http://squid.example.com:3128 --proxy-digest -U 'username:password'  \
    https://needproxy.example.com

附加说明

在 HTTPS 代理中,客户端与代理服务器,先通过 CONNECT 发起连接,然后进行认证,而这个过程还没有建立 SSL 连接,密码是明文的。

另外,由于 HTTPS 代理只是形成 TCP 隧道,所以远程服务器看到的是代理服务器的网络地址,而看不到客户端的网络地址。除非代理服务器拥有了证书。

相关链接

Using Basic Auth HTTPS_PROXY over HTTP
Authenticating a Proxy server over HTTPS


posted @ 2021-02-20 14:20  研究林纳斯写的  阅读(635)  评论(0编辑  收藏  举报