RHEL6: squid代理服务器的安装与简单配置

参考文档

1.鸟哥的Linux私房菜 http://linux.vbird.org/linux_server/0420squid.php
2.Squid文档 http://www.squid-cache.org/Versions/v3/3.1/cfgman/
3.https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/chap-Managing_Confined_Services-Squid_Caching_Proxy.html

实验内容与实验环境

1. 物理机和虚拟机的操作系统为 RHEL6.5;物理机IP地址为192.168.122.1,虚拟机IP地址为192.168.122.108
2. 虚拟机作为squid server,物理机作为client;
3. 实验配置虚拟机为标准代理,让物理机可以通过代理浏览网页;
4. 配置squid,使得baidu不能被访问;
5. 将虚拟机配置成透明代理;

配置物理机

配置/etc/sysctl.conf,修改ipforward为1,启用物理机的路由功能。

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

更新kernel参数

[root@feichashao ~]# sysctl -p

确认虚拟机能连上外网。

ping -c3 www.baidu.com

安装

用yum安装squid

[root@server1 ~]# yum install squid -y

增加虚拟机iptables规则, /etc/sysconfig/iptables 中加入

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT

测试

虚拟机上,启用squid.

[root@server1 ~]# /etc/init.d/squid restart

物理机上,设置浏览器的代理服务器地址为虚拟机的IP地址,端口为默认的3128.
Firefox 17 在 Edit-Preference-Advance-Network-Connetion Setting里面设置。
尝试访问百度,如果squid工作正常的话,应该能访问到baidu.com

访问控制ACL

访问控制可以在/etc/squid/squid.conf中配置。
最简单的访问控制,比如,禁止某个IP访问百度,禁止某个网段的用户访问百度,或者仅允许访问百度等等。

ACL规则

配置文件的上面我们可以看到有很多预设的匹配项。
squid-match
我们可以将baidu.com加入到匹配项中。因为是域名而不是ip地址,所以这里写dstdomain.

acl baidu dstdomain .baidu.com
acl blg   dstdomain .feichashao.com

下面可以加上控制规则。
http_access的规则是从上往下匹配的,只要匹配到了,就不继续往下匹配了。

测试

1.将物理机的浏览器代理设置为192.168.122.108:3128
2.在虚拟机squid.conf里加入规则:禁止所有用户访问百度。

http_access deny baidu

重启squid.
3.禁止localnet访问百度

http_access deny baidu localnet

squid-deny

透明代理

透明代理可以让网络中的用户正常上网,而感觉不到代理的存在。亦即,用户只需要将网关指向squid服务器,浏览器不需要进行设置,即可透过代理浏览网页;
主要思路是,在网关上设置规则,让80端口的浏览转到squid server,这里网关和代理在同一机器上,所以直接将80端口的流量转发到3128端口中去即可。

配置

修改squid.conf

# Squid normally listens to port 3128
http_port 3128

改为

http_port 3128 transparent

修改虚拟机上的iptables.

[root@server1 ~]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.122.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

测试

由于主机要连外网,所以用主机测试会比较麻烦;
这里用另一台虚拟机,将它的GATEWAY设置成192.168.122.108
用这台虚拟机尝试浏览网页。
由于我之前禁用了百度,所以~^_^ 这里访问不了百度。
transparent

Troubleshooting

1. Unable to determine IP address from host name "www.baidu.com"
检查squid服务器的DNS配置;
Squid缓存
2. 接上,如果修改了squid上的DNS配置,最好重启一下squid,否则缓存会影响正常使用。