Linux

Tinyproxy 網頁代理伺服器安裝、設定與使用教學與範例

介紹如何在 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

網路介面與通訊埠

ListenPort 可以設定代理伺服器所傾聽的網路介面與通訊埠:

# 傾聽的通訊埠
Port 8888

# 傾聽的網路介面
Listen 192.168.0.1

Bind 可以設定代理伺服器對外連線時所使用的網路介面:

# 連出的網路介面
Bind 192.168.0.1

若要讓代理伺服器連入與連出都使用同一個網路介面,可以將 BindSame 設定為 yes

# 連入與連出使用同一個網路介面
BindSame yes

連線數

MaxClients 可以設定 Tinyproxy 同時允許的最大連線數:

# 最大連線數
MaxClients 100

MinSpareServersMaxSpareServers 可以設定空閒伺服器數量的下限與上限值:

# 空閒伺服器數量下限與上限值
MinSpareServers 5
MaxSpareServers 20

StartServers 可以設定初始的伺服器數量:

# 初始伺服器數量
StartServers 10

IP 存取控制

如果在 Tinyproxy 的設定檔中,沒有任何 IP 存取控制相關的設定,則預設會允許任何 IP 來源的使用者存取代理伺服器;如果加入了任何 AllowDeny 存取控制的設定,則 Tinyproxy 就會僅允許那些有被設定所允許的來源 IP,所有沒有被寫在設定檔中的來源 IP 預設都會被阻擋掉。

Allow 可以指定允使存取代理伺服器的 IP 位址白名單,可以使用單一 IP 位址或網段的方式指定,而 Deny 則是設定禁止存取的黑名單:

# 允許或禁止使用代理伺服器的用戶 IP 位址
Allow 127.0.0.1
Deny 192.168.0.12
Allow 192.168.0.0/16

AllowDeny 也支援網域的指定方式(例如 .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 來說會使用到的連接埠有 443563

# 對外連線允許的連接埠
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/"

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago