squid提供了强大的代理控制机制,经过合理的设置ACL(Access Control List,访问控制列表)并进行限制,可针对源地址、目标地址、访问的URL路径、访问的时间等各类控制条件进行过滤。html
ACL访问控制经过如下两个步骤来实现:c++
①、使用acl配置项定义须要控制的条件;web
②、经过http_access配置项对已定义的列表作“容许”或者“拒绝”访问的控制。vim
格式:acl 列表名称 列表类型 列表内容 ···后端
常见的访问控制列表类型缓存
列表类型 | 列表内容示例 | 含义、用途 |
---|---|---|
src(源地址) | 192.168.100.一、192.168.100.0/24 | 源IP地址、网段 |
dst(目标地址) | 192.168.234.五、192.168.234.0/2四、www.baidu.com | 目标IP地址、网段、主机名 |
port(目标端口) | 80、44三、 8080、20 | 目标端口 |
dstdomain(目标域) | .qq.com | 目标域,匹配域内的全部站点 |
time(访问时间) | 12:00-13:00、AS | 使用代理服务器的时间段 |
maxconn(最大并发链接) | 30 | 每一个客户机的最大并发链接数 |
url_regex(目标url地址) | url_regex -i ^rtsp:// | 目标资源的URL地址,-i表示忽略大小写 |
urlpath_regex(整个目标url路径) | urlpath_regex -i sex adult | 目标资源的整个URL路径,-i表示忽略大小写 |
2.设置访问权限安全
定义好各类访问控制列表之后,使用http_access配置项来进行控制。服务器
格式:http_access allow或deny 列表名···并发
在设置访问权限时,须要注意两点:dom
由于以前咱们作了squid的透明代理的实验,因此这里就接着那个实验继续作,配置好透明代理后,咱们能够使用IP为192.168.100.50的client(客户端)访问IP为12.0.0.12的web服务器,那么下面咱们就经过设置acl访问控制列表使client不能访问web服务器
vim /etc/squid.conf
acl localhost src 192.168.100.0/24 #定义访问控制列表 http_access deny localhost #对列表作拒绝处理 service squid stop service squid start #重启服务
squid的日志分析功能须要借助sarg(Squid Analysis Report Generator),首先先部署安装sarg工具
yum -y install gcc gcc-c++ gd gd-devel httpd #这里的dg库是支持图像处理的软件
mkdir /usr/local/sarg #为sarg建立安装目录 tar zxvf sarg-2.3.11.tar.gz -C /opt/ #将sarg解压到指定目录 cd /opt/sarg-2.3.11/ #到sarg目录中进行编译安装 ./configure --prefix=/usr/local/sarg \ #这里指定安装目录 --sysconfdir=/etc/sarg \ #指定配置文件目录 --enable-extraprotection #开启额外保护功能 配置完后,进行编译和安装 make && make install
vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/logs/access.log #指定访问日志文件(开启) title "Squid User Access Reports" #网页标题(开启) output_dir /var/www/html/squid-reports #报告输出目录(开启) user_ip no #使用用户名显示(开启) exclude_hosts /usr/local/sarg/noreport #不计入排序的站点列表文件(开启,删除none,添加路径) topuser_sort_field connect reverse #top排序中有链接次数、访问字节、降序排列升序是normal (开启,修改BYTES) user_sort_field connect reverse #用户访问记录 链接次数、访问字节按降序排序 (开启,修改BYTES) overwrite_report no #同名日志是否覆盖(开启) mail_utility mailq.postfix #发送邮件报告命令(开启,修改mail) charset UTF-8 #使用字符集 (开启) weekdays 0-6 #top排行的星期周期 (开启) hours 0-23 #top排行的时间周期(开启) www_document_root /var/www/html #网页根目录(开启)
touch /usr/local/sarg/noreport 建立上述不计入站点文件,添加的域名将不被显示在排序中
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
#创建软连接,方便使用命令systemctl start httpd.service
#由于咱们要在网页里访问日志,须要咱们开启httpd服务
而后使用client登陆网页管理界面
squid反向代理能够加速网站的访问速度,可将不一样的URL请求分发到后台不一样的web服务器上,同时互联网用户只能看到反向代理服务器的地址,增强网站的访问安全。
squid反向代理加速的原理描述以下:
Squid反向代理服务器位于本地Web服务器和Internet之间,客户端请求访问Web服务器时,DNS将访问的域名解析为Squid反向代理服务器的IP地址,客户端将访问Squid代理服务器。
实验环境
服务器 | IP地址 | 功能 |
---|---|---|
代理服务器 | 172.16.10.137 | squid代理服务 |
client | 172.16.10.131 | 负责访问 |
真实服务器1 | 172.16.10.129 | 提供http服务 |
真实服务器2 | 172.16.10.134 | 提供http服务 |
vim /etc/squid.conf
acl web1 dstdomain www.yun.com acl web2 dstdomain www.yun.com #定义两个个基于域名的控制列表,分别命名为web1,web2 http_access allow web1 web2 #容许以web1,web2为目标域名的访问 http_port 172.16.10.137:80 accel vhost vport #将端口监听在 172.16.10.137的80端口上,accel 指启用加速模式,vhost,vport用于转发请求 cache_peer 172.16.10.29 parent 80 0 no-query originserver round-robin weight=1 name=web1 #cache_peer 指定后端服务器地址,80 为后端服务端口,0 为 ICP 端口号(多个 Squid 时用),originserver 指定资源服务器,round-robin指使用轮询方式,weight指的是权重,自由分配,name 指定一个别名 cache_peer 172.16.10.134 parent 80 0 no-query originserver round-robin weight=1 name=web2 #和上面的同样
这里记得从新启动squid服务
这样就实验成功了,访问www.yun.com,真实服务器会使用轮询的方式,分别轮流访问两台web服务器。