跳转到内容

LPI Linux 认证/实施代理服务器

来自维基教科书,为开放世界提供开放书籍

详细目标 (208.3)

[编辑 | 编辑源代码]

(LPIC-2 版本 4.5)


权重 2


描述: 候选人应该能够安装和配置代理服务器,包括访问策略、身份验证和资源使用。


关键知识领域

  • Squid 3.x 配置文件、术语和实用程序
  • 访问限制方法
  • 客户端用户身份验证方法
  • Squid 配置文件中 ACL 的布局和内容


术语和实用程序

  • squid.conf
  • acl
  • http_access


  • 实施代理服务器

我们将使用 squid web 代理服务器版本 2.4 和 Linux 内核版本 2.4。

代理可以通过两种方式进行:正常代理透明代理

  • 正常代理中,客户端在他的网页浏览软件中指定代理的主机名和端口号。然后浏览器向代理发出请求,代理将这些请求转发到原始服务器。
  • 透明代理中,...

如果使用透明代理:您想强制网络上的客户端使用代理,无论他们是否愿意。您想让客户端使用代理,但不想让他们知道他们正在被代理。您想让客户端被代理,但不想费心更新数百或数千个网页浏览器的设置。

有两种类型的透明代理

  • Squid 在网关上
  • Squid 在与网关不同的盒子上


网关盒上的 Squid

[编辑 | 编辑源代码]

设置 squid 用于普通代理非常简单:在安装 squid 后,编辑默认配置文件 squid.conf 找到以下指令,取消注释并将其更改为适当的值

  • httpd_accel_host virtual
  • httpd_accel_port 80
  • httpd_accel_with_proxy on
  • httpd_accel_uses_host_header on

接下来,查看 cache_effective_user 和 cache_effective_group 指令,并使用专用用户和组(即 squid/squid)设置它们

最后,查看 http_access 指令。默认值通常为 ``http_access deny all。这将阻止任何人访问 squid。目前,您可以将其更改为 ``http_access allow all,但一旦它开始工作,您可能需要阅读 ACL(访问控制列表)的说明,并设置缓存,以便只有您本地网络上的人员(或任何其他人员)可以访问缓存。


squid 中的 ACL 将使您能够限制对代理的访问。
ACL 规则的一般格式为
acl aclname acltype string1 ...
然后可以在 http_access 指令中使用 ACL 规则

ACL 类型为

  • Src:acl aclname src ip-address/netmask
acl aclname src 172.16.1.0/24
  • Dst:acl aclname dst ip-address/netmask
acl aclname dst 172.16.1.0/24
  • Time:acl aclname time [day-abbreviations: M,T,W,H,F,A,S] [h1:m1-h2:m2]
acl ACLTIME time M 9:00-17:00
  • Port:acl aclname port port-no
acl acceleratedport port 80
  • Proto:acl aclname proto protocol
acl aclname proto HTTP FTP
  • Method:acl aclname method method-type
acl aclname method GET POST
  • Maxconn:acl aclname maxconn integer
acl twoconn maxconn 5


接下来,使用 squid -z 初始化缓存目录(如果这不是 squid 的新安装,则应跳过此步骤)。接下来,通过 /etc/init.d/squid 脚本启动 squid,您应该能够将网页浏览器的代理设置设置为盒子的 IP 和端口 3128(除非您更改了默认端口号),并将 squid 作为普通代理访问。实施代理服务器 透明代理可以通过两种不同的方式设置:在路由器上或在另一个(远程)主机上 在路由器上进行透明代理将涉及在“正常”情况下设置 squid,并将配置数据包过滤子系统以将客户端的连接重定向到 squid
所需的内核网络选项为

  • 在“常规设置”下
网络支持
Sysctl 支持
  • 在“网络选项”下
网络数据包过滤
TCP/IP 网络
  • 在“网络选项”->“IP:Netfilter 配置”下
连接跟踪
IP 表支持
完整 NAT
REDIRECT 目标支持
  • 在“文件系统”下
/proc 文件系统支持

您必须在网络选项下对 快速切换 说不!


一旦您启动了新的内核,请确保您启用了 IP 转发。接下来,要配置 iptables 以启用透明代理,您只需

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128

透明代理到远程盒子

[编辑 | 编辑源代码]

假设我们有两个名为 squid-box 和 iptables-box 的盒子,它们都在 local-network 网络上。首先,在 squid 将在其上运行的机器 squid-box 上,您不需要 iptables 或任何特殊的内核选项,只需要 squid。但是,您将需要上述“http_accel”选项。现在,在 iptables 将在其上运行的机器 iptables-box 上,您需要按上述配置内核,但您不需要 REDIRECT 目标支持。您将需要 2 条 iptables 规则
iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box
第一个将数据包从 iptables-box 发送到 squid-box。第二个确保回复通过 iptables-box 发送回客户端,而不是直接发送给客户端。这非常重要,因为否则 squid 永远不会收到来自目标 Web 服务器的答案(因此,无法进行缓存!)。


关键词、文件和实用程序

  • squid.conf
  • Acl
  • http_access
  • 练习


华夏公益教科书