Tinyproxy 是一款轻量级的开源 HTTP/HTTPS 代理服务器,专为在 Linux 系统上以最小资源占用运行而设计。它提供基础的代理功能,适用于嵌入式设备、个人使用,或对资源效率有严格要求的小规模网络环境。
概述与使用场景
相比大型代理方案中的高级缓存、完善的认证方式或 SOCKS 代理能力,Tinyproxy 更看重占用小和配置简单。它主要作为 HTTP/HTTPS(CONNECT 方法)代理运行。
Tinyproxy 的典型使用场景包括:
- 个人代理: 为个人用户隐藏客户端 IP 地址或绕过基础的地域限制。
- 嵌入式系统: 在 CPU、内存和存储资源有限的设备上提供代理服务。
- 开发环境: 本地测试支持代理的应用程序,或检查网络流量。
- 小型网络网关: 为少量客户端提供简单的、无缓存的代理。
- 代理串联: 在多级代理架构中充当中间节点。
安装
大多数 Linux 发行版的标准软件源中都提供 Tinyproxy。
Debian/Ubuntu
sudo apt update
sudo apt install tinyproxy
RHEL/CentOS/Fedora
sudo dnf install tinyproxy
# 或者用于较旧的 CentOS/RHEL:
# sudo yum install tinyproxy
安装完成后,Tinyproxy 通常会自动启动并监听 8888 端口。
配置
Tinyproxy 通过单个配置文件进行管理,通常位于 /etc/tinyproxy/tinyproxy.conf。默认文件中的所有指令都带有注释,具备自文档特性。
核心指令
-
Port:指定 Tinyproxy 监听的端口。
Port 8888
修改该值后需要重启 Tinyproxy 服务。 -
Listen:把 Tinyproxy 绑定到指定 IP 地址。默认监听所有可用网络接口(0.0.0.0)。指定地址可以限制访问范围。
Listen 192.168.1.10 -
Allow:定义允许连接到代理的 IP 地址或子网。可以使用多条Allow指令。如果没有指定任何Allow指令,Tinyproxy 会允许来自所有主机的连接。先显式拒绝全部、再放行特定网段是常见的安全做法。
# Deny all by default (if no Allow directives are present, this is implicitly false) # Allow 127.0.0.1 # Allow 192.168.1.0/24 -
Timeout:设置连接的空闲超时时间,单位为秒。
Timeout 600 -
User/Group:指定 Tinyproxy 启动后降权使用的用户和用户组。以非 root 用户运行是安全最佳实践。
User tinyproxy Group tinyproxy -
LogLevel:控制日志详细程度。可选值包括Critical、Error、Warning、Notice、Info、Debug。
LogLevel Info -
LogFile:指定日志文件路径。
LogFile "/var/log/tinyproxy/tinyproxy.log" -
MaxClients:设置 Tinyproxy 可处理的最大并发客户端连接数。超过该上限的连接会被拒绝。
MaxClients 100 -
DisableViaHeader:启用后,Tinyproxy 不会在出站请求中添加Via头。这可以避免暴露代理的存在,从而提升隐私性。
DisableViaHeader Yes -
ConnectPort:指定 Tinyproxy 允许CONNECT请求(用于 HTTPS 隧道)使用的端口。可以使用多条ConnectPort指令。
ConnectPort 443 ConnectPort 563
高级配置指令
-
Upstream:把 Tinyproxy 串联到另一台代理服务器。该指令为特定域名或全部流量指定上游代理。
```
# Use upstream_proxy.example.com:8080 for all requests
Upstream http upstream_proxy.example.com:8080Use a different upstream for specific domains
Upstream http 10.0.0.1:3128 "example.com"
Upstream http 10.0.0.1:3128 ".example.org"
`` 关键字http表示这是一个 HTTP 代理。Upstream` 指令按顺序处理,首个匹配项生效。 -
NoCache:阻止 Tinyproxy 发送可能导致客户端缓存的特定 HTTP 头。这并不意味着 Tinyproxy 自身具备缓存机制。
NoCache -
Filter/FilterURLs/FilterBypass:提供基于正则表达式的基础内容过滤。Filter "/etc/tinyproxy/filter.txt":指定包含待拦截 URL 正则表达式的文件。FilterURLs Yes:启用 URL 过滤。FilterBypass "192.168.1.0/24":允许指定客户端跳过过滤。
filter.txt文件每行包含一条正则表达式。例如,拦截 Facebook:
.*facebook\.com.*
这只是一种简易的过滤机制,无法替代专业的内容过滤方案。
服务管理
修改 tinyproxy.conf 之后,必须重启 Tinyproxy 服务,改动才会生效。
Systemd(现代 Linux 发行版)
sudo systemctl restart tinyproxy
sudo systemctl enable tinyproxy # 确保开机自启
sudo systemctl status tinyproxy
SysVinit(较旧的 Linux 发行版)
sudo /etc/init.d/tinyproxy restart
sudo /etc/init.d/tinyproxy status
测试代理
完成配置并重启服务后,即可测试代理。
使用 curl
curl -x http://localhost:8888 http://ipinfo.io/ip
如果从另一台机器测试,请把 localhost:8888 替换为 Tinyproxy 服务器的 IP 和端口。输出应显示 Tinyproxy 服务器的公网 IP 地址,而不是客户端的地址。
浏览器配置
把浏览器(例如 Firefox、Chrome)配置为使用 Tinyproxy 服务器 IP 地址和端口上的 HTTP 代理,然后访问一个网站确认连通性。
安全注意事项
- 访问控制: 务必使用
Allow指令限制对代理的访问。默认情况下,若没有任何Allow指令,Tinyproxy 可能接受来自所有主机的连接。 - 防火墙: 配置系统防火墙(例如
ufw、firewalld),仅允许受信任的 IP 段访问 Tinyproxy 端口。
bash # 使用 ufw 的示例 sudo ufw allow from 192.168.1.0/24 to any port 8888 sudo ufw enable - 非 root 用户: 确保 Tinyproxy 以非 root 用户运行(
User和Group指令),以降低潜在安全风险。 - 日志: 监控 Tinyproxy 日志中的异常活动。
DisableViaHeader: 可考虑启用以提升隐私性,但它并不提供匿名性。
与 Squid 的对比
Tinyproxy 和 Squid 都是 Linux 上的 HTTP 代理服务器,但面向不同的使用场景,功能集也不同。
| 特性 | Tinyproxy | Squid |
|---|---|---|
| 主要目标 | 资源占用最小、简单 | 高性能、功能丰富、缓存 |
| 资源占用 | CPU/内存占用极低 | CPU/内存中到高,尤其在大缓存和高流量下 |
| 缓存 | 无内置缓存 | 面向 HTTP 对象的丰富、可配置缓存 |
| 认证 | 原生不支持 | Basic、Digest、NTLM、Kerberos、外部 helper |
| 访问控制 | 基于 IP(Allow 指令) |
基于 IP、域名、URL、用户、时间、方法等的高粒度 ACL |
| 协议 | HTTP、HTTPS(CONNECT) | HTTP、HTTPS(CONNECT)、FTP、Gopher、SOCKS(上游的客户端侧) |
| 透明代理 | 不支持透明代理 | 完整支持透明代理 |
| 复杂度 | 配置简单、指令少 | 配置复杂、指令众多、脚本能力强大 |
| 典型用途 | 嵌入式系统、个人代理、小型局域网 | 企业网络、ISP、大型组织、内容过滤、安全 |
故障排查
- 查看日志:
LogFile指令指定 Tinyproxy 写入日志的位置。排查问题时把LogLevel提高到Debug以获得更详细的输出。
bash sudo tail -f /var/log/tinyproxy/tinyproxy.log - 服务状态: 用
systemctl status tinyproxy或/etc/init.d/tinyproxy status确认 Tinyproxy 正在运行。 - 防火墙: 确认防火墙没有拦截到 Tinyproxy 端口的连接。必要时可临时关闭防火墙进行测试。
- 配置语法: 检查
tinyproxy.conf是否存在语法错误。配置格式有误时,Tinyproxy 往往无法启动,或在日志中报错。 - 网络连通性: 确保 Tinyproxy 服务器能够访问目标地址。
