New way to deploy SSL VPN in Linux

安全劍客發表於2019-05-08
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 記憶體,SE Linux  不開啟

服務架構
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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2643666/,如需轉載,請註明出處,否則將追究法律責任。

相關文章