导读 Squid 实现的 SSL Proxy,相对于各类 VPN 和传统的 SSH 加密通信手段,SSL 代理具有更优越的性能和更好的安全性;Squid 不仅可以根据需要选择需要经过代理的域名并进行缓存,可以有效提高外部网络访问速度,还可以实现高度的身份隐藏功能,具有良好的隐私安全保障。
简介

本文所采用的服务器均为 CentOS 7 x86_64 版本,使用 FirewallD 作为防火墙。

Squid 作为代理服务器实现,Stunnel 进行 HTTPS 与 HTTP 之间的转换。

本文需要拥有合法的服务器证书,若没有请申请或自签发,免费 SSL 证书可以使用 StartSSL / WoSign 等

Squid

Squid 是一个高性能的代理缓存服务器,可以加快内部网浏览 Internet 的速度,提高客户机的访问命中率。

Squid 不仅支持 HTTP 协议,还支持 FTP、gopher、SSL 和 WAIS 等协议。

和一般的代理缓存软件不同,Squid 用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

Stunnel

Stunnel 是一个自由的跨平台软件,用于提供全局的 TLS/SSL 服务。

针对本身无法进行 TLS 或 SSL 通信的客户端及服务器,Stunnel 可提供安全的加密连接。

该软件可在许多操作系统下运行,包括 Unix-like 系统,以及 Windows. Stunnel 依赖于某个独立的库,如 OpenSSL 或者 SSLeay,以实现 TLS 或 SSL 协议。

搭建服务
系统环境

公有云上的 CentOS 7 x86_64(非 OpenVZ),双核,2 GB 内存,SELinux 不开启

服务架构
Users < - HTTPS -> Squid A < - HTTP -> Stunnel A < - HTTPS -> Squid B < - HTTP/HTTPS -> Internet

其中,服务器 A 位于内部网络但可以访问服务器 B,服务器 B 位于外部网络,此举一是实现了 Users 都 B 的全方位加密,二是实现了外部网络与内部网络的隔离,在防火墙的帮助下可以更好地保证 A 的安全与稳定;而且,一旦 B 遭遇攻击,A 可快速切换至另一个 B 服务器。

准备证书

关于证书:请使用包含整个证书链的证书,否则在部分操作系统上可能出现证书异常

请将您的证书放置于 /etc/cert/ssl.crt

请将您的私钥放置于 /etc/cert/ssl.key

用户认证

本文默认配置没有启用任何 Squid 认证,如有需要请自行配置。

在启动认证的情况下, Stunnel 工作不会受到影响,因此无需更改 Stunnel 配置。

服务器 A 搭建脚本
安装组件
yum install -y squid stunnel openssl openssl-devel
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
写入 Stunnel 配置,请根据情况修改花括号的内容
echo "client = yes
[https]
accept = 127.0.0.1:808
connect = {Server B IP:port}" > /etc/stunnel/stunnel.conf
设置 Stunnel 自启
echo "stunnel" >> /etc/rc.local
创建无需代理的站点列表,语法如.baidu.com,每个域名一行
touch /etc/squid/inner-sites
修改 Squid 配置文件
sed -i 's/http_access deny all/http_access allow all/g' /etc/squid/squid.conf
sed -i 's/http_port 3128/https_port 443 cert=\/etc\/cert\/ssl.crt key=\/etc\/cert\/ssl.key/g' /etc/squid/squid.conf
sed -i '$a\acl all src 0.0.0.0/0.0.0.0' /etc/squid/squid.conf
sed -i '$a\acl inner-sites dstdomain \"/etc/squid/inner-sites\"' /etc/squid/squid.conf
sed -i '$a\always_direct allow inner-sites' /etc/squid/squid.conf
sed -i '$a\never_direct allow all' /etc/squid/squid.conf
sed -i '$a\request_header_access Via deny all' /etc/squid/squid.conf
sed -i '$a\request_header_access Via deny all' /etc/squid/squid.conf
sed -i '$a\request_header_access Via deny all' /etc/squid/squid.conf
启动服务
stunnel
systemctl start squid
systemctl enable squid
服务器 B 搭建脚本
安装组件
yum install -y squid stunnel openssl openssl-devel
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
修改 Squid 配置文件
sed -i 's/http_access deny all/http_access allow all/g' /etc/squid/squid.conf
sed -i 's/http_port 3128/https_port 443 cert=\/etc\/cert\/ssl.crt key=\/etc\/cert\/ssl.key/g' /etc/squid/squid.conf
sed -i '$a\request_header_access Via deny all' /etc/squid/squid.conf
sed -i '$a\request_header_access Via deny all' /etc/squid/squid.conf
sed -i '$a\request_header_access Via deny all' /etc/squid/squid.conf
启动服务
systemctl start squid
systemctl enable squid

原文来自:http://dstsmallbird.github.io/2016/04/20/a-new-method-for-ssl-proxy/

本文地址:https://www.linuxprobe.com/linux-ssl-proxy.html编辑:吴向平,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/