LPI Linux 认证/LPIC2 考试 202/Web 服务
|
实现 Web 服务器维护 Web 服务器实现代理服务器
关键词,文件和实用程序
- access.log
- .htaccess
- httpd.conf
- mod_auth
- Htpasswd
- Htgroup
练习
- 维护 Web 服务器
- 维护 Web 服务器
关键词,文件和实用程序
- httpd.conf
练习
- 实现代理服务器
我们将使用 Squid Web 代理服务器版本 2.4 和 Linux 内核版本 2.4。
代理可以通过两种方式完成:正常代理和透明代理
- 在正常代理中,客户端在其 Web 浏览器软件中指定代理的主机名和端口号。然后浏览器向代理发出请求,代理将请求转发到原始服务器。
- 在透明代理中,...
如果使用透明代理:您想强制网络上的客户端使用代理,无论他们是否愿意。您希望客户端使用代理,但不想让他们知道他们正在被代理。您希望客户端被代理,但不想费心在数百或数千个 Web 浏览器中更新设置。
有两种类型的透明代理
- 网关上的 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,您应该能够将 Web 浏览器的代理设置设置为盒子的 IP 和端口 3128(除非您更改了默认端口号),并像正常代理一样访问 Squid。实现代理服务器透明代理可以通过两种不同的方式设置:在路由器上或在另一个(远程)主机上路由器上的透明代理将涉及在“正常”模式下设置 Squid,并配置数据包过滤子系统将客户端的连接重定向到 Squid
所需的内核网络选项是
- 在“常规设置”下
- 网络支持
- Sysctl 支持
- 在“网络选项”下
- 网络数据包过滤
- TCP/IP 网络
- 在“网络选项”->“IP:Netfilter 配置”下
- 连接跟踪
- IP tables 支持
- 完全 NAT
- REDIRECT 目标支持
- 在“文件系统”下
- /proc 文件系统支持
在“网络选项”下,您必须对 快速切换 说 NO!
一旦您的新内核启动并运行,请确保您启用了 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
- 练习