Contents
参考文档
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规则
配置文件的上面我们可以看到有很多预设的匹配项。
我们可以将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服务器,浏览器不需要进行设置,即可透过代理浏览网页;
主要思路是,在网关上设置规则,让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
用这台虚拟机尝试浏览网页。
由于我之前禁用了百度,所以~^_^ 这里访问不了百度。
Troubleshooting
1. Unable to determine IP address from host name "www.baidu.com"
检查squid服务器的DNS配置;
Squid缓存
2. 接上,如果修改了squid上的DNS配置,最好重启一下squid,否则缓存会影响正常使用。