squid代理服务器---代理方式---acl访问控制---sarg日志工具---squid反向代理!!!!

前言

代理工作机制和好处

  • 缓存网页对象,减少重复请求
  • 访问速率提高
  • 隐藏客户机真是ip地址

代理的基本类型

  • 传统代理
    适用于internet ,需要指定服务端,开启代理ip地址
  • 透明代理
    客户机不需要指定代理服务器的地址和端口,而通过默认路由,防火墙策略将web访问定向给代理服务器处理

ACL访问控制

  • 控制方式
    根据源地址,目标URL,文件类型等定义列表

acl 列表名称 列表类型 列表内容…

再针对定义的列表做限制

http_access allow或deny 列表名

  • 规则优先级
    用户访问代理服务器时,squid会从上往下匹配,顺序匹配定义所有规则列表,
    一旦匹配成功,立即停止匹配,!!
    相反,如果都不匹配,squid会使用最后一条相反的规则

最后一条是允许,相反:则是拒绝
最后一条是拒绝,相反:则是允许

常用ACL 列表类型

src             源地址
dst              目标地址
port             目标地址
dstdomain         目标域
time             访问时间
maxconn           最大并发连接
url_regex          目标URL地址 
urlpath_regex      整个目标URL路径 

反向代理

  • squid反向代理服务器中缓存了该请求的资源,则将该请求直接返回给客户端;
  • 否则反向代理服务器将向后台的web服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用

squid反向代理服务器:我有我直接给你,我没有我跟后面web要,我给你,我也留一份,方便给下一个;

  • 工作机制和优点

缓存网页对象,减少重复请求
将外网(互联网)请求,按照策略轮询或权重分配到内网web服务器
安全,隐藏,避免用户直接访问web服务器;

squid代理服务器 20.0.0.16
web 20.0.0.17 centos7.4
web2 20.0.0.18 centos7.4
客户端 20.0.0.1 /192.168.100.10

一,安装squlid部署环境:

  1. 安装底层编译环境
    yum -y install gcc gcc-c++ make

  2. 将软件包拖到/opt/目录,

解压:
tar zxf squid-3.4.6.tar.gz     //解压到当前目录下就行了
编译安装:
cd squid-3.4.6/               //到软件目录下
./configure  --prefix=/usr/local/squid --sysconfdir=/etc   --enable-arp-acl --enable-linux-netfilter --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex

 make && make install         //编译有一会时间

编译安装的解释:
1.指定安装路径;
2.配置文件存放目录;
3.启用acl访问控制列表;通过客户端的MAC地址进行管理,防止客户使用arp欺骗。
4.内核过滤机制
5.支持透明模式功能
6.调用I/O线程优化
7.报错提示简体中文提示
8.url支持下划线
9.字符设备去驱动中的函数,文件指针挂载到当前等待队列
10.支持正则表达式

3.将软件squid命令能够被系统命令能识别

//查看squid启动命令是在那个目录,是/bin 还是/sbin/
//在/sbin/下面,放到系统可以使用的/sbin/下,或者/bin

ln -s /usr//local/squid/sbin/squid /usr/local/sbin/

4.创建一个程序账户;

useradd -M -s /sbin/nologin squid

//更改属账户权限, var目录下有两个目录run,cahe当中都有squid的目录
chown -R squid.squid /usr/local/squid/var

5.更改配置文件

vim /etc/squid.conf
 56 #http_access deny all
 57 http_access allow all                              //设置为允许所有
 60 http_port 3128
 61 cache_effective_user squid                   //添加主账户
 62 cache_effective_group squid                 //添加组账户
 68  coredump_dir /usr/local/squid/var/cache/squid      //在第一个缓存目录中保留coredump,容灾目录,出现问题故障可以通过目录还原;

6.检查配置文件语法:

[root@as squid]#squid -k parse 
.....省略部分.....
正确的话会显示很快
[root@as squid]# squid -z
[root@as squid]# 2020/10/30 12:19:23 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2020/10/30 12:19:23 kid1| Creating missing swap directories
2020/10/30 12:19:23 kid1| No cache_dir stores are configured.
^C
[root@as squid]# squid
[root@as squid]# netstat -antp|grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      55371/(squid-1)     


7.配置squid启动脚本;


vim   /etc/init.d/squid

#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"   ##PID文件进程号
CONF="/etc/squid.conf"                           ##主配置文件
CMD="/usr/local/squid/sbin/squid"           ##启动命令

case "$1" in
start)
                netstat -ntap | grep squid &> /dev/null
                if [ $? -eq 0 ]
                then
                 echo "squid is running"
                 else
                 echo "正在启动 squid...." 
                 $CMD
                 echo "启动完成!"
                fi
                ;;
stop)
                $CMD -k kill &> /dev/null   ##关闭squid
                rm -rf $PID &> /dev/null    ##删除PID文件
                ;;
status)
                [ -f $PID ] &> /dev/null
                 if [ $? -eq 0 ]
                                then
                                 netstat -ntap | grep squid
                                else
                                 echo "squid is not running"
                fi
                ;;
restart)
                $0 stop &> /dev/null
                echo "正在关闭 squid..."
                $0 start &> /dev/null
                echo "正在启动 squid..."
                ;;
reload)
                $CMD -k reconfigure    ##重载配置文件
                ;;
check)
                $CMD -k parse      ##检查语法
                ;;
*)
                echo "用法:$0{start|stop|reload|status|check|restart}"
                ;;
esac

验证脚本:

[root@as init.d]# chmod +x /etc/init.d/squid           //脚本执行权限
[root@as init.d]# chkconfig --add  /etc/init.d/squid   //添加到启动项
[root@as init.d]# service squid stop
[root@as init.d]# netstat -antp|grep squid
[root@as init.d]# service squid start
正在启动 squid....
启动完成!
[root@as init.d]# netstat -antp|grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      56348/(squid-1)     

二,搭建传统代理服务器

手动指定代理服务器; 指定代理服务器;

  1. 更改squid配置,添加优化
[root@squid init.d]# vim /etc/squid.conf
       http_port 3128
      cache_effective_user squid
      cache_effective_group squid
63 cache_mem 64 MB	'//自定义缓存空间大小,容量最好为4的倍数'
64 reply_body_max_size 10 MB	'//允许下载最大文件大小,以字节为单位,默认设置0表示不进行限制'
65 maximum_object_size 4096 KB	'  //允许保存到缓存空间的最大对象的大小,以KB为单位,超过限制不会缓存,直接转到用户端的缓存'

[root@squid ~]# service squid reload	'//重载服务'
[root@squid ~]# netstat -antp |grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      56799/(squid-1)   

  1. 防火墙设置

[root@squid ~]# iptables -F ‘//清空防火墙表内容’
[root@squid ~]# iptables -L ‘//查看防火墙表内容’
[root@squid ~]# setenforce 0 ‘//关闭防火墙增强型功能’
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ‘//新增规则,允许3128端口’

  1. (真机或win10虚拟机)浏览器验证:
    使用浏览器不同,配置代理服务地址也不同;(我用的是firefox火狐)
    设置-----网络----选择手动配置代理ip
    在这里插入图片描述
    第一次:没配置代理ip前
    第二次:配置代理ip后

web节点查看httpd访问正确日志: cat /var/log/httpd/access.log

在这里插入图片描述

问题:
1.如果访问web网站,页面显示错误信息,无法获取URL信息,解决方法如下:
//代理服务器配置文件,拒绝了acl访问策略;
56 #http_access deny all //查看是不是忽略了这个,注释掉
添加http_access allow all //允许所有,访问策略

2.防火墙问题,是否关闭firewalld,iptables访问策略清空,从新添加!!

三,搭建透明代理

关闭传统代理的,客户端代理ip

  1. 添加一个网卡ens36 做代理网关;
    识别不到新添加网卡:systemctl start networkmanager 网络管理服务;
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33  ifcfg-ens36

vim ifcfg-ens36
//文件之前的ens33改成ens36
//uuid删除去掉
//ip地址为192.168.100.1  网关地址

//重启下网络服务
systemctl restart network
-------------

  1. 做路由转发
vim  /etc/sysctl.conf 
net.ipv4.ip_forward = 1

[root@squid network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
  1. 更改squid配置文件,改为透明代理模式
vim /etc/squid.conf
60 http_port 192.168.100.1:3128  transparent 
//地址是新建网卡的网关地址;

  1. 重启服务;
    service squid restart

  2. 防火墙策略设置:

iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128        //定义入口规则 网卡名称 源地址  协议   http80端口重定向到3128端口
iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128      //定义入口规则 网卡名称 源地址  协议   https443端口重定向到3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT         //新增规则,允许3128端口

  1. web节点、

1.做静态路由,指向squid代理服务器地址;

[root@web httpd]# route add -net 192.168.100.0/24 gw 20.0.0.16    //添加路由到路由表

[root@web httpd]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         20.0.0.2        0.0.0.0         UG    100    0        0 ens33
20.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.100.0   20.0.0.16       255.255.255.0   UG    0      0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0


  1. 客户端验证:
    将之前的网卡更换,与squid代理服务网关网卡一致
    更改为192.168.100.10地址,网关指向代理服务网关192.168.100.1
    在这里插入图片描述

win10 打开浏览器访问web地址,输入20.0.0.17
//显示登陆界面;

  1. web端查看日志文件
    tail /vat/log/httpd/access.log
    在这里插入图片描述

四,ACL访问控制

  1. 修改squid配置文件

vim /etc/squid.conf

acl  mygw    src 192.168.100.0/24             //访问列表控制原地址某个网段;
acl  localip src 192.168.100.10/32           //访问列表控制具体地址‘,固定ip地址是32位
acl  desthost   dst  20.0.0.17/32           //访问列表控制目标地址
acl  mc20    maxconn  20                    //访问数量,最大访问
acl  burl    url_regex  -i  ^rtsp://  ^cmule://           //正则表达式,以什么协议为开头
acl  purl    urlpath_regex -i  \.mp3$  \.mp4$  \.rmvb$   //以什么为结尾
acl  work time  MTWHF  08:30-17:30                        //对某段时间做限制,MTWHF是周一到周五,AC是周六周日



//拒绝localip列表;以上往下的顺序
http_access deny localip


  1. acl访问控制的ip地址,也可以放在一起列表管理
    方便,灵活,减少配置文件的代码量

mkdi  /etc/squid/              //创建目录,存放对象地址

vim  /etc/squid/dest.ip        //输入web目标地址
20.0.0.17
20.0.0.18
.....

  1. 配置文件内
vim /etc/squid.conf

acl  desthost   dst   "/etc/squid/dest.ip"
  1. 重启squid
    service squid restart

  2. 客户端访问

做访问列表控制前:
在这里插入图片描述
做访问列表控制后:
在这里插入图片描述

五,squid日志分析,sarg工具

  1. 安装准备环境
    yum -y install gd gd-devel //图像处理扩展库gd

  2. 创建编译安装准备目录
    mkdir /usr/local/sarg

  3. 将软件拖到/opt 解压
    cd /opt
    tar zxvf sarg-2.3.7.tar.gz

  4. 编译安装
    cd sarg-2.3.7/
    ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection

//–enable-extraprotection //额外安全防护

make && make install

  1. 将sarg配置备份,修改配置文件
    cd /etc/sarg/
    cp sarg.conf sarg.conf.bak

编辑配置

vim 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
206 exclude_hosts /usr/local/sarg/noreport
257 overwrite_report no
289 mail_utility mailq.postfix
434 charset UTF-8
518 weekdays 0-6
525 hours 0-23
633 www_document_root /var/www/html

//配置解释:
7:指定访问日志文件
25:网页标题,可自定义
120:报告输出目录,存放目录
178:使用用户名显示
184:top排序中有连接次数,访问字节,降序排列,升序是normal
206:不计入排序的站点列表文件
257:同名日志是否覆盖
289:发送邮件报告命令
434:使用字符集
518:top排序的星期周期
525:top排序的时间周期
633:网页根目录

  1. 创建列表文件
    touch /usr/local/sarg/noreport

  2. 将sarg命令能够被系统识别

ln -s /usr/local/sarg/bin/sarg /usr/local/bin/

  1. 安装httpd
    yum -y install httpd

  2. 开启sarg工具,生成报告

[root@as sarg]# sarg
SARG: 纪录在文件: 81, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Nov01-2020Nov01

  1. 执行每天生成报告
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)

前一天的时间 - 今天的时间 = 就是一天的生成报告时间
[root@as squid-reports]# date -d "1 day ago" +%d/%m/%Y
31/10/2020
[root@as squid-reports]# date  +%d/%m/%Y
01/11/2020

六,squid 反向代理

20.0.0.17 网页文档修改

vi /var/www/html/index.html

<h1> this  is web1 </h1>
  1. 新添加 web2节点 20.0.0.18

//安装httpd
yum -y install httpd

//开启服务,做站点目录网页文档,

vi /var/www/html/index.html

<h1> this  is web2 </h1>

systemctl enable httpd
systemctl start httpd

netstat -antp|grep 80


//添加路由表,静态路由指向代理服务器ip
route add -net 192.168.100.0/24 gw 20.0.0.16

route -n        //查看路由表

ping 192.168.100.10    测试客户端的连通性
  1. squid端 修改squid配置,改为反向代理
vim   /etc/squid.conf
http_port 20.0.0.16:80 accel vhost vport                  //监听squid代理地址,端口为80
cache_peer 20.0.0.17 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web        //访问后面web节点服务,重定向,定位到80端口,采用轮询机制,最大访问量30 , 权重为1  ,别名web
cache_peer 20.0.0.18 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2      //访问后面web节点服务,重定向,定位到80端口,采用轮询机制,最大访问量30 , 权重为1  ,别名web
cache_peer_domain web web2 www.as.com       //匹配,如果访问的域名是www.as.com  就访问到两个web节点;



//停止httpd服务;端口冲突
systemctl  stop httpd

//重启squid服务,过滤端口
[root@squid ~]# service squid restart
正在关闭 squid...
正在启动 squid...
[root@squid ~]# netstat -antp |grep squid
tcp        0      0 20.0.0.16:80            0.0.0.0:*               LISTEN      60392/(squid-1)  

  1. 防火墙策略
[root@squid ~]# iptables -F             //清除之前的所有规则
[root@squid ~]# iptables -t nat -F    //清除之前表内的所有策略
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT      //新添加入规则,允许端口3128
[root@squid ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:squid

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 


  1. 客户端
    验证:
    //开启代理ip
    在这里插入图片描述

如果不想做域名,轮询,可以去掉这个配置,直接通过ip就可以
cache_peer_domain web web2 www.as.com

//做hosts主机映射
C:\Windows\System32\drivers\etc 下的 hosts文件中-------添加20.0.0.16 www.as.com-----验证

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47320286/article/details/109428236