squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。
squid代理的作用
通过缓存的方式为用户提供Web访问加速
对用户的Web访问进行过滤控制
当代理服务器中有客户端需要的数据时:
a. 客户端向代理服务器发送数据请求;
b. 代理服务器检查自己的数据缓存;
c. 代理服务器在缓存中找到了用户想要的数据,取出数据;
d. 代理服务器将从缓存中取得的数据返回给客户端。
当代理服务器中没有客户端需要的数据时:
客户端向代理服务器发送数据请求;
代理服务器检查自己的数据缓存;
代理服务器在缓存中没有找到用户想要的数据;
代理服务器向Internet 上的远端服务器发送数据请求;
远端服务器响应,返回相应的数据;
代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。
原理图如下
当squid服务器上启用acl访问控制列表的时候
ACL(Access Control List,访问控制列表),可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤
定义ACL格式:
格式: acl 列表名称 列表类型 列表内容……
列表名称:自己设定
src 源地址,
dst 目标地址,
port 目标端口
dstdomain 目标域名
time 访问时间
maxconn 最大并发量
url_regex 目标URL
urlpath_regex 整个目标URL 路径
使用acl配置项定义需要控制的条件
通过http_access配置项对已定义的列表做允许或拒绝的访问控制
ACL一些解释
'这种是允许某个规则可以,其他的不行 为白名单 白名单安全系数高一点'
[root@squid ~]# vim /etc/squid.conf '//编辑squid配置文件'
# should be allowed
acl hostlocal src 192.168.110.20/32 '//监控client客户端的主机(192.168.110.20/32)取名为hostlocal'
# Deny requests to certain unsafe ports
http_access deny hostlocal '//调用hostlocal,设置拒绝访问'
[root@squid ~]# service squid restart
'这种是允许某个规则可以,其他的不行 为白名单 白名单安全系数高一点'
[root@localhost ~]# vi /etc/squid.conf
......
acl all src 0.0.0.0/0.0.0.0
acl MYL AN src 192.168.1.0/24 192.168.4.0/24
acl WORKTIME time MTWHF 08:30-17:30 '周一到周五 开头字母'
http_ access allow MYLAN WORKTIME '两个列表一起调用'
http_ access deny all '最后一条是拒绝'
这里的文件要绝对路径 ,要有可读的权限
[root@localhost opt]# echo "192.168.110.20" > /opt/ip.list
[root@localhost opt]# vim /etc/squid.conf
acl shang src "/opt/ip.list" '将原来的具体的IP地址改成绝对路径,效果等同于在后面接ip地址 ,只不过这样的话配置文件比较简洁,跟便于管理'
http_access deny shang '调用策略,如果上面都匹配不上的话 就取反通过'
SARG的全称是:Squid Analysis Report Generator
SARG作为一款Squid日志分析工具,它采用html格式,详细列出了每一位用户访问internet的站点信息,时间占用信息,排名,连接次数,访问量,访问量等。
软件的主页:http://www.sarg-squid.org/ 目前最新的版本是2.0.2
[root@squid ~]# cd /mnt/company/
[root@squid company]# tar zxvf sarg-2.3.7.tar.gz -C /opt '//解压源码包'
[root@squid company]# cd /opt/sarg-2.3.7/
[root@squid sarg-2.3.7]# yum install gd gd-devel -y '//安装gd库,gcc gcc-c++之前装过了'
[root@squid sarg-2.3.7]# mkdir /usr/local/sarg '//创建sarg目录'
[root@squid sarg-2.3.7]# ./configure --prefix=/usr/local/sarg \ '//指定sarg目录'
> --sysconfdir=/etc/sarg \ '//配置文件'
> --enable-extraprotection '//开启安全防护'
[root@squid sarg-2.3.7]# make && make install
[root@squid sarg-2.3.7]# vim /etc/sarg/sarg.conf
'//配置文件中所有的都被注释了,我们需要取消注释一下内容'
access_log /usr/local/squid/var/logs/access.log '第7行//指定访问日志文件'
title "Squid User Access Reports" '第25行//网页标题'
output_dir /var/www/html/squid-reports '第120行//报告输出目录'
user_ip no '第178行//使用用户名显示'
exclude_hosts /usr/local/sarg/noreport '第206行//不计入排序的站点列表文件'
topuser_sort_field connect reverse
'第184//top排序中有连接次数,访问字节,降序排列,升序是normal'
overwrite_report no '第257行//同名日志是否覆盖'
mail_utility mailq.postfix '第289行//发送邮件报告命令'
charset UTF-8 '第434行//使用字符集'
weekdays 0-6 '//top排行的时间周期'
hours 0-23 '第525行//top排行的时间周期'
www_document_root /var/www/html '第633行//网页根目录'
[root@squid sarg-2.3.7]# touch /usr/local/sarg/noreport '//添加不计入站点文件,添加的域名将不被显示'
[root@squid sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/ '//创建sarg命令的软连接'
[root@squid sarg-2.3.7]# sarg '//生成报告'
SARG: 纪录在文件: 123, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Feb08-2020Feb08 '//提示报告生成在这个目录,我们进入这个目录查看一下'
[root@squid sarg-2.3.7]# cd /var/www/html/squid-reports/ '//进入目录'
[root@squid squid-reports]# ls
2020Feb08-2020Feb08 images index.html
[root@squid squid-reports]# yum install httpd -y '//安装httpd'
[root@squid squid-reports]# systemctl start httpd '//开启httpd'
[root@squid squid-reports]# systemctl stop firewalld.service '//关闭防火墙'
[root@squid squid-reports]# setenforce 0
这里是因为我生成了两个报告所以会显示两条
[root@squid squid-reports]# sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
反向代理使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发给用户。这种方式通过降低了WEB服务器的请求数从而降低了WEB服务器的负载。
关闭httpd服务并设置防火墙规则
[root@squid squid-reports]# systemctl stop httpd '//关闭httpd服务,因为会占用80端口,后面设置代理需要用到80端口'
[root@squid squid-reports]# systemctl start firewalld.service
[root@squid squid-reports]# iptables -F
[root@squid squid-reports]# iptables -t nat -F
[root@squid squid-reports]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@squid squid-reports]# vim /etc/squid.conf
http_port 192.168.110.132:80 accel vhost vport '//监控本机80端口'
cache_peer 192.168.110.133 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 '//节点服务器1最大访问30,权重1,别名web1'
cache_peer 192.168.110.134 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 '//节点服务器2最大访问30,权重1,别名web2'
cache_peer_domain web1 web2 www.yun.com '//访问www.yun.com匹配web1,web2节点'
'重启服务之前检查80端口有没有被占用 如果有的话kill掉进程'
[root@squid squid-reports]# service squid restart '//重启服务'
正在关闭 squid...
正在启动 squid...
[root@squid squid-reports]# netstat -ntap |grep 80 '//查看80端口是否被squid使用'
tcp 0 0 192.168.110.132:80 0.0.0.0:* LISTEN 5197/(squid-1)
设置域名解析(以administrator用户登录)
C盘-Windows-system32-drivers-etc-hosts
这里要切换管理员账号进行更改文件,不然没权限
更改代理服务器的端口为80