文章目录
- 一: ACL访问控制
-
- 1.1: ACL访问控制概述
- 1.2: ACL访问控制实验
- 二: Squid日志分析
- 三: 反向代理
-
- 3.1: 反向代理详解
- 3.2: 实验分析以及结构图
- 3.3: 具体操作分析
一: ACL访问控制
1.1: ACL访问控制概述
-
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.2: ACL访问控制实验
-
做传统代理,(也可以基于透明代理)
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-gnuregexmake && 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.conf55 # And finally deny all other access to this proxy56 http_access allow all57 http_access deny all //允许所有用户访问58 59 # Squid normally listens to port 312860 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 2568.编辑防火墙规则 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/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在启动 squid...."echo "成功启动"$CMDfi;; stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;; status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;; restart)$0 stop &> /dev/nullecho "正在关闭 squid..."echo "关闭成功"$0 start &> /dev/nullecho "正在启动 squid..."echo "启动成功";; reload)$CMD -k reconfigure;; check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";; esacchmod +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
二: Squid日志分析
-
Sarg(Squid Analysis Report Generator),是一款squid日志分析工具,采用HTML的格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等
-
在squid代理服务器上配置sarg服务
1.安装必要软件包 yum install -y gd gd-devel2.解压软件包 tar xzvf sarg-2.3.7.tar.gz -C /opt3.安装功能模块,编译安装 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/noreport6.创建软链接,优化服务控制方式 ln -s /usr/local/sarg/bin/sarg /usr/local/bin7.安装http服务 yum install httpd -y8.开启日志分析服务 [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)
-
在客户机访问,日志报告网页
日志分割后
三: 反向代理
3.1: 反向代理详解
-
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服务器的负载。
- 反向代理工作原理
- 当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP头标记:
Last-Modified: 告诉反向代理页面什么时间被修改
Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control: 告诉反向代理页面是否应该被缓冲
Pragma: 告诉反向代理页面是否应该被缓冲.
例如:在默认情况下,ASP页面返回” Cache-control: private.” ,所以ASP页面时不会在反向代理服务器缓存的
3.2: 实验分析以及结构图
-
类型 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
3.3: 具体操作分析
-
配置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
客户机环境
-
测试访问