Squid的分类和作用
1、普通代理服务
即标准的、传统的代理服务
需要客户机在浏览器中指定代理服务器的地址、端口
2、透明代理服务
适用于企业的网关主机(共享接入Internet)中
客户机不需要指定代理服务器地址、端口等信息
需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理
3、反向代理服务
为Internet用户访问企业Web站点提供缓存加速
Squid配置
一、安装
#rpm -ivh squid*
二、配置
#cd /etc/squid
#cp squid.conf squid.conf.bak
#vi /etc/squid/squid.conf
http_port192.168.0.1:8080 //192.168.0.1为本机接内网IP地址
cache_mem 64 MB
cache_dir ufs /var/spool/squid 1000 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers 222.85.85.85 //222.85.85.85为dnsIP
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname 192.168.0.1
cache_mgr [email protected]
acl all src 0.0.0.0/0.0.0.0
http_access allow all
三、初始化squid
1、创建Squid使用硬盘缓冲区的目录结构
#/usr/sbin/squid -z
#ls -l /var/spool/squid/
2、设置squid错误提示信息为中文
#mv /etc/squid/errors /etc/squid/errors.bak
#ln -s /usr/share/squid/errors/Simplify_Chinese /etc/squid/errors
#/etc/init.d/squid reload
四、测试
1、关闭防火墙或开启8080端口
#service iptables stop
或
#iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
2、设置客户端IE浏览器
右击IE――属性――连接――局域网设置――代理服务器
地址:192.168.0.1 端口:8080
五、访问控制应用实例
1、禁止IP地址为192.168.0.254的客户机上网。
#vi /etc/squid/squid.conf
acl badclientip1 src 192.168.0.254
http_access deny badclientip1
#/etc/rc.d/init.d/squid reload
2、禁止192.168.0.0子网里所有的客户机上网。
#vi /etc/squid/squid.conf
acl badclientnet1 src 192.168.0.0/255.255.255.0
http_access deny badclientnet1
#/etc/rc.d/init.d/squid reload
3、禁止用户访问IP地址为122.224.185.6的网站。
#vi /etc/squid/squid.conf
acl badsrvip1 dst 122.224.185.6
http_access deny badsrvip1
#/etc/rc.d/init.d/squid reload
4、禁止用户访问域名为www.163.com的网站。
#vi /etc/squid/squid.conf
acl baddomain1 dstdomain -i www.163.com
http_access deny baddomain1
#/etc/rc.d/init.d/squid reload
5、禁止用户访问域名包含有163.com的网站。
#vi /etc/squid/squid.conf
acl badurl1 url_regex -i 163.com
http_access deny badurl
#/etc/rc.d/init.d/squid reload
6、禁止用户访问域名包含有sex关键字的URL
#vi /etc/squid/squid.conf
acl badurl2 url_regex -i sex
http_access deny badurl2
#/etc/rc.d/init.d/squid reload
7、限制IP地址为192.168.0.254客户机并发最大连接数为5。
#vi /etc/squid/squid.conf
acl clientip1 src 192.168.0.254
acl conn5 maxconn 5
http_access deny client1 conn1
#/etc/rc.d/init.d/squid reload
8、禁止192.168.1.0这个子网里所有的客户机在周一到周五的9:00到18:00上网。
#vi /etc/squid/squid.conf
acl clientnet1 src 192.168.1.0/255.255.255.0
acl worktime time MTWHD 9:00-18:00
http_access deny clientnet1 worktime
#/etc/rc.d/init.d/squid reload
9、禁止客户机下载*.mp3、*.mp4、*.zip和*.rar类型的文件。
#vi /etc/squid/squid.conf
acl badfile1 urlpath_regex -i \.mp3$\.exe$\.zip$\.rar$
http_access deny badfile1
#/etc/rc.d/init.d/squid reload
六、透明代理的实现
1、编辑主配置文件
#vi /etc/squid/squid.conf
http_port 192.168.0.1:8080 //192.168.0.1为本机接内网IP地址
cache_mem 64 MB
cache_dir ufs /var/spool/squid 1000 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers222.85.85.85 //222.85.85.85为dnsIP
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname 192.168.0.1
cache_mgr [email protected]
#以下是实现透明代理的4条语句的关键,缺一不可
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口8080,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令:
iptables -t nat -A PREROUTING -s 192.168.2.0/32 -p tcp --dport 80 -j REDIRECT8080 就是将192.168.2.0的所有针对80端口的访问重定向到8080端口。
acl all src 0.0.0.0/0.0.0.0
http_access allow all
2、配置iptables实现NAT代理
1)开启路由转发
#echo 1 > /proc/sys/net/ipv4/ip_forward
2)设置代理
#iptables �Ct nat �CA POSTROUTING �Cs 192.168.1.0/24 �Cj SNAT �C-to-source211.162.11.1
3)设置端口重定向
#iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT--to-ports 8080
七、用户身份认证(注:Squid不支持在透明代理模式下启用用户身份认证功能)
1、认证程序查看
#ls /usr/lib/squid
2、编辑主配置文件
#vi /etc/squid/squid.conf
http_port192.168.0.1:8080 //192.168.0.1为本机接内网IP地址
cache_mem 64 MB
cache_dir ufs /var/spool/squid 1000 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers222.85.85.85 //222.85.85.85为dnsIP
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname 192.168.0.1
cache_mgr [email protected]
#以下是实现用户身份认证的语句
auth_param basic program /usr/lib/squid/ncsa_auth/etc/squid/passwd
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic realm Example.com's Squid proxy-caching
acl auth_user proxy_auth REQUIRED
http_access allow auth_user
3、建立帐户文件
#useradd test1
#passwd test1
#htpasswd -c /etc/squid/passwd test1
#useradd test2
#passwd test2
#htpasswd /etc/squid/passwd test2
4、测试用户认证
1)#/etc/init.d/squid restart
2)在客户端的Web浏览器中配置好代理服务器的IP地址和端口号;
3)访问任意网站,这时Web浏览器会弹出输入用户名和口令的对话框。
4)输入正确的用户名和口令,就能连接上Internet了。
5)如果用户名和口令不正确,则出现错误信息。
注:若希望实现某些特殊IP地址或子网的客户机(如领导使用的计算机)不需要经过用户认证直接上网,其他客户机必须经过用户认证后才能上网的功能,可以利用Squid是顺序处理
http_access选项的特点,为这些特殊的客户机建立类型为src源IP地址方式的ACL,然后将允许特殊客户机ACL的http_access的语句放在设置认证用户的http_access语句前面。
acl noauth_user src 192.168.1.0/255.255.255.0
auth_param basic program /usr/lib/squid/ncsa_auth/etc/squid/passwd
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic realm Example.com's Squid proxy-caching
acl auth_user proxy_auth REQUIRED
http_access allow noauth_user
http_access allow auth_user