Squid+Stunnel實現SSL加密代理

服務器環境是ramhost LA機房,kvm,debian 6.0,内存较小,256MB

1 squid的安裝與配置

1.1 安裝squid

sudo aptitude install squid

debian下使用上述命令安裝的squid是2.7版本,ubuntu下則是的squid3,debian如果需要安裝squid3,則需用下面的命令安裝,兩者配置可能不同。

sudo aptitude install squid3

squid的默認配置文件註釋非常豐富,有幾千行,有需要可以仔細閱讀,備份保存,並修改權限予以保護,方便日後查閱:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.old
sudo chmod a-w /etc/squid/squid.conf.old

1.2 squid的配置

下面是一個簡單的squid configuration的配置文件,因為主要是用來結合stunnel實現加密代理,遠程不直接連接squid的http代理,所以只保留本機連接。

vim /etc/squid/squid.conf

輸入以下配置:

# 端口
http_port 3128

# 網絡控制
acl all src 0/0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
acl SSL_ports port 443
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all

hierarchy_stoplist cgi-bin ?

# 緩存內存值
cache_mem 64 MB

# 允許最小文件請求  
minimum_object_size 0 KB
# 允許最大文件請求  
maximum_object_size 4096 KB
cache_swap_low 90
cache_swap_high 95

# 設置緩存目錄大小為2048MB,根據實際情況設定,一般來說,每GB緩存需要消耗10MB內存。squid本身還要消耗約15MB內存,加上前面配置的內存緩存,在本例中大約需要10*2+15+64=99MB的內存。squid標准配置推薦服務器本身的內存至少是這個總消耗內存的一倍。
cache_dir ufs /var/squid/cache 2048 16 256
coredump_dir /var/squid/cache

# 相關日誌
access_log /var/squid/logs/access.log
cache_log /var/squid/logs/cache.log
cache_store_log /var/squid/logs/cache_store.log
pid_filename  /var/squid/logs/squid.pid

# 哪些不缓存  
acl QUERY urlpath_regex cgi-bin .php .cgi  
cache deny QUERY

# 主機名稱
visible_hostname yourhostname

# IP緩存的設置值
ipcache_size 1024
ipcache_low 90
ipcache_high 95

1.3 配置squid的緩存目錄並啟動

新建squid的緩存目錄、日誌目錄,這兩個目錄可以根據實際情況設置,但需於上述配置文件匹配。

sudo mkdir /var/squid
cd /var/squid
sudo mkdir cache logs

squid默認的用戶組是proxy,更改目錄歸屬使squid進程可以讀取寫入:

chown -R proxy:proxy /var/squid

檢查配置文件是否有錯:

sudo squid -k parse

如果沒有任何提示的話,則配置文件正確,如有提示出錯,則做相應調整。

初始化cache目錄,並啟動squid服務

sudo squid -z
sudo squid

2 stunnel的安裝、配置

利用stunnel實現ssl加密需要有相關證書,可以在startssl.com申請免費證書,也可以自己製作,自己製作的證書本地也需要倒入相關證書。

2.1 安裝stunnel

sudo aptitude install stunnel

stunnel是通過/etc/init.d/stunnel4來啟動的,修改stunnel4配置文件,允許stunnel自動啟動

sudo vim /etc/default/stunnel4

將ENABLED=0後的值改為1,保存退出:

ENABLED=1

2.2 配置stunnel並啟動

sudo vim /etc/stunnel/stunnel.conf

將配置文件改成:

; 在這裡配置證書和私鈅的位置,如果證書和私鈅已經合成一個文件則將key那一行註釋掉
cert = /etc/stunnel/ssl.crt
key = /etc/stunnel/ssl.key

; 加密方式 (all, SSLv2, SSLv3, TLSv1)
sslVersion = SSLv3

chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
pid = /stunnel4.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
socket = l:SO_LINGER=1:1
socket = r:SO_LINGER=1:1
compression = zlib

client = no ;作為服務端,如果是客戶端則為yes

[squid]
accept = 443 ;stunnel的連接端口,不要於本機其他進程使用的端口衝突
connect = 3128 ;squid的端口,於squid的配置匹配
TIMEOUTclose = 0 ;這條很重要,如沒有,有些頁面響應會非常慢

配置文件中其他諸如[pop3s]等不需要的連接方式可以全部註釋掉,保存退出,並啟動服務:

sudo /etc/init.d/stunnel4 restart

至此利用ssl加密的https代理服務器就假設好了。

3 如何使用SSL加密代理

3.1 WebVPN方式

比較推薦這種方式,因為目前我們的網絡生活90%以上在瀏覽器中,尤其推薦Chrome瀏覽器。

Chrome很早開始就支持https proxy了,利用Chrome + SwitchySharp + WhiteList最為方便。具體方法不在此敘述,可以參看以下幾個網頁:

White List:https://github.com/n0wa11/gfw_whitelist

WebVPN比較詳細的一個介紹:http://n0wa11.github.com/blog/Using-Chrome-and-WebVPN-to-Learn-Scaling-GFW-in-5-Minutes.html

3.2 解密stunnel,轉化為本地代理

MAC系統可以使用GoAgentX,下載地址:https://github.com/ohdarling/GoAgentX/wiki

GoAgentX是一個很棒的軟件。項目主頁在此:https://github.com/ohdarling/GoAgentX

本文參考了以下網頁:

[1] 鳥哥. 區網控制者:Proxy 伺服器. http://linux.vbird.org/linux_server/0420squid.php
[2] Paveo. 用 Stunnel 保护隐私. https://w3.owind.com/pub/%E7%94%A8-stunnel-%E4%BF%9D%E6%8A%A4%E9%9A%90%E7%A7%81/