LPI Linux 认证/实施代理服务器
(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.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
- 练习