使用Squid搭建HTTPS代理服務器


由於經常去的一些國外網站如Google、Blogspot、Wordpress被“出現了技術問題”,訪問不了,於是我在自己的DigitalOcean 雲主機上搭建了一個 Squid 代理服務器用於科學上網。Squid支持HTTP、HTTPS代理,因此能夠滿足日常訪問國外某些網站的需求。然而如果直接使用HTTP連接Squid是明文傳輸的,在第一次使用時,會馬上“出現技術問題”,因此需要使用 stunnel 加密代理通道。具體配置步驟如下,雲主機的Linux發行版是Ubuntu 14.10 x32,如果你使用的是其他發行版,包管理與配置文件路徑會略有不同。

安裝必要的軟件

安裝apache2-utils用於HTTP認證文件的生成,

apt-get install apache2-utils -y

安裝Squid,

apt-get install squid3 -y

安裝stunnel,

apt-get install stunnel4 -y

配置Squid

生成HTTP認證文件,輸入對應的密碼。這個認證文件用於之后HTTP代理的認證登錄,如果不需要登錄認證,可以略過。

htpasswd -c /etc/squid3/squid.passwd <登錄用戶名>

修改Squid默認配置,配置文件位於 /etc/squid3/squid.conf 

1. 修改監聽地址與端口號

找到 TAG: http_port 注釋,把其下方的

# Squid normally listens to port 3128 http_port 3128

中 http_port 修改為 127.0.0.1:3128 ,使得Squid只能被本地(127.0.0.1)訪問。此處可以修改為監聽其他端口號。

2. 修改訪問權限與HTTP認證(可選)

若不需要添加HTTP認證,只需將 http_access deny all 修改為 http_access allow all 即可,無需下列的操作。

使用如下命令生成認證文件,

htpasswd -c /etc/squid3/squid.passwd <登錄用戶名>

再次打開Squid配置文件 /etc/squid3/squid.conf ,找到 TAG: auth_param 注釋,在其下方添加,

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/squid.passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off

找到 TAG: acl ,在其下方添加,

acl ncsa_users proxy_auth REQUIRED

找到 TAG: http_access ,在其下方添加,使得只允許經過認證的用戶訪問,

http_access deny !ncsa_users http_access allow ncsa_users

3. 重啟Squid

service squid3 restart

配置stunnel

接下來,我們需要在Squid上添加一層加密。

生成公鑰和私鑰

生成私鑰( privatekey.pem ):

openssl genrsa -out privatekey.pem 2048

生成公鑰( publickey.pem ):

openssl req -new -x509 -key privatekey.pem -out publickey.pem -days 1095

(需要注意的是, Common Name 需要與服務器的IP或者主機名一致)

合並:

cat privatekey.pem publickey.pem >> /etc/stunnel/stunnel.pem

修改stunnel配置

新建一個配置文件 /etc/stunnel/stunnel.conf ,輸入如下內容

client = no [squid] accept = 4128 connect = 127.0.0.1:3128 cert = /etc/stunnel/stunnel.pem

配置中指定了stunnel所暴露的HTTPS代理端口為4128,可以修改為其他的值。

修改 /etc/default/stunnel4 配置文件中 ENABLED 值為1。

ENABLED=1

重啟stunnel

service stunnel4 restart

至此,服務器端已配置完成了。

本地瀏覽器配置

添加證書到受信任的根證書頒發機構列表中

以Windows下Chrome瀏覽器為例,將服務器上的公鑰 publickey.pem 下載至本地,重命名至 publickey.crt ,在Chrome中依次點擊 “設置” - “顯示高級設置” - “HTTP/SSL” - “管理證書”,在“受信任的根證書頒發機構”選項卡中“導入”這個crt證書就完成了。

代理客戶端配置

將本地的代理客戶端指向 https://<你的服務器IP或主機名>:4128 ,這里的IP或主機名和生成公鑰時的 Common Name 一致,端口為stunnel的端口。如果有配置HTTP認證的話,需要在客戶端中配置對應的用戶名和密碼。如果沒有HTTP客戶端的話,推薦使用Chrome的插件 Proxy SwitchyOmega (使用教程可以參考 Github上的Wiki )。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM