簡介
最近剛好有需要使用到其他國家的IP,除了VPN外,也可以使用squid Proxy來處理,同時程式方面也可以透過Proxy使用HttpClient。所以在Azure上自己架了一台Web Proxy,這裡做簡單的紀錄。
(Azure上也有提供Web Safety Proxy 7.0 BYOL
ISO檔可使用,這部分有興趣的人可參考Deploy Web Safety and Squid Proxy in Azure)
測試環境
項目 | 版本 |
---|---|
OS | Linux (ubuntu 18.04) (記憶體至少2G以上) |
Docker | 18.09.6 |
Docker Compose | 1.24.0 |
Docker Image | sameersbn/squid:3.5.27-1 |
我是在Azure直接開一台Linux (ubuntu 18.04) VM,標準B1ms (1 vcpu,2 GiB 記憶體) 進行測試,如何在Azure上建立VM在這裡就不多做解釋。
建立squid Proxy
-
安裝Docker (Docker官方文件)
curl -fsSL https://get.docker.com/ | sh
-
設定未來開機後都自己啟動 docker
systemctl enable docker
-
安裝 Docker Compose (Docker Compose官方文件)
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
安裝完畢後給予 Docker Compose 需要的執行權限。
sudo chmod +x /usr/local/bin/docker-compose
-
安裝 apache2-utils (htpasswd指令需要)
sudo apt install apache2-utils
-
建立 squid container
sudo docker run --name squid -d --restart=always \ --publish 3128:3128 \ --volume /opt/squid/cache:/var/spool/squid \ sameersbn/squid:3.5.27-1
--name
指定Container名稱-d
(daemon mode)指定背景執行--publish 3128:3128
開放port的對應--restart=always
:當 Container 遇到例外情況 stop 時,docker 會試著重新啟動此 Container--volume
設定掛載本機的資料夾/檔案至Container的某個資料夾/檔案/var/spool/squid
Squid 預設 cache 目錄/var/log/squid
Squid 預設 log 目錄
sameersbn/squid:3.5.27-1
Docker Image名稱
-
檢查 squid container是否成功執行
sudo docker ps
如要查看log 可執行以下指令,或直接用
--volume
掛載/var/log/squid
資料夾docker exec -it squid tail -f /var/log/squid/access.log docker exec -it squid cat /var/log/squid/cache.log
-
取得預設的squid.config
將/etc/squid/squid.conf
檔案從Container下載到本機/opt/squid/config/squid.conf
sudo docker cp squid:/etc/squid/squid.conf /opt/squid/config/squid.conf
Reference: Docker CLI docs for
cp
-
先刪除squid Container
sudo docker rm -f squid
-
編輯squid.conf(加入帳密驗證)
開啟剛剛下載下來的squid.conf(/opt/squid/config/squid.conf)acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd acl squid_user proxy_auth REQUIRED http_access allow squid_user
前面幾行到
acl CONNECT method CONNECT
都是預設的,我只加入後面三行設定帳密權限驗證auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd acl squid_user proxy_auth REQUIRED http_access allow squid_user
加入完後,儲存關閉。
-
設定squid使用者密碼文件
sudo htpasswd -c /opt/squid/config/htpasswd yourUsername
-c
建立一個加密文件/opt/squid/config/htpasswd
存放的路徑yourUsername
自定義使用者名稱
執行後系統會提示輸入密碼,確認後即建立密碼文件
亦可使用
-b
直接設定密碼sudo htpasswd -bc /opt/squid/config/htpasswd yourUsername yourPassword
-
撰寫為docker-compose.yml
至/opt/squid
資料夾下建立docker-compose.yml,並將剛剛設定完成的squid.conf
與htpasswd
也設定掛載到Container裡面version: "3" services: squid-proxy: image: sameersbn/squid:3.5.27-1 container_name: squid restart: always ports: - 3128:3128 volumes: - /opt/squid/cache:/var/spool/squid - /opt/squid/config/squid.conf:/etc/squid/squid.conf - /opt/squid/config/htpasswd:/etc/squid/passwd
-
執行docker-compose.yml
/opt/squid
目錄下執行sudo docker-compose up -d
-
完成~可以來測試看看此Proxy Server是否架設成功
參考資料
- 鳥哥的 Linux 私房菜-Proxy 伺服器
- sameersbn/squid
- Deploy Web Safety and Squid Proxy in Azure
- Install Docker CE
- Install Docker Compose
- Docker CLI docs for cp
如有錯誤或建議,歡迎留言指教,謝謝!!
(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)
沒有留言:
張貼留言