介紹如何在 Ubuntu Linux 中安裝、設定與使用 Tinyproxy 網頁代理伺服器。
Tinyproxy 是一個輕量級的 HTTP/HTTPS 代理伺服器,適合用於需要完整代理伺服器功能小型的應用環境(例如嵌入式系統),以下是在 Ubuntu Linux 中安裝、設定與使用 Tinyproxy 的步驟教學。
安裝 Tinyproxy 代理伺服器
若在 Ubuntu Linux 中可以透過 apt
安裝 Tinyproxy 代理伺服器:
# 安裝 tinyproxy 套件
sudo apt install tinyproxy
安裝完成之後,會自動啟動 tinyproxy
這個服務,我們可以使用 systemctl
來查詢服務狀態或進行各項操作:
# 查詢 tinyproxy 服務狀態 systemctl status tinyproxy # 啟動 tinyproxy 服務 sudo systemctl start tinyproxy # 停止 tinyproxy 服務 sudo systemctl stop tinyproxy # 重新啟動 tinyproxy 服務 sudo systemctl restart tinyproxy
安裝好 Tinyproxy 代理伺服器之後,預設可以從本機的 8888
連接埠來使用代理伺服器,我們可以透過 curl
先測試一下伺服器是否有正常運作:
# 測試 Tinyproxy 代理伺服器 curl -x http://localhost:8888 -I https://www.google.com/
HTTP/1.0 200 Connection established Proxy-agent: tinyproxy/1.10.0 HTTP/2 200 content-type: text/html; charset=ISO-8859-1 p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info." date: Mon, 29 Nov 2021 03:35:45 GMT server: gws x-xss-protection: 0 x-frame-options: SAMEORIGIN expires: Mon, 29 Nov 2021 03:35:45 GMT cache-control: private set-cookie: 1P_JAR=2021-11-29-03; expires=Wed, 29-Dec-2021 03:35:45 GMT; path=/; domain=.google.com; Secure set-cookie: NID=511=J6hOZcMnA9uT8lfm0PTyp1B87g-Ep50QBUnhjzdO1jVpHMZsPQajwIvRA0Yyh-KjtDOC8GdinkHjZVi2xIVwZtWTj1zI51QabG7MsEd6j6l6ixvJAUjurW5QMMWeTzTtTy899ruyT6Zhr5Z1Z1pEH52HWaZ2dN-U_v-KMBR822M; expires=Tue, 31-May-2022 03:35:45 GMT; path=/; domain=.google.com; HttpOnly alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43
設定 Tinyproxy 代理伺服器
Tinyproxy 的設定檔案位於 /etc/tinyproxy/tinyproxy.conf
,我們可以透過這個檔案來修改各種 Tinyproxy 的設定,以下是一些常用的設定值範例。
若更改了 Tinyproxy 的設定,必須要重新啟動 tinyproxy
服務,新的設定才會生效:
# 重新啟動 tinyproxy 服務
sudo systemctl restart tinyproxy
網路介面與通訊埠
Listen
與 Port
可以設定代理伺服器所傾聽的網路介面與通訊埠:
# 傾聽的通訊埠 Port 8888 # 傾聽的網路介面 Listen 192.168.0.1
Bind
可以設定代理伺服器對外連線時所使用的網路介面:
# 連出的網路介面 Bind 192.168.0.1
若要讓代理伺服器連入與連出都使用同一個網路介面,可以將 BindSame
設定為 yes
:
# 連入與連出使用同一個網路介面
BindSame yes
連線數
MaxClients
可以設定 Tinyproxy 同時允許的最大連線數:
# 最大連線數 MaxClients 100
MinSpareServers
與 MaxSpareServers
可以設定空閒伺服器數量的下限與上限值:
# 空閒伺服器數量下限與上限值 MinSpareServers 5 MaxSpareServers 20
StartServers
可以設定初始的伺服器數量:
# 初始伺服器數量 StartServers 10
IP 存取控制
如果在 Tinyproxy 的設定檔中,沒有任何 IP 存取控制相關的設定,則預設會允許任何 IP 來源的使用者存取代理伺服器;如果加入了任何 Allow
或 Deny
存取控制的設定,則 Tinyproxy 就會僅允許那些有被設定所允許的來源 IP,所有沒有被寫在設定檔中的來源 IP 預設都會被阻擋掉。
Allow
可以指定允使存取代理伺服器的 IP 位址白名單,可以使用單一 IP 位址或網段的方式指定,而 Deny
則是設定禁止存取的黑名單:
# 允許或禁止使用代理伺服器的用戶 IP 位址 Allow 127.0.0.1 Deny 192.168.0.12 Allow 192.168.0.0/16
Allow
與 Deny
也支援網域的指定方式(例如 .mydomain.com
),不過採用網域的方式會造成每次連線時,都需要額外的 DNS 查詢,會降低連線的速度。
帳號密碼設定
BasicAuth
可以設定允許使用代理伺服器的使用這帳號與密碼,此設定跟 Allow
的狀況類似,如果沒有任何 BasicAuth
設定,則預設允許任何人使用,但若加上 BasicAuth
設定之後,則僅允許通過帳號與密碼認證的使用者使用代理伺服器。
# 設定帳號與密碼
BasicAuth user password
HTTP 標頭
如果希望 Tinyproxy 在對外連線時自動加入指定的 HTTP 標頭,可以使用 AddHeader
設定:
# 加入指定 HTTP 標頭 AddHeader "X-My-Header" "Powered by Tinyproxy"
HTTP RFC 規定代理伺服器必須加上 Via
標頭設定,我們可以透過 ViaProxyName
設定這個標頭內容:
# HTTP 的 Via 標頭設定 ViaProxyName "tinyproxy"
如果不希望加入 Via
標頭,則可將 DisableViaHeader
設為 Yes
:
# 不加入 Via 標頭
DisableViaHeader Yes
網站篩選設定
Tinyproxy 的網站篩選設定可以用來設定允許(或不允許)瀏覽的網站清單:
# 網站篩選設定檔案 Filter "/etc/tinyproxy/filter"
這裡指定的 /etc/tinyproxy/filter
是一個文字檔,裡面存放黑名單或白名單列表,以下是一個簡單的範例:
facebook.com youtube.com
而這個清單的含意要從 FilterDefaultDeny
的設定來決定:
FilterDefaultDeny |
Filter 清單含意 |
---|---|
No |
黑名單,阻擋清單中的網站,其餘皆允許。 |
Yes |
白名單,允許清單中的網站,其餘皆阻擋。 |
若要使用白名單模式,則將 FilterDefaultDeny
設定為 Yes
:
# 預設為禁止(白名單模式)
FilterDefaultDeny Yes
Filter
清單預設是以網域(domain)的方式進行篩選,若要改以 URL 網址的方式來篩選,可以將 FilterURLs
設定為 On
:
# 以 URL 網址的方式篩選
FilterURLs On
Filter
清單也支援正規表達式,或是將大小寫視為不同:
# 啟用正規表達式 FilterExtended On # 大小寫視為不同 FilterCaseSensitive On
匿名代理伺服器
若加入 Anonymous
設定,則會啟用匿名代理伺服器功能,僅只有使用 Anonymous
所指定的 HTTP 標頭可以通過代理伺服器,其餘未指定的 HTTP 標頭都會被移除:
# 匿名代理伺服器,設定允許的 HTTP 標頭 Anonymous "Host" Anonymous "Authorization" Anonymous "Cookie"
允許連線的連接埠
ConnectPort
可以設定 Tinyproxy 對外連線時允許的連接埠,以 SSL 來說會使用到的連接埠有 443
與 563
:
# 對外連線允許的連接埠
ConnectPort 443
ConnectPort 563
如果不指定任何 ConnectPort
,則預設會允許使用所有的連接埠。
反向代理
Tinyproxy 也支援反向代理(reverse proxy),ReversePath
可以用來設定反向代理的路徑:
# 反向代理設定 ReversePath "/google/" "http://www.google.com/"
在這樣的設定之下,當開啟 http://localhost:8888/google/
這個網址時,就會顯示 Google 的網頁。
當使用反向代理功能時,強烈建議將 ReverseOnly
設定為 Yes
,關閉一般代理的功能:
# 只啟用反向代理
ReverseOnly Yes
如果在反向代理的網站中需要有絕對路徑,則需要將 ReverseMagic
設定為 Yes
,讓 Tinyproxy 使用 cookies 追蹤反向代理的對應關係:
# 使用 cookies 追蹤反向代理的對應關係
ReverseMagic Yes
ReverseBaseURL
可以設定反向代理網站的基礎 URL,此參數會用於網址的重新編排,可以防止使用者透過連結跳脫出反向代理網站:
# 匿名代理伺服器,設定允許的 HTTP 標頭 ReverseBaseURL "http://localhost:8888/"