第三章Squid代理服务器
3.1 Squid代理简介
代理技术是让代理服务器直接访问外部网络,然后将结果传给内部网络,代理服务器主要工作在应用层。Nat技术也可以实现代理访问,它是通过路由功能完成源地址与目的地址的转换,完成访问,主要工作在数据链路层/网络层和传输层等底层。
Nat的优点:工作在底层,透明代理,限制较少。缺点:地址转换技术,源地址和目标地址暴露,容易造成内部网络被攻击。
Squid代理服务器:可以完全做到内部外部分离,可以保障内部安全。缺点:完成的服务功能比较少,并且服务需要支持设置代理ip和端口功能。
3.1.1 Squid代理可以实现的功能:
1、提供对HTTP和FTP协议的代理服务
2、缓存代理的内容,提高客户端访问网站的速度,并且能够节约出口网络流量
3、对客户端地址进行访问控制,限制允许访问squid服务器的客户机
4、对目标地址进行访问控制,限制客户端允许访问的网站
5、根据时间进行访问控制,限定客户端可以使用代理服务的时间
3.1.2 缓存代理作用:
通过代理服务器访问外部网站,开启缓存池,缓存了部分的静态页面,如果下一个客户再来访问,代理服务器会去真是服务器核实页面是否更新了,然后决定是否更新缓存池,然后返回给客户。如果是全新页面,代理服务器会去真实服务器读取数据返回给客户。
3.2 Squid代理服务的种类
普通代理服务
即标准的,传统的代理服务;需要客户在浏览器中指定代理服务器的地址和端口,一般是为了实现员工访问外部网络的需要。
透明代理服务器
适用于企业的网关主机,客户端不需要指定服务器的地址和端口,通过iptables将客户的web请求交给代理服务器,减少了内部员工设置上的麻烦
反向代理服务
方向代理是实现外网访问内网的一种访问技术
3.3 安装squid服务
Rpm –qa|grep squid
//查看软件包是否安装
Yum install squid* //yum安装squid
Vi /etc/squid/squid.conf
//修改配置文件,我们需要先删除原配置文件,在新建一个配置文件,不会发生误删,因为配置文件默认有两份一个是squid.conf和squid.conf.default
Service squid start
//启动squid服务,它会在/var/spool/squid/目录下,自动生成目录,16个一级目录,每个一级目录256个二级目录。
可以看到3128端口
Squid –k reconfig
//修改配置文件,不重启也可以动态加载
3.4 ACL访问控制原理
ACL(Access Control List),访问控制列表。是用来实现客户机的IP地址和请求的url/文件类型、访问时间、并发请求数进行限制的一种技术支持
它需要先定义然后指定限制类型,是拒绝还是允许。
格式:acl 列表名称 列表类型 列表内容
//定义列表
http_access allow或deny 列表名
//限制列表
例如:acl all src 0.0.0.0/0.0.0.0
http_access deny all
首先定义一个名叫all的acl语句,它的内容为所有类型的源地址,类型为拒绝。
常用的ACL列表类型
例如:
acl lan src 192.1681.10.1/24
http_access deny lan
//拒绝源地址为192.168.10.0这个子网的ip
acl block_domain dstdomain .qq.com.kaixin001.com
http_access deny block_domain //拒绝目标域名为qq等的访问
acl work_hour time MTWHF 08:30-17:30
http_access allow work_hour //允许访问的时间段,周一到周五时间段
acl realfile urlpath_regex –I \.rmvb$ \.rm$
http_access deny realfile //禁止这种文件类型的访问,-i忽略大小写
访问控制类型的匹配顺序
没有规则时:拒绝所有客户端的访问请求
有规则但找不到匹配项时:将采用与最后一条相反的权限
3.5 squid代理的实现
实验一:配置squid普通代理
内网客户机IP:192.168.10.2
Squid服务器IP:192.168.10.1 内网ip,200.168.10.1 外网ip
Web服务器IP:200.168.10.2
1、 配置网卡
内网用vm1,squid服务器需要拥有两块网卡,内网连载vm1,外网vm2上,web server服务器的连接vm2网卡。分别配置ip和掩码。
Ping测试: //内网可到192.168.10.1,squid server可以通左右
2、 修改squid配置文件
Vi /etc/squid/squid.conf
首先配置文件设定服务的端口和ip,visible_hostname设置出问题的联系地址,innet定义来自这个网段的ip都可以,all定义来自所有的ip,reply设置允许资源大小10MB,设置规则允许innet列表, all为禁止列表。
3、配置web server,启动web服务,定义主页内容
4.测试,当没有指定代理时无法访问到外部web server,通过浏览器右边的设置按钮-》internet选项-》局域网设置-》输入ip和端口,确定
再次访问外部web serve
Squid会生成一些日志文件在/var/log/squid/目录下,其中Squid.out错误日志,store.log访问日志,cache.log缓存日志
Cat /varlog/httpd/access_log //查看日志,看到代理服务器的ip
实验二:配置squid透明代理
内网客户机IP:192.168.10.2
Squid服务器IP:192.168.10.1 内网ip,200.168.10.1 外网ip
Web服务器IP:200.168.10.2
1、 配置实验环境,ping通。这里内部的pc机需要制定网关192.168.10.1才行。
2、修改配置文件,Transparent是透明的意思,开启透明。
3、增加iptables规则。“iptables –t nat –A PREROUTING –I eth0 –s 192.168.10.0、24 –p tcp –dport 80 –j REDIRECT –to 3128”
Iptables规则解析:-t使用地址转换技术,-A prerouting是通过这条链,-i eth0进入的接口,-s来自的源,-p tcp协议,-dport目的端口,-j重定向 --to重定向到3128端口。
总的意思就是通过地址转换技术,通过prerouting通道,对于来自eth0的访客,源地址是192.168.10.0的子网的ip,访问目的端口是80的服务,我们重定向到3128端口,交给squid来代理。
4、测试。直接测试即可,不需要配置客户端。
实验三:配置squid反向代理
外部客户机
IP
:
200.168.10.2
Squid
服务器
IP
:
192.168.10.1
内网
ip
,
200.168.10.1
外网
ip
Web
服务器
IP
:
192.168.10.2
1、 配置网络环境,并可以ping通。这一次squid服务器外网使用vm1网卡,内网使用vm2网卡,web server使用vm2网卡。
2、 修改squid配置文件。
因为我们squid代理服务器没开启80端口,我们先虚拟一个80端口,这样外部的访问才不会被拒 绝。它内部服务可以实现集群的功能。并且squid服务器对于外网应该都是allow。
3、测试,访问代理服务器200.168.10.1,自动定向到内部的服务器。
实验四:配置squid反向代理虚拟主机
外部客户机IP:200.168.10.2
Squid服务器IP:192.168.10.1 内网ip,200.168.10.1 外网ip
Web服务器IP:192.168.10.2
虚拟主机,就是一个web server架设多个域名的网站,实现一机多用。
1、 配置网络环境,可以ping通。
2、 修改squid配置文件。
配置文件,我们分别制定两个目的,指定网站名之后,并且允许所有外部ip的访问。
3、 配置虚拟主机
Vi /usr/local/apache/etc/httpd.conf 修改配置文件,然后到各自的网站目录建立不同的主页文件。
4、 修改pc机的hosts文件。
5、 访问测试,即可达到不同的域名访问到不同的网站。
总结:
我们可以通过tree 00(目录名)来查看某个缓存池里的缓存情况,可以查看到都是静态内容。Squid功能不仅有代理还有集群功能,所以越来越受到欢迎。