当前位置: 首页 > article >正文

linux-squid代理服务器

squid简介

作为应用层的代理服务软件,Squid 主要提供缓存加速、应用层过滤控制的功能、用来缓冲Internet数据

  • 接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据立即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西

  • 缓存代理
    • 正向代理
      • 标准代理缓冲服务器:一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)
      • 透明代理缓冲服务器:透明代理缓冲服务和标准代理服务器的功能完全相同;代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)
    • 反向代理
      • 反向代理缓冲服务器:反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载

演示部分

演示一:squid安装及运行

[root@localhost ~]# yum -y install gcc*
[root@localhost ~]# tar zxvf squid-3.5.23.tar.gz 
[root@localhost ~]# cd squid-3.5.23

[root@localhost squid-3.5.23]#  ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-async-io=240
 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gnuregex
 
 //可以使用以下简化的配置
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-gnuregex
  • --prefix=/usr/local/squid:安装目录
  • --sysconfdir=/etc:单独将配置文件修改到其他目录
  • --enable-linux-netfilter:使用内核过滤(透明模式)
  • --enable-async-io:用于异步IO,提升存储性能(240表示在进行异步io时提供的线程数)
    • Squid是一个代理服务器,每个用户需要通过这个代理服务器访问网站的时候,当用户访问量很大时,需要保存每一个用户请求的数据,所以需要支持更多的用户能够同时的、并发的访问
  • --enable-default-err-language=Simplify_Chinese:错误信息提示语言
  • --disable-poll --enable-epoll:关闭默认的poll模式,开启epoll(扩展了的poll)模式提升性能
  • --enable-gnuregex:允许规则中使用GNU正则表达式

2:编译及安装

[root@s2 squid-3.5.23]#make && make install
[root@s2 squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/        #创建软链接来优化命令路径,使我们可以直接在终端里像使用系统命令一样来使用Squid的命令
[root@s2 squid-3.5.23]# useradd -M -s /sbin/nologin squid        #M:不建立宿主目录;-s不能用于登录 
//为了安全性考虑,可以让专门运行该程序的程序用户来控制该程序,也就是要修改这些文件的属主和属组

[root@s2 squid-3.5.23]# chown -R squid:squid /usr/local/squid/var/    
#chown:Linux 和 Unix 系统中用于更改文件或目录所有者和/或所属组的命令
#-R:选项表示递归地更改目录及其内部所有文件和子目录的所有者和/或所属组
#squid:squid:这指定了新的所有者和所属组

3:编辑squid配置文件

[root@s2 ~]# vi /etc/squid.conf

http_access allow all   ##放在deny all的前面;允许所有客户端访问本代理服务器

cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256  #去掉注释符
cache_effective_user squid     ##指定squid程序的用户(可以添加在末尾)
cache_effective_group squid     ##指定squid账号的基本组(可以添加在末尾)
  • ufs:是一种数据的存储格式
  • 100:缓存大小,单位100兆(Mb)
  • 16:一级目录的目录数量
  • 256:二级目录的目录数量
  • effective:有效的

4:检查配置结果

[root@s2 ~]# squid -k parse       ##检查配置文件的语法是否正确
[root@s2 ~]# squid -z           ##初始化缓存目录
[root@s2 ~]# squid              ##启动squid服务
[root@s2 ~]#squid –k reconfigure   ##重新加载,相当于reload

[root@s2 ~]# netstat -anpt | grep squid

[root@s2 ~]# yum -y install psmisc    ##psmisc提供了killall工具
[root@localhost ~]# killall squid

5:使用squid服务脚本

//编写一个脚本;;
将squid添加为系统服务
[root@s2 init.d]# chmod +x /etc/init.d/squid
[root@s2 init.d]# chkconfig --add squid
[root@s2 init.d]# chkconfig squid on

演示二:传统代理设置

设备名称

系统版本

IP地址

所需软件

客户机(宿主机或虚拟机)

win10

192.168.10.51

服务器B(squid)

CentOS7.9

ens33=192.168.10.101

squid-3.5.23、sarg-2.3.7

服务器A(web)

CentOS7.9

ens33=192.168.10.103

httpd

1:web服务器配置

为了方便实验关闭防火墙和内核安全机制,然后使用yum命令快速的安装一个Apache HTTP Server

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install httpd

cd进入Apache存放网页文件的目录下,编写一个测试的页面

[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html

这里编写了一个使用超链接下载文件的网页,保存并退出,在/var/www/html/目录下,除了编写的网页文件以外,还需要把超链接的这两个文件从宿主机导入到当前目录下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<p>软件下载1:<a href="test01.zip">测试01.zip</a></br>
  软件下载2:<a href="test02.rar">测试02.rar</a>
</p>



</body>
</html>
//保存退出并重启服务
[root@localhost html]# systemctl start httpd

2:squid代理服务器配置

[root@s2 squid-3.5.23]# vim /etc/squid.conf
http_port 3182
reply_body_max_size 10 MB     //允许下载的最大文件大小
http_access allow all        //放在 http_access deny all 之前

[root@s2 squid-3.5.23]# systemctl restart squid        //重启一下squid

在防火墙上添加允许策略

//添加允许访问http服务的流量通过,由于防火墙没有针对3128端口的服务策略,所以使用添加端口的方式允许3128端口的流量通过
//因为我们添加策略是永久的,所以需要重载防火墙
[root@localhost ~]# firewall-cmd --add-service=http --permanent
[root@localhost ~]# firewall-cmd --add-port=3128/tcp --permanent
[root@localhost ~]# firewall-cmd --reload

3:设置客户端

  • windows:更改代理服务器,然后直接访问192.168.10.103

4:squid上查看日志

[root@localhost ~]# tail -f /usr/local/squid/var/logs/access.log        //查看squid访问日志的新增记录
[root@localhost ~]# tail -f /var/log/httpd/access_log            //查看web访问日志的新增记录

演示三:透明代理

设备名称

系统版本

桥接

IP地址

所需软件

测试客户机

win10

桥接nat

192.168.10.51

Squid代理服务器

CentOS7.9

ens33桥接nat

ens36桥接vm1

ens33=192.168.10.101

ens36=172.16.16.1

squid-3.5.23

sarg-2.3.7

测试网站

CentOS7.9

桥接vm1

ens33=172.16.16.172

在Windows的设置关闭代理功能

1:配置web服务器

因为Web服务器已经和XShell断连接了,所以来到虚拟机的TTY终端进行操作

修改网卡配置文件,修改IP为拓扑图中的IP,把网关地址注释掉

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=172.16.16.172
NETMASK=255.255.255.0
#GATEWAY=192.168.10.254

[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig

2:为squid服务器添加一个网卡

//测试代理服务器能否访问外网的Web服务器,如果能访问,那Web服务器就配置好了
[root@localhost ~]# curl 172.16.16.172

//cd进入存放网卡配置文件的目录下, 拷贝出ens36的网卡配置文件,然后编辑
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens36
//设置ens36的ip地址为172.16.16.1,并且将网关地址和UUID注释掉后保存退出
3:修改配置文件以支持透明代理
[root@s2 ~]# vi /etc/squid.conf
找到http_port 3128这一行,
将其修改为http_port 192.168.10.101:3128 transparent(透明)        //只在其中一个IP地址提供服务;ip地址为内网网卡的ip
//保存并退出,重启服务(pkill杀死,再启动),然后使用netstat命令检查是否启动
[root@localhost ~]# pkill -9 squid
[root@localhost ~]# squid
[root@localhost ~]# netstat -anpt | grep squid

[root@s2 ~]# service squid reload             ##或者重启squid服务
4:设置iptables重定向策略
//不影响透明代理案例的实现,我们先删除刚才传统代理配置的防火墙策略
firewall-cmd --remove-service=http --permanent
firewall-cmd --remove-port=3128/tcp --permanent
firewall-cmd --reload

//既然两个网卡一个连接外网一个连接内网,那两个网卡的区域也要修改
//把ens36网卡加入到external的区域就自动拥有了地址伪装的功能,才能拥有网关的源地址转换功能
    //外部区域(external):这个区域通常代表企业外部的网络环境,‌通常包括互联网或其他不受信任的网络。‌
    //在这个区域中的计算机或设备可能包含潜在的安全风险,‌因此对它们的访问和控制会更加严格,‌以保护企业内部网络不受外部侵害。‌
firewall-cmd --zone=external --change-interface=ens36

//默认网卡的区域的public,所以我们修改ens33到的区域到internal,也就是内网
    //内部区域(internal):这个区域通常代表企业内部网络或受信任的网络环境。‌
    //在这个区域中的计算机或设备被认为是可信的,‌它们之间的通信受到较少的限制,‌以便于企业内部的数据交换和通信。‌
firewall-cmd --zone=internal --change-interface=ens33

//允许http(80端口)和3128端口TCP协议的流量通过
firewall-cmd --zone=internal --add-service=http 
firewall-cmd --zone=internal --add-port=3128/tcp

//使用直接规则来实现:如果客户端请求访问的是80端口,代理服务器接收到请求后,就要转发给3128端口,也就说明该请求就被Squid进程接收到了
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport 80 -j REDIRECT --to-ports 3128
//-i:input,流量的方向

firewall-cmd --runtime-to-permanent        
//如果在添加策略的时候没有设为永久时,可以使用runtime-to-permanent选项把策略从运行时改为永久时

5:客户端设置

//修改客户端的网关地址:192.168.10.101
//验证透明代理,将代理服务器的钩去掉,并保存设置,设置其网关为squid的ens33的ip地址,然后访问web服务
//无法访问重启squid服务在试
[root@localhost ~]# tail /usr/local/squid/var/logs/access.log

//删除squid缓存
[root@s2 ~]# grep cache_dir /etc/squid.conf
#cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
[root@s2 ~]#service squid stop
[root@s2 ~]# rm -rf /usr/local/squid/var/cache/squid
[root@s2 ~]# squid -z 
[root@s2 ~]#service squid start
//cache_dir:缓存文件放置位置,ufs是文件系统类型,100指定缓存目录大小,单位是M, 16 指缓存空间一级子目录个数, 256 指缓存空间的二级子目录个数

6:ACL访问控制(控制特定IP范围的用户访问 )

1、查看acl
[root@s2 ~]# vi /etc/squid.conf
2、源ip为控制条件
[root@localhost ~]# vi /etc/squid.conf

修改acl localnet src 192.168.0.0/16  # RFC1918 possible internal network
为  acl aaa src 192.168.0.0/16  # RFC1918 possible internal network
在acl列的末尾添加 
http_access deny aaa
http_access allow all 

[root@s2 ~]#service squid reload

3、设置文件下载限制

[root@s2 ~]# vi /etc/squid.conf
添加
reply_body_max_size 10 MB     ##下载文件的大小限制

重启squid服务并用客户端进行下载测试

4、黑名单文件作为控制条件

[root@s2 ~]# vi /etc/squid.conf
修改
acl localnet src 192.168.0.0/16  # RFC1918 possible internal network

为
acl MYLAN src 192.168.0.0/16  # RFC1918 possible internal network

针对目标ip建立黑名单
[root@s2 ~]# mkdir /etc/squid
[root@s2 ~]# cd /etc/squid
[root@s2 squid]# vi ipblock.list
添加172.16.16.172     ##定义针对特定IP范围的列表
[root@s2 squid]# vi dmblock.list
添加 qq.com            ##定义针对特定域名的列表

[root@s2 ~]# vi /etc/squid.conf
添加(在acl列表的末尾,放在http_access allow前面
acl IPBLOCK dst "/etc/squid/ipblock.list"    ##定义一个名为 ipBlock 的 ACL,它匹配目标 IP 地址在/opt/ipBlock.list文件中列出的地址
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"    ##定义一个名为 dmBlock 的 ACL,它匹配目标域名在/opt/dmBlock.list文件中列出的域名
http_access deny MYLAN IPBLOCK      ##拒绝任何来自 MYLAN ACL(即 IP 地址在 192.168.0.0/16 范围内)并且目标在 ipBlock ACL 列表中的请求
http_access deny MYLAN DMBLOCK      ##拒绝任何来自 MYLAN ACL 并且目标在 dmBlock ACL 列表中的请求

[root@s2 ~]#service squid reload
使用客户端测试,此时访问就被拒绝了

日志分析

SARG 全称是 Squid Analysis Report Generator,是一款 Squid 日志分析工具,采用HTML 格式,详细列出每位用户访问 Internet 的站点信息、时间占用信息、排名、连接次数、访问量等

1:安装GD库及SARG

[root@s2 ~]#yum -y install gd httpd gd-devel

[root@localhost ~]# tar zxvf sarg-2.3.7.tar.gz
[root@localhost ~]# cd sarg-2.3.7
[root@s2 sarg-2.3.7]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection && make && make install
//--prefix=/usr/local/sarg:配置文件目录,默认是/usr/loca/etc
//--enable-extraprotection:添加额外的安全保护

2:配置

[root@s2 ~]#cd /etc/sarg/
[root@s2 sarg]#vim sarg.conf
......
里面要改的东西较多,可以删掉sarg.conf,在创建一个将给的内容复制进去
[root@s2 sarg]#vim /etc/sarg/sarg.conf 

access_log /usr/local/squid/var/logs/access.log
title "Squid User Access Reports"
output_dir /var/www/html/sarg
user_ip no
topuser_sort_field connect  reverse
user_sort_field connect reverse
overwrite_report no
mail_utility mailq.postfix
charset UTF-8
weekdays 0-6
hours 9-12,14-16,18-20
www_document_root /var/www/html

3:运行

[root@s2 sarg]#setenforce 0
[root@s2 sarg]#touch /usr/local/sarg/noreport   ##该文件中添加的域名将不被显示在排序中

[root@s2 sarg]#ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@localhost sarg]# systemctl start httpd

用客户端访问一次网站
[root@s2 sarg]# sarg
或
[root@s2 sarg]# /usr/local/sarg/bin/sarg
SARG: 纪录在文件: 396, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/sarg/2015Sep18-2015Sep18

4:验证

开启squid服务器的httpd服务service httpd start
多次访问web,并多次在squid上执行sarg
在客户端访问http://172.16.16.1/sarg


http://www.kler.cn/a/288222.html

相关文章:

  • python抓取工具【pyppeteer】用法 直接运行 无错
  • 机器学习-35-提取时间序列信号的特征
  • 力扣 LeetCode 541. 反转字符串II(Day4:字符串)
  • 如何保证Redis与MySQL双写一致性
  • 如何在CentOS 7上搭建SMB服务
  • 解锁微前端的优秀库
  • 微信小程序垃圾回收的前景方向
  • 09-02 周一 Ubuntu上使用docker-compose部署elasticsearch和kibana服务
  • k8s-pod 实战七 (PreStop 和 PostStart 详细分析)
  • .NET 一款具备签名用于绕过防护的工具
  • Git之2.35版本重要特性及用法实例(六十三)
  • 【前端面试】挖掘做过的nextJS项目4——全栈性案例
  • CNN在处理文本和图像时有什么共同点和不同点
  • Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储
  • 【Java】继承性【主线学习笔记】
  • React 入门第九天:与后端API的集成与数据管理
  • MySQL 使用C语言链接
  • 力扣238题详解:除自身以外数组的乘积的多种解法与模拟面试问答
  • 【Qt】对话框
  • K8s系列之:解释Kubernetes Operators
  • 71. 简化路径算法实现详解(goalng版)
  • 快速了解Rust 的数据分析库Polars
  • 常见概念 -- WSS光层环回
  • Django Admin优化查询
  • 金融知识普及月答题活动
  • 【Linux】进程状态和进程优先级