ACL访问控制方式
根据源地址、目标URL、文件类型等定义列表
acl 列表名称 列表类型列表内容...
针对已定义的acl列表进行限制
http_access allow或deny 列表名称...
ACL规则优先级
一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
所有规则都不匹配时,Squid会使用与最后一条相反的规则
常用的ACL列表类型
src --> 源地址
dst --> 目标地址
port端口
odstdomain -->目标域
time -->访问时间
maxconn -->最大并发连接
url_regex -->目标URL地址
Urlpath_regex -->整个目标URL路径
最简单的ACL控制
禁止任何客户机使用此代理服务
[root@localhost~]# viletclsquid.conf
acl all src 0.0.0.0/0.0.0.0
http_access deny all
定义一条名为all的列表,匹配来自任意
源地址的代理访问;然后拒绝此列表
ACL综合应用1
允许多个局域网段在工作时间上网
[root@localhost~]# vi letclsquid.conf
......
acl all src 0.0.0.0/0.0.0.0
acl MYLAN src 192.168.1.0/24 192.168.4.0/24
acl WORKTIMEtime MTWHF 08:30-17:30
http_access allow MYLAN WORKTIME
http_access deny all
做传统代理,(也可以基于透明代理)
1.解压squid软件包
monut.cifs //192.168.1.150/qq-Download /mnt
cd /mnt
tar xzvf squid-3.4.6.tar.gz -C /opt
2.安装相关软件包
yum install gcc gcc-c++ make -y
3.配置服务模块,编译安装
cd /opt/squid-3.4.6/
./configure \
--prefix=/usr/local/squid \
--sysconfdir=/etc --enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex
make && make install
4.创建软链接,优化服务控制方式
ln -s /usr/local/squid/sbin/squid /usr/local/sbin/
5.创建squid用户
useradd -M -s /sbin/nologin squid
6.修改squid中的var的属性
chown -R squid.squid /usr/local/squid/var/
7.编辑squid的配置文件
vim /etc/squid.conf
55 # And finally deny all other access to this proxy
56 http_access allow all
57 http_access deny all //允许所有用户访问
58
59 # Squid normally listens to port 3128
60 http_port 3128
61 cache_mem 64 MB //指定缓存功能所使用的内存空间大小
62 reply_body_max_size 10 MB //允许用户下载的最大文件大小
63 maximum_object_size 4096 KB //允许保存到缓存空间的最大对象大小
64 cache_effective_user squid //添加指定程序用户
65 cache_effective_group squid //添加指定账户基本组
66
67 # Uncomment and adjust the following to add a disk cache directory.
68 #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
8.编辑防火墙规则
iptables -F //清除所有规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许目标端口3128做转发
9.检查语法并且开启服务
squid -k parse //检查配置文件语法
squid -z //初始化缓存目录
squid //启动服务
[root@squid ~]# netstat -natp | grep squid
tcp6 0 0 :::3128 :::* LISTEN 36414/(squid-1)
[root@squid ~]#
10.编辑脚本,优化服务控制方式(service 工具)
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动 squid...."
echo "成功启动"
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭 squid..."
echo "关闭成功"
$0 start &> /dev/null
echo "正在启动 squid..."
echo "启动成功"
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0{start|stop|status|reload|check|restart}"
;;
esac
chmod +x /etc/init.d/squid //添加服务执行权限
chkconfig --add squid //添加到service的服务列表
chkconfig --level 35 squid on //开机自启
[root@localhost ~]# service squid restart
正在关闭 squid...
关闭成功
正在启动 squid...
启动成功
修改squid配置文件
禁止源地址访问
[root@squid ~]# vim /etc/squid.conf
...
# should be allowed
acl netlocal src 192.168.100.30 '添加ACL规则'
...
# Deny requests to certain unsafe ports
http_access deny netlocal '拒绝netlocal列表访问'
[root@squid ~]# service squid reload '重新加载如无'
禁止访问目的地址
[root@squid ~]# mkdir /etc/squid
[root@squid ~]# vim /etc/squid/denyip.list '创建文件'
192.168.100.150 '添加目的地址,web服务器的地址'
[root@squid ~]# vim /etc/squid.conf
# should be allowed
acl destionhost dst "/etc/squid/denyip.list" '添加绝对路径'
# Deny requests to certain unsafe ports
http_access deny destionhost '添加规则'
[root@squid ~]# service squid reload
取消调用
取消调用后可以访问web
Sarg(Squid Analysis Report Generator),是一款squid日志分析工具,采用HTML的格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等
在squid代理服务器上配置sarg服务
1.安装必要软件包
yum install -y gd gd-devel
2.解压软件包
tar xzvf sarg-2.3.7.tar.gz -C /opt
3.安装功能模块,编译安装
mkdir /usr/local/sarg //创建安装目录
cd /opt/sarg-2.3.7
./configure \
--prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \ //配置文件存放位置
--enable-extraprotection //额外的安全防护
make && make install
4.编辑sarg的配置文件
[root@squid ~]# vim /etc/sarg/sarg.conf //开启以下功能 前面数字位行号
7 access_log /usr/local/squid/var/logs/access.log //指定访问日志文件
25 title "Squid User Access Reports" //网页标题
120 output_dir /var/www/html/squid-reports //输出网页的目录
178 user_ip no //是否使用用户名显示
184 topuser_sort_field connect reverse //top排序中有连接次数、访问字节、降序排列 降序为reverse,升序为normal
206 exclude_hosts /usr/local/sarg/noreport //不计入排序的站点列表文件,需要创建
257 overwrite_report no //不覆盖同名日志
289 mail_utility mailq.postfix //发送邮件报告,命令
434 charset UTF-8 //开启字符集
517 weekdays 0-6 //按星期周期排序
525 hours 0-23 //按小时周期排序
633 www_document_root /var/www/html //网页根目录
5.添加不计入站点文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport
6.创建软链接,优化服务控制方式
ln -s /usr/local/sarg/bin/sarg /usr/local/bin
7.安装http服务
yum install httpd -y
8.开启日志分析服务
[root@squid ~]# sarg
SARG: 纪录在文件: 17, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Feb03-2020Feb04
[root@squid ~]#
9.开启httpd服务,关闭防火墙
[root@squid ~]# systemctl stop firewalld
[root@squid ~]# setenforce 0
[root@squid ~]# systemctl start httpd
[root@squid ~]# netstat -natp | grep 80
tcp6 0 0 :::80 :::* LISTEN 1631/httpd
计划性任务的sarg的日志分析
sarg命令常用选项:
-l 指定输入日志来源
-o 指定输出目录
-z 处理信息
-d 指定日期
执行周期性计划任务,每天生成报告
[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)
在客户机访问,日志报告网页
日志分割后
squid作为代理服务软件,其主要功能是使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,有一定的安全性,但是如果想让互联上的主机访问内部网的主机资源(例如:web站点),又想使内部主机免受外部网主机攻击,一般的代理服务是不能实现的这就需要反向代理来实现
什么是反向代理呢?其实,反向代理也就是通常所说的web服务器加速,它是一种通过在繁忙的WEB服务器和internet之间增加一个高速的web缓冲服务器(即:web反向代理服务器)来降低实际的web服务器的负载
下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:
1. 标准的代理缓冲服务器(传统代理)
一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。
2. 透明代理缓冲服务器
透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。
3. 反向代理缓冲服务器
反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,阻止了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。
Last-Modified: 告诉反向代理页面什么时间被修改
Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control: 告诉反向代理页面是否应该被缓冲
Pragma: 告诉反向代理页面是否应该被缓冲.
例如:在默认情况下,ASP页面返回” Cache-control: private.” ,所以ASP页面时不会在反向代理服务器缓存的
类型 | IP地址 | 系统 | 软件包 |
---|---|---|---|
squid代理服务器 | ens33:192.168.100.140/24 | centos7 | squid-3.4.6.tar.gz |
web服务器1 | 192.168.100.150/24 | centos7 | |
web服务器2 | 192.168.100.160/24 | centos7 | |
客户机 | 192.168.100.10/24 | centos7 |
配置squid代理服务器
[root@squid squid-reports]# vim /etc/squid.conf
http_port 192.168.100.140:80 accel vhost vport '//监控本机80端口'
cache_peer 192.168.100.150 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 '//节点服务器1最大访问30,权重1,别名web1'
cache_peer 192.168.100.160 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节点'
[root@squid squid-reports]# service squid restart '//重启服务'
正在关闭 squid...
正在启动 squid...
[root@squid squid-reports]# netstat -ntap |grep 80 '//查看80端口是否被squid使用'
tcp 0 0 192.168.100.140:80 0.0.0.0:* LISTEN 5197/(squid-1)
//这里如果httpd的80端口在使用,把httpd停掉,这里用不掉,要先空闲80端口
配置web服务器两个节点相同
[root@web1 ~]# cd /var/www/html
[root@web1 html]# vim index.html '//修改首页内容'
<h1>this is web01!</h1>
'//web2服务器设置'
[root@web2 ~]# yum install httpd -y '//安装httpd服务'
[root@web2 ~]# vim /var/www/html/index.html '//修改首页内容'
<h1>this is web02 web!</h1> //另外一台Web修改为web01
systemctl stop firewalld.service
setenforce 0
systemctl start httpd
客户机环境
测试访问