导读 | Squid 实现的 SSL Proxy,相对于各类 VPN 和传统的 SSH 加密通信手段,SSL 代理具有更优越的性能和更好的安全性;Squid 不仅可以根据需要选择需要经过代理的域名并进行缓存,可以有效提高外部网络访问速度,还可以实现高度的身份隐藏功能,具有良好的隐私安全保障。 |
本文所采用的服务器均为 CentOS 7 x86_64 版本,使用 FirewallD 作为防火墙。
Squid 作为代理服务器实现,Stunnel 进行 HTTPS 与 HTTP 之间的转换。
本文需要拥有合法的服务器证书,若没有请申请或自签发,免费 SSL 证书可以使用 StartSSL / WoSign 等
Squid 是一个高性能的代理缓存服务器,可以加快内部网浏览 Internet 的速度,提高客户机的访问命中率。
Squid 不仅支持 HTTP 协议,还支持 FTP、gopher、SSL 和 WAIS 等协议。
和一般的代理缓存软件不同,Squid 用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
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 配置。
yum install -y squid stunnel openssl openssl-devel firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload
echo "client = yes [https] accept = 127.0.0.1:808 connect = {Server B IP:port}" > /etc/stunnel/stunnel.conf
echo "stunnel" >> /etc/rc.local
touch /etc/squid/inner-sites
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
yum install -y squid stunnel openssl openssl-devel firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload
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
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/119980.html