tinyproxy 的部署和使用不完全指北

tinyproxy - GitHub

介绍

  • Tinyproxy 是一个面向 POSIX 系统开发的轻量级的开源 HTTP/HTTPS 代理守护进程Progress,其设计目标是快而小,从底层开始进行设计,保证了在高速的同时体积依然很小。它适用于需要完整 HTTP 代理特性,但系统资源又不足以运行大型代理的场景,比如嵌入式部署。
  • Tinyproxy 对小规模网络Network非常有用,这样的场合下大型代理会使系统资源紧张,或有安全风险。 Tinyproxy 的一个关键特性是其缓冲连接的理念。从效果上看, Tinyproxy服务Services器的响应进行了高速缓冲,然后按照客户端能够处理的最高速度进行响应。该特性极大的降低了网络延滞带来的问题。

  • 支持匿名模式:
    • 可让您配置哪些 HTTP标头可被允许通过,哪些 HTTP标头应被阻止。 这使您既可以限制从HTTP服务器向Web浏览器发送的数据(例如Cookie),也可以限制从Web浏览器到HTTP服务器发送的数据(例如版本信息)。
  • 支持 HTTPS:
    • 可以通过 CONNECT 请求Request来转发 HTTPS 连接。Tinyproxy 允许进行 HTTPS 连接的转发,而且无需通过 CONNECT 方法以任何形式修改流量内容(请参阅ConnectPort 指令)。
    • 使用 AddHeader 指令,您可以向传出的流量里添加或插入 HTTP 标头信息。
  • 远程监视:
    • 通过使用远程监视工具,您可以远程获知代理统计信息、日志和访问信息,从而确切了解代理的繁忙程度。
  • 负载监视:
    • 可配置成当负载达到某个程度时,拒绝新的代理请求。
  • 访问控制:
    • 可设置特定的 IP 地址或者 IP 段才可访问。
  • 安全:
    • 不需要 root 权限。
    • 只需进行一些配置(比如,将 Tinyproxy 创建的文件设为由非 root 用户拥有,并让它在大于 1024 的端口上运行),就能让 Tinyproxy 在没有任何特殊权限的情况下运行,从而将系统受到破坏的风险降至最低。
    • 您可以配置 Tinyproxy 来实现 访问控制,从而仅允许来自特定子网或特定接口Interface的请求,从而确保那些随机Random出现的、未经授权的人不能使用您的代理。
  • 轻量化:
    • 只需要极小的系统资源。
    • Tinyproxy 的体积很小,也仅需少量系统资源。在使用 glibc 时,内存占用一般大约 2 MB,而 CPU 占用会随着连接数量线性增长(具体取决于连接速度)。因此,Tinyproxy 可用在比较老旧的计算机上,或者用在基于 Linux 的路由器等网络设备上,而不会对设备性能造成明显的影响。
  • 支持基于 URL 的过滤。
  • 支持透明代理
    • 使客户端无需进行任何配置即可使用代理。您也可以将其用作您网站的反向代理前端。
  • 支持多级代理。
  • 开源:
    • Tinyproxy 采用 GNU GPL 协议(版本2及以上)分发。
  • 易于构建:
    • Tinyproxy 的构建和运行仅需一个最小化的 POSIX 环境。同时,它可以用其他附加库来添加额外功能。
  • 稳定:
    • 它的设计致力于防止缓冲区溢出。代码结构的简单也确保了此类bug易于定位。
  • 高自由度:
    • 如果您要构建自定义Web代理,可以轻松地修改 Tinyproxy 以满足您的自定义需求。 源码结构非常简单,遵循 KISS 原则。 因此,可以把它作为基础Base,来实现您可能需要Web代理执行的任何操作。

安装

直接安装

通过下面的命令在不同平台上直接安装 tinyproxy 服务
[RHEL](Red Hat Enterprise Linux) / CentOS / Fedora

yum install tinyproxy

从 EPEL 仓库Repository中安装 Tinyproxy。
Debian / Ubuntu

apt install tinyproxy

Archlinux / manjaro

pacman -S tinyproxy

openSUSE

zypper in tinyproxy

FreeBSD,OpenBSD 或 NetBSD

可以使用 pkg_add 程序来安装

pkg install tinyproxy

Mac OS
对于 Mac OS X 用户,可以查看 MacPorts 来检查其中的 Tinyproxy 端口是否已是最新版本。
如果您觉得您操作系统Operating System中的 Tinyproxy 二进制软件包不是最新的,请联系该操作系统的软件包维护者。 如果这行不通,您也可以从源代码编译Compiler得到最新的稳定版本。

homebrew install proxy

手动安装

最新版下载链接:

https://github.com/tinyproxy/tinyproxy/releases/latest

编译安装

我们以源代码的形式分发 Tinyproxy,必须在对其编译后,才能在您的系统上使用。 请查看源代码树中的 INSTALL 文件,获取构建说明。 Tinyproxy 的最新稳定发行版Distribution本是 tinyproxy-1.8.4.tar.bz2, 它发布于2016年1月1日。Tinyproxy 1.8.4 的 NEWS 文件包含了发行说明。您可以使用其PGP签名验证tarball。 您也可以浏览 Tinyproxy 旧的发行版本。
通过
我们使用 Git 作为 Tinyproxy 源代码仓库的版本控制系统。 要获取 Tinyproxy 仓库的副本,请使用以下命令:

git clone --depth=1 git@github.com:tinyproxy/tinyproxy.git

下载最新版本代码 (当然,可能是实验性代码,建议还是从上面的链接手动下载最新版 release 代码)
如果你使用的是其它平台,更多的安装方式可直接参考官方文档:https://tinyproxy.github.io/

  1. 通过源码安装

如果你使用的平台,官方还不支持通过软件包安装。你也可以通过源码进行编译安装。

git clone --depth=1 https://github.com/tinyproxy/tinyproxy.git
cd tinyproxy
./autogen.sh
./configure
make
make install

配置

TinyProxy 默认配置文件Profile路径为 /etc/tinyproxy/tinyproxy.conf。如果你要自定义配置文件位置,可以在启动 TinyProxy 时 通过 -c 参数Parameter来指定。

该页面描述配置文件的语法和内容。

Tinyproxy 配置文件包含很多键值对,每行一对。以 # 开头的行或者空白行是注释,会被忽略。关键字不区分大小写,但值内容会区分大小写。如果值内容里包含空格,可以将他们括在双引号"中。可用的关键字及其描述如下:

快速查看当前配置文件

cat /etc/tinyproxy/tinyproxy.conf | grep -v '#' | grep -v '^$'

打开配置文件

vim /etc/tinyproxy/tinyproxy.conf
下面我们来看下几个主要的配置参数: 变量 默认值 解释
User tinyproxy 指定运行 TinyProxy 的用户。可以填用户名或UID。
Group tinyproxy 指定运行 TinyProxy 的用户组。可以填用户名或UID。
Port 8888 指定 TinyProxy 的监听端口。Tinyproxy服务将侦听的端口。如果端口小于 1024,则需要以 root 用户的身份启动 Tinyproxy 进程。
Listen 指定 TinyProxy 绑定的网卡接口,默认是绑定到所有可用的网卡接口的。如需绑定到指定网卡接口,只需去掉对应的注释并指定网卡对应 IP 地址即可。在默认情况下,Tinyproxy 会侦听在所有可用接口上的连接(即,侦听地址 0.0.0.0)。通过配置此参数,Tinyproxy 可以被告知仅侦听一个特定地址。
Allow 127.0.0.1 指定可访问 TinyProxy 设备的 IP 或网段,默认仅允许本机访问。如果你想允许所有人使用该代理,注释 Allow 选项即可。如果你想增加多个可访问的网段,可以用多个 Allow 选项同时定义不同网段即可。
Bind 这允许您指定 Tinyproxy 将绑定到哪个目标地址,以将其连接到Web服务器或上游代理。
BindSame 在多网卡的情况下,设置出口 IP 是否与入口 IP 相同。默认情况下是关闭的。
例如:服务器上存在 IP 1.2.3.4,当你请求该 IP 对应的 Tinyproxy 代理时,也通过 1.2.3.4 做为出口访问目标网站。如果此布尔值选项被设置为 Yes,Tinyproxy 会将目标地址设定为触发了传出请求的传入连接的IP地址。
Timeout 600 Tinyproxy关闭连接之前,允许该连接处于非活动状态的最大秒数。
StartServers 10 指定 TinyProxy 初始启动的子进程数量。一般应将其设置为位于 MinSpareServers和 MaxSpareServers 之间的值。
MinSpareServers, MaxSpareServers 5, 20 Tinyproxy 始终保留一定数量的空闲子进程,以保证它可以快速处理新传入的客户端请求。 MinSpareServer 和 MaxSpareServers 控制备用进程数的最大值和最小值。即,当备用服务器的数量降至 MinSpareServers以下时,Tinyproxy 将在后台开始创建新的备用进程,而当备用进程的数量超过 MaxSpareServers 时,Tinyproxy 将杀死多余的进程
MaxClients 100 设置最大客户端链接数
MaxRequestsPerChild 此选项限制一个子进程在终止之前将会处理的最大连接数。 默认值为0,即无限制。此选项是在出现内存泄漏问题时可采取的紧急措施。 在这种情况下,请将 MaxRequestsPerChild 设置为例如1000 或 10000,可能会有用。
Upstream,No Upstream 该选项允许您设置一组基于所访问站点主机Host或域的规则,来选择是否使用某些上游代理服务器。这些规则按照在配置文件中录入的顺序存储,并且在使用时 最后一条 所匹配的规则会生效。有以下三种指定上游主机的方式:

upstream host:port 开启一个常规形式的上游代理
upstream host:port "site_spec" 为匹配 site_spec 的站点启用上游代理
no upstream "site_spec" 为匹配 site_spec 的站点禁用上游代理

匹配可以用主机名、域名、IP范围等形式来指定:
.name 匹配任何在域 name 中的主机
. 匹配任何无域名的主机(在空域名中)
IP/bits 匹配IP地址/掩码位数
IP/mask 匹配IP地址/掩码
Allow, Deny Allow和Deny选项用于自定义允许哪些客户端访问Tinyproxy。 Allow和Deny行可以在配置文件里重复出现,以构建Tinyproxy的访问控制列表。在配置文件中的顺序很重要。 如果没有 Allow 或 Deny 行,则允许任意的客户端。反之,默认的操作是拒绝访问。 允许或拒绝的参数可以配置为客户端主机的单个IP地址,例如 127.0.0.1,IP地址范围,例如 192.168.0.1/24,或将与客户端主机名尾端匹配的字符串, 可以是完整的主机名,例如 host.example.com,或域名,例如.example.com,或者顶级域名,例如.com。
XTinyproxy 将此选项设置为Yes将通知Tinyproxy将包含客户端IP地址的标头X-Tinyproxy添加到请求中。

进阶选项

Filter /etc/ tinyproxy/ filter 指定设置过滤内容文件的位置
FilterURLs Off/On 设置使用 URL 或是域名方式进行过滤,默认是基于 URL 方式过滤的。域名过滤只检查域名段,URL 过滤则检查整个 URL。
FilterExtended Off/On 设置使用 POSIX 基本或者扩展的正则表达式来匹配过滤规则,默认为使用基本的
FilterCaseSensitive Off/On 设置是否使用区分大小写的正则表达式,默认为不区分大小写。
FilterDefaultDeny Yes/No 设置默认过滤策略。如果将该指令注释掉或设为 No,过滤规则为禁止访问规则。该值默认为 Yes,过滤规则为只允许访问过滤文件中的地址。
过滤规则配置示例:

1. 在 /etc/tinyproxy/filter 文件中添加代理允许或拒绝的域名地址。

hi-linux.com
过滤文件中的域名地址也是支持正则表达式的。

\.google\.com$</br>^hi-linux\.com$
2. 仅允许代理请求 hi-linux.com 的内容,配置如下:

Filter "/etc/tinyproxy/filter"
FilterURLs On
FilterDefaultDeny Yes
3. 仅允许代理请求除 hi-linux.com 域名以外的内容,
置如下:

Filter "/etc/tinyproxy/filter"
FilterURLs On
FilterDefaultDeny No
DefaultErrorFile "/usr/share/ tinyproxy/ default.html" 该选项控制如果发生未配置的错误时,返回的HTML模板文件。
ErrorFile 该选项控制 Tinyproxy 如果遇到特定的HTTP错误时,会返回哪个HTML文件。它包含两个参数,错误号、HTML错误文件的路径。
StatHost 该选项配置被当作统计主机的主机名或者IP地址:每当收到对该主机的请求时,Tinyproxy 会返回内部统计信息页面,而不会将请求转发给该主机。此页面的模板可以使用 StatFile 配置项进行配置。StatHost 的默认值为 tinyproxy.stats。
StatFile "/usr/share/ tinyproxy/ stats.html" 该选项配置 Tinyproxy 在收到对统计主机的请求时发送的HTML文件。如果未设置此选项,Tinyproxy 将返回一个硬编码的基本统计信息页面。有关详细信息,请参见 tinyproxy(8) 手册页中的 STATHOST 部分。需要注意的是,使用StatFile 以及 ErrorFile 和 DefaultErrorFile 选项配置的错误文件都是模板文件,其中可以包含一些模板变量,并由 Tinyproxy 在发送时进行扩展。例如,"{cause}" 表示简短的错误描述,"{detail}"表示详细的错误消息。tinyproxy(8) 手册页包含所有模板变量的描述。
LogLevel Info 设置日志级别。高于或等于该设置项级别的日志消息会被记录。例如,如果LogLevel设为 Warning,则从Warning到Critical级别的所有日志消息会被输出,但Notice或更低等级的日志消息会被过滤掉。允许的取值如下:

Critical(最简洁)
Error
Warning
Notice
Connect(不包含Info的连接日志)
Info(最详细)
LogFile /var/log/ tinyproxy/ tinyproxy.log 指定日志文件位置。该选项控制 Tinyproxy 将调试输出写入文件的位置。 此外,Tinyproxy 可以将日志输出到syslog - 请参阅 Syslog 选项。
Syslog Off/On 指定 TinyProxy 是否开启 Syslog 来记录日志
注:Logfile 和 Syslog 只能同时启用一个。如果两个都不启用的话 TinyProxy 会将日志直接输出到终端Terminal的标准输出。当设为 On 时,此选项告知 Tinyproxy 将其调试消息写入syslog,而不是写入由 LogFile 所配置的日志文件。这两个选项是互斥的。
PidFile /var/run/ tinyproxy/ tinyproxy.pid 指定 Pid 文件位置, 在 PidFile 文件不存在时会运行失败。该选项控制 Tinyproxy 主进程将其进程 ID 号存入的文件路径,用于处理信号。
DisableViaHeader 关闭 指定是否在 Header 中显示 Tinyproxy 相关信息,默认是关闭的。如果开启将不会在 Header 中显示 Tinyproxy 相关信息,相当于 Tinyproxy 是隐身模式
AddHeader 配置一个或多个 HTTP 请求标头,用于添加到由 Tinyproxy 发出的 HTTP 请求中。 需要注意的是,此选项不适用于 HTTPS 流量,因为 Tinyproxy 无法控制要交换的标头。
AddHeader "X-My-Header" "Powered by Tinyproxy"
ViaProxyName "tinyproxy" RFC 2616 要求代理将 Via 标头添加到 HTTP 请求中,但使用真实主机名可能会引起安全问题。 如果设置了 ViaProxyName 选项,其字符串值将用作 Via 标头中的主机名。 否则,将使用服务器的主机名。
DisableViaHeader No/Yes 该选项设置为 yes 时,Tinyproxy 不会将 Via 标头添加到请求中。 这实际上就使 Tinyproxy 进入了隐身模式。请注意,RFC 2616 要求代理设置 Via 头,因此启用此选项会破坏合规性。 除非您知道自己在做什么,否则不要禁用 Via 标头...
Filter Tinyproxy 支持基于 URL 或域的网站过滤。 此选项指定包含过滤规则的文件的位置,每行一条规则。
FilterURLs 如果此布尔选项设置为 Yes 或 On,则根据 URL 执行过滤,而不根据域执行过滤。默认设置为根据域进行过滤。
FilterExtended 如果此布尔选项设置为 Yes,则扩展的 POSIX 正则表达式将用来匹配过滤器规则。默认使用基本 POSIX 正则表达式。
FilterCaseSensitive 如果此布尔选项设置为 Yes,则过滤器规则匹配时会区分大小写。 默认匹配时不区分大小写。
FilterDefaultDeny 默认的过滤策略会允许所有与过滤规则不匹配的内容。 将 FilterDefaultDeny 设置为 Yes 会更改该策略,从而拒绝在过滤规则所匹配的域或URL之外的任何内容。
Anonymous 如果设置了 Anonymous 选项,则启用匿名代理。由 Anonymous 配置的标头被允许通过,其他标头会被拒绝。 如果未配置 Anonymous 选项,则允许所有标头通过。您必须给标头内容加上引号。
大多数站点都需要启用 cookie 才能正常工作,因此,如果您访问这种站点,需要允许 cookie 通过。
用法举例:

Anonymous "Host"
Anonymous "Authorization"
Anonymous "Cookie"
ConnectPort 443,563 此选项用于指定 CONNECT 方法所允许的端口。 如果找不到 ConnectPort 行,则允许所有端口。若要完全禁用 CONNECT,请仅设置一条值为 0 的 ConnectPort 选项行。
ReversePath 配置一条或多条 ReversePath 选项,以启用反向代理支持。 使用反向代理,可以使许多站点看起来像是单个站点的一部分。
配置以下指令,并在自己的计算机上的端口 8888上运行 Tinyproxy,则可以通过 http://localhost:8888/example/来访问站点 example.com。
ReversePath "/example/" "http://www.example.com/"
ReverseOnly 当把 Tinyproxy 用作反向代理时,强烈建议将此布尔选项设置为 Yes ,从而关闭普通代理功能。
ReverseMagic 将此选项设置为Yes,可让 Tinyproxy 使用 cookie 来跟踪反向代理的映射。 如果您需要反向具有绝对链接的代理站点,必须启用此选项。
ReverseBaseURL 用于访问此反向代理的URL地址。 该 URL 会被用于重写 HTTP 重定向地址,以使它们不会绕过代理。 如果您有一连串的反向代理,则需要在此处放置最外层的 URL(也就是终端用户在其浏览器中键入的地址)。如果未设置此选项,则不会修改重定向。

运行和测试

  • 运行 TinyProxy 非常简单,使用官方提供的脚本Script即可。
# 启动 TinyProxy
service tinyproxy start

# 停止 TinyProxy
service tinyproxy stop

# 重启 TinyProxy
service tinyproxy restart
  • 如果服务器有启用防火墙,记得开放相应的 TinyProxy 端口
    iptables -I INPUT -p tcp –dport 8888 -j ACCEPT
  • 测试代理是否正常工作

使用curl命令测试代理服务器是否生效

curl url --proxy <代理服务器域名或 IP>:<监听端口>

如果是https代理加 -k 参数

curl url --proxy <代理服务器域名或 IP>:<监听端口> -k

例如

curl url --proxy 8.8.8.8:8888

或使用 telnet 命令

telent <代理服务器域名或 IP> 8888
  • 查看 TinyProxy 请求日志
tail -f /var/log/tinyproxy/tinyproxy.log

FAQ

time out(超时)可能是因为服务器的防火墙没有打开这个端口
Ubuntu 防火墙操作看[这篇]()
连接上了但是被 reject(拒绝)了可能是因为 tinyproxy 没有允许你正在使用的这台电脑或是服务器的 ip

firewall-cmd --add-port=8888/tcp --permanent
firewall-cmd --reload

uwp

iptables

支持

您可以随时通过 github issues 来报告新 bug,或提出功能建议。
Tinyproxy 的开发者们也会浏览在 irc.freenode.net 上的 #tinyproxy 标签Tag

实践

[如何连接代理服务器]()

qqbot 代理文件服务下载

代理访问掩藏真实 ip

参考

https://tinyproxy.github.io/
https://github.com/tinyproxy/tinyproxy
https://www.cnblogs.com/daoyi/p/bu-shutinyproxy-tou-ming-dai-li-fu-wu.html
https://blog.csdn.net/testcs_dn/article/details/89335426
https://java-er.com/blog/tinyproxy-install/
https://www.cnblogs.com/masako/p/11459496.html
https://cloud.tencent.com/developer/article/1475747
https://www.jianshu.com/p/cfef3e491b52
https://www.jianshu.com/p/0f8ac701748d
https://www.cnblogs.com/masako/p/11459496.html
https://zhuanlan.zhihu.com/p/72903589

标签: none

添加新评论