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

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.confhttp_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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智慧能源系统解决方案(Doc)
  • 版本控制系统Git/Gitlab/GitHub
  • 常用企业技术架构开发速查工具列表
  • 老板视角的可视化分析
  • 【JAVA基础】接口
  • ubuntu如何限制三指手势操作
  • HALCON与LabVIEW的联合编程 视觉与控制结合
  • LuaJit分析(九)LuaJit中的JIT原理分析
  • WebRTC协议下的视频汇聚融合技术:EasyCVR构建高效视频交互体验
  • Uniapp:WebSocket 重连之后累加触发 uni.onSocketOpen()
  • 2024/9/3黑马头条跟学笔记(一)
  • c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)
  • VM Workstation虚拟机AlmaLinux 9.4操作系统安装(桌面版安装详细教程)(宝塔面板的安装),填补CentOS终止支持维护的空白
  • 开源项目管理工具 Plane 安装和使用教程
  • opencv车道偏离系统-代码+原理-人工智能-自动驾驶
  • Bootstrap JS插件Alert源码分析
  • CSS盒模型深入
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • FineReport中如何实现自动滚屏效果
  • HTML5新特性总结
  • js写一个简单的选项卡
  • Markdown 语法简单说明
  • Netty源码解析1-Buffer
  • Python十分钟制作属于你自己的个性logo
  • Redux 中间件分析
  • RxJS: 简单入门
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring Boot快速入门(一):Hello Spring Boot
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Web Storage相关
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 大数据与云计算学习:数据分析(二)
  • 简单基于spring的redis配置(单机和集群模式)
  • 前言-如何学习区块链
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Java总结 - String - 这篇请使劲喷我
  • ​【已解决】npm install​卡主不动的情况
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Apache SeaTunnel 究竟是什么?
  • ###C语言程序设计-----C语言学习(3)#
  • #pragma once
  • $GOPATH/go.mod exists but should not goland
  • (33)STM32——485实验笔记
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (NSDate) 时间 (time )比较
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (论文阅读11/100)Fast R-CNN
  • (三十)Flask之wtforms库【剖析源码上篇】