squid正向代理(传统代理与透明代理)的配置、ACL访问控制与日志分析工具sarg的使用

一:squid代理服务概述

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

  • 工作机制
    在这里插入图片描述
    Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:www.163.com)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。
  • 正向代理的基本类型
    传统代理:普通的代理服务,适用于Internet,需明确指定服务端
    透明代理:客户机不需要指定代理服务器的地址和端口,是通过默认路由,防火墙将web重定向给代理
  • 使用代理的好处
    提高web访问速度
    隐藏客户机的真实IP地址

二:传统代理的配置

2.1:实验环境介绍

VMware软件
一台centos7虚拟机作为squid服务器,IP地址为:192.168.209.145
一台centos7虚拟机作为web服务器,IP地址为:192.168.209.146
一台win10虚拟机作为client测试机,IP地址为:192.168.209.128

2.2:实验步骤

2.2.1:在squid服务器上安装squid服务

[root@squid ~]# yum install gcc gcc-c++ -y
[root@squid ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  squid-3.4.6.tar.gz  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@squid ~]# tar zxvf squid-3.4.6.tar.gz 
[root@squid ~]# cd squid-3.4.6/
[root@squid squid-3.4.6]# ./configure \
> --prefix=/usr/local/squid \  //安装路径
> --sysconfdir=/etc \    //配置文件目录
> --enable-arp-acl \     //支持acl访问控制
> --enable-linux-netfilter \    //支持网络筛选
> --enable-linux-tproxy \      //支持透明代理
> --enable-async-io=100 \      //io优化
> --enable-err-language="Simplify_Chinese" \  //设置报错语言
> --enable-underscore \
> --enable-poll \    //IO流事件模型
> --enable-gnuregex   //支持正则
[root@squid squid-3.4.6]# make && make install

2.2.2:优化执行路径

[root@squid squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/

2.2.3:更改权限

[root@squid squid-3.4.6]# useradd -M -s /sbin/nologin squid
[root@squid squid-3.4.6]# chown -R squid:squid /usr/local/squid/var/

2.2.4:修改配置文件、添加缓存用户与组

[root@squid squid-3.4.6]# vim /etc/squid.conf
...
# Squid normally listens to port 3128
http_port 3128
cache_effective_user squid   //缓存用户
cache_effective_group squid  //缓存组
...

2.2.5:检查配置文件的语法

[root@squid squid-3.4.6]# squid -k parse

2.2.6:初始化缓存目录

[root@squid squid-3.4.6]# squid -z

2.2.7:启动squid服务

[root@squid squid-3.4.6]# squid

2.2.8:编写squid的启动脚本

[root@squid squid-3.4.6]# 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...."
        $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...."
        $0 start  &> /dev/null
        echo "正在启动 squid..."
        ;;
reload)
        $CMD -k reconfigure
        ;;
check)
        $CMD -k parse
        ;;
*)
        echo "用法:$0{start|stop|status|reload|check|restart}"
        ;;
esac
[root@squid squid-3.4.6]# chmod +x /etc/init.d/squid
[root@squid squid-3.4.6]# chkconfig --add squid

2.2.9:配置传统代理服务

[root@squid ~]# vim /etc/squid.conf
http_port 3128
cache_effective_user squid
cache_effective_group squid
cache_mem 64 MB	'//自定义缓存空间大小,容量最好为4的倍数'
reply_body_max_size 10 MB	'//允许下载最大文件大小,以字节为单位,默认设置0表示不进行限制'
maximum_object_size 4096 KB	'//允许保存到缓存空间的最大对象的大小,以KB为单位,超过限制不会缓存,直接转到web端'
[root@squid init.d]# iptables -F	'//清空防火墙表内容'
[root@squid init.d]# iptables -L	'//查看防火墙表内容'
[root@squid init.d]# setenforce 0	'//关闭防火墙增强型功能'
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT	'//新增规则,允许3128端口'
[root@squid init.d]# service squid reload	'//重载服务'

2.2.10:客户端配置

需开启游览器的代理功能
在这里插入图片描述
在这里插入图片描述

2.2.11:在web服务器上安装http服务

[root@web ~]# yum install httpd -y	'//安装httpd服务'
[root@web ~]# systemctl stop firewalld.service 	'//关闭防火墙'
[root@web ~]# setenforce 0
[root@web ~]# systemctl start httpd.service 	'//开启httpd服务'

2.2.12:客户端访问web站点,查看web服务器的访问日志

在这里插入图片描述

[root@web ~]# cd /var/log/httpd/
[root@localhost httpd]# ls
access_log  error_log
[root@localhost httpd]# cat access_log 
...
192.168.209.145 - - [09/Sep/2020:10:15:46 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
...

源地址显示的是代理服务器的地址,配置成功!

三:透明代理的配置

3.1:实验环境介绍

透明代理提供的服务功能与传统代理是一致的,但是其“透明”的实现依赖于默认路由和防火墙的重定向策略,因此更适用于局域网主机服务,而不适合为Internet中的客户机提供服务。

在Linux网关上,构建Squid为客户机访问Internet提供代理服务

在所有的局域网主机上,只需正确设置IP地址、默认网关,不需要手动指定代理服务器的地址、端口等信息

基于传统代理的基础上,在squid服务器上增加一块网卡,作为网关

3.2:实验拓扑

在这里插入图片描述

3.3:实验步骤

3.3.1:squid代理服务上增加一块网卡

添加一块网卡(ens36),选择仅主机模式,IP:192.168.10.1

[root@squid network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.209.145  netmask 255.255.255.0  broadcast 192.168.209.255
        inet6 fe80::a426:25c8:ffe1:7352  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f4:5d:9b  txqueuelen 1000  (Ethernet)
        RX packets 332726  bytes 468459295 (446.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 177525  bytes 30670285 (29.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::1857:8c72:c551:a9a0  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f4:5d:a5  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 70  bytes 11020 (10.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.3.2:squid服务器开启路由转发功能

[root@squid network-scripts]# vim /etc/sysctl.conf 	'//开启路由转发功能'
net.ipv4.ip_forward=1	'//末行添加,注意#号'
[root@squid network-scripts]# sysctl -p	'//加载sysctl.conf'
net.ipv4.ip_forward = 1

3.3.4:透明代理配置

[root@squid network-scripts]# vim /etc/squid.conf
http_port 192.168.10.1:3128 transparent	'//仅修改此行,开启透明代理即可'
cache_effective_user squid
cache_effective_group squid

3.3.5:设置防火墙规则

[root@squid network-scripts]# iptables -F	'//清空表内容'
[root@squid network-scripts]# iptables -t nat -F	'//清空nat表内容'
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128	'//定义规则入口ens36网卡,http协议80端口重定向到3128端口'
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	'//定义规则入口ens36网卡,https协议443端口重定向到3128端口'
[root@squid network-scripts]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT	'//新增规则,允许3128端口'

3.3.6:客户端验证

关闭客户端游览器的代理功能,直接访问web站点
在这里插入图片描述

3.3.7:查看web站点的访问日志

[root@web httpd]# cat access_log 
...
192.168.209.145 - - [09/Sep/2020:12:19:32 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"
...

同样源地址为squid代理服务器的地址!

四:ACL访问控制

4.1:acl访问控制方式

根据源地址、目标URL、文件类型等定义列表
语法结构:
acl 列表名称 列表类型 列表内容

针对已定义的acl列表进行限制
语法结构:
http_access allow或deny 列表名称1 列表名称2 …

4.2:acl访问控制类型

常用的acl列表类型

  • src:源地址
  • dst:目标地址
  • port:端口
  • dstdomain:目标域
  • time:访问时间 MTWHFAC代表周一至周日
  • maxconn:最大并发连接
  • url_regex:目标URL地址
  • Urlpath_regex:整个目标URL路径

4.3:acl规则的优先级

  • 一个用户访问代理服务器时,squid会顺序匹配squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
  • 所有规则都不匹配时,squid会使用与最后一条相反的规则

五:日志分析工具sarg

5.1:在squid服务器上部署sarg

[root@squid ~]# yum install gd gd-devel -y
[root@squid ~]# cd /opt
[root@squid opt]# rz -E
rz waiting to receive.
[root@squid opt]# ls
rh  sarg-2.3.7.tar.gz
[root@squid opt]# tar zxvf sarg-2.3.7.tar.gz 
[root@squid opt]# cd sarg-2.3.7/
[root@squid sarg-2.3.7]# ./configure \
> --prefix=/usr/local/sarg \
> --enable-extraprotection \
> --sysconfdir=/etc/sarg
[root@squid sarg-2.3.7]# make && make install

5.2:修改sarg的配置文件

[root@squid sarg-2.3.7]# cd /etc/sarg/
[root@squid sarg]# ls
css.tpl  exclude_codes  sarg.conf  user_limit_block
[root@squid sarg]# 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  //使用用户名显示
206 exclude_hosts /usr/local/sarg/noreport  //不计入排序的站点列表文件,此目录需要自己创建
184 topuser_sort_field connect reverse  //top排序中有连接次数、访问字节(BYTES)、降序排序 升序是normal
257 overwrite_report no   //同名日志是否覆盖
289 mail_utility mailq.postfix   //发送邮件报告命令
434 charset UTF-8  //字符集
518 weekdays 0-6    //top排行的星期周期
525 hours 0-23    //top排行的时间周期
633 www_document_root /var/www/html    //网页根目录

5.3:添加不计入站点文件,添加的域名将不被显示在排序中

[root@squid sarg]# touch /usr/local/sarg/noreport

5.4:开启sarg

[root@squid sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin
[root@squid sarg]# sarg

5.5:安装、启动http

[root@squid sarg]# yum install httpd -y
[root@squid sarg]# systemctl start httpd

5.6:查看sarg的统计日志

客户端输入网址http://192.168.209.145/squid-reports/
在这里插入图片描述

5.7:执行周期性计划任务,每天生成报告

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)

sarg 命令常用选项:

-l 指定输入日志来源

-o 指定输出目录

-z 处理信息

-d 指定日期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值