linux-squid代理服务器

2024-09-02 20:36
文章标签 linux 代理服务器 squid

本文主要是介绍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

这篇关于linux-squid代理服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130998

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo