Squid缓存代理服务器!

Posted handsomeboy-东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Squid缓存代理服务器!相关的知识,希望对你有一定的参考价值。

Squid代理服务器

Squid缓存代理概述

Squid代理服务器是基于Unix的代理服务器(proxy server),它主要提供缓存加速、应用层过滤控制的功能,缓存网页对象,可以减少重复请求

缓存代理的类型

  • 传统代理:适用于Internet,需明确指定服务端(用户需要手动指定代理服务器的ip)

  • 透明代理:客户端不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理

  • 反向代理:客户端需要指定代理服务器,代理服务器定义一个后端真实服务器地址池,通过定义地址池进行反向代理

设置缓存代理服务器的好处

  • 提高Web访问速度
  • 隐藏客户端的真实IP地址

Squid代理服务安装部署

设备准备:一台Squid代理服务器(192.168.118.100),两台Web服务器(192.168.118.50、192.168.118.55),一台win10客户机(192.168.118.99)

  • Squid代理配置:
[root@squid ~]# yum install -y gcc gcc-c++ make		#部署依赖环境
[root@squid opt]# tar xvf squid-3.5.27.tar.gz 
[root@squid opt]# cd squid-3.5.27/
[root@squid squid-3.5.27]# ./configure --prefix=/usr/local/squid 
> --sysconfdir=/etc 								#将配置文件修改到/etc目录下
> --enable-arp-acl 									#可在ACL中设置通过MAC地址进行管理,防止IP欺骗
> --enable-linux-netfilter 							#使用内核过滤
> --enable-linux-tproxy 							#支持透明模式
> --enable-async-io=100 							#异步i/o,提升存储性能
> --enable-err-language="Simplify_Chinese" 			#错误信息的显示语音
> --enable-underscore 								#允许URL中有下划线
> --enable-poll 									#使用Poll模式,提升性能
> --enable-gnuregex									#使用GNU正则表达式
[root@squid squid-3.5.27]# make && make install
[root@squid squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/	
[root@squid squid-3.5.27]# useradd -M -s /sbin/nologin squid			#创建程序用户、组
[root@squid squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/	#改变目录属主

[root@squid squid-3.5.27]# vim /etc/squid.conf				#修改配置文件

[root@squid squid-3.5.27]# squid -k parse		#检查配置文件
[root@squid squid-3.5.27]# squid -k rec			#重新加载配置文件
[root@squid squid-3.5.27]# squid -zX			#初始化缓存目录
  • 编写squid的启动脚本,启动squid
[root@squid squid-3.5.27]# 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 -ntap | 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 -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 "用法:$0start|stop|reload|status|check|restart"
                ;;
esac
[root@squid squid-3.5.27]# chmod +x /etc/init.d/squid 
[root@squid squid-3.5.27]# netstat -antp | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      118771/(squid-1)  

搭建传统代理

[root@squid squid-3.5.27]# vim /etc/squid.conf		#修改配置文件,添加以下内容

[root@squid squid-3.5.27]# service squid restart
正在关闭 squid...
正在启动 squid...

##修改防火墙规则
[root@squid squid-3.5.27]# iptables -F
[root@squid squid-3.5.27]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

Web服务器配置

Web1:
[root@web1 ~]# yum install -y httpd
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# netstat -antp | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      97766/httpd 


Web2:
[root@web2 ~]# yum install -y httpd
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -antp | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      98921/httpd  

Win10客户端配置

  • 设置–高级–添加代理服务器,地址为192.168.118.100,端口3128

  • 访问Web1服务器IP地址,刷新网页并实时查看访问日志,观察来访IP地址

[root@web1 ~]# tail -f /var/log/httpd/access_log 

搭建透明代理

设备准备:基于上面的传统代理设置,Squid服务器增加一个网卡(VMnet1仅主机,ens36:192.168.140.100,不用设置网关,DNS),Win10的IP地址设置为192.168.140.99,网关为Squid的ens36网卡地址

  • 修改Squid配置文件
[root@squid ~]# vim /etc/squid.conf

[root@squid ~]# service squid restart		#重启squid服务
正在关闭 squid...
正在启动 squid...
[root@squid ~]# netstat -antp | grep squid
tcp        0      0 192.168.140.100:3128    0.0.0.0:*               LISTEN      121733/(squid-1
[root@squid ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 	#添加路由转发
[root@squid ~]# sysctl -p
net.ipv4.ip_forward = 1

##添加防火墙规则,将来源140网段的80和443端口的流量重定向到3128端口
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.140.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.140.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT		#由于前面清理了规则,这里需要重新放通3128端口
  • Web1上添加一条静态路由
[root@web1 ~]# route add -net 192.168.140.0/24 gw 192.168.118.100
  • Win10上先关闭代理设置,再清除浏览器缓存,访问Web1IP地址会发现依然能访问,证明透明代理不需要指定Squid服务端

ACL访问控制

格式:
acl 列表名称 列表类型 列表内容
acl localhost src 192.168.140.100/24            #源地址为192.168.140.100
acl MYLAN src 192.168.140.0/24    				#客户机网段
acl destinationhost dst 192.168.118.100/32      #目标地址为192.168.118.100
acl MC20 maxconn 20                             #最大并发连接20
acl PORT port 21                                #目标端口21
acl DMBLOCK dstdomain .qq.com                   #目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule://       	#以rtsp://. emule://开头的URL,-i表示忽略大小写
acl PURL urlpath_regex -i \\.mp3$ \\.mp4$ \\.rmvb$   #以 .mp3、.mp4、.rmvb结尾的URL路径
acl WORKTIME time MTWHF 08:30-17:30             #时间为周一-至周五8:30~17:30, "MTWHF"为每个星期的英文首字母
[root@squid ~]# vim /etc/squid.conf		#修改配置文件,添加一条规则


[root@squid ~]# service squid restart	·	#重启服务
正在关闭 squid...
正在启动 squid...

再次访问Web1,访问被拒绝

Squid日志分析

Squid日志分析我们可以安装sarg日志分析工具,它采用html格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等

[root@squid ~]# cd /opt
[root@squid opt]# tar xzf sarg-2.3.7.tar.gz 				#解压sarg包
[root@squid opt]# yum install -y gd gd-devel pcre-devel		#安装依赖环境
[root@squid opt]# cd sarg-2.3.7/
[root@squid sarg-2.3.7]# ./configure --prefix=/usr/local/sarg \\
> --sysconfdir=/etc/sarg \\				#设置配置文件目录,
> --enable-extraprotection				#额外安全防护
[root@squid sarg-2.3.7]# make && make install
  • 修改sarg配置文件,注释修改一些内容
[root@squid sarg-2.3.7]# vim /etc/sarg/sarg.conf 










[root@squid sarg-2.3.7]# touch /usr/local/sarg/noreport
[root@squid sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin
[root@squid sarg-2.3.7]# sarg
SARG: Records in file: 3695, reading: 100.00%
SARG: Successful report generated on /var/www/html/sarg/2021Jul28-2021Jul28
[root@squid sarg-2.3.7]# yum install httpd -y
[root@squid sarg-2.3.7]# systemctl start httpd
[root@squid sarg-2.3.7]# netstat -antp | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      127474/httpd


添加计划任务

[root@squid sarg-2.3.7]# vim /usr/local/sarg/report.sh
#!/bin/bash
#Get current date								#获取准确时间
TODAY=$(date +%d/%m/%Y)
#Get one yesterday ago today					#获取前一天
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0
[root@squid sarg-2.3.7]# chmod +x /usr/local/sarg/report.sh
[root@squid sarg-2.3.7]# crontab -e
0 0 * * * /usr/local/sarg/report.sh
[root@squid sarg-2.3.7]# crontab -l
0 0 * * * /usr/local/sarg/report.sh

搭建反向代理

  • 工作机制:缓存网页对象,减少重复请求,讲互联网请求轮询或按权重分配到内网Web服务器,代理用户请求,避免用户直接访问Web服务器,提高安全
    squid:
[root@squid sarg-2.3.7]# iptables -F
[root@squid sarg-2.3.7]# iptables -t nat -F
[root@squid sarg-2.3.7]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid sarg-2.3.7]# vim /etc/squid.conf			#修改配置文件


[root@squid sarg-2.3.7]# service squid reload		#重载服务
2021/07/28 21:46:30| aclIpParseIpData: WARNING: Netmask masks away part of the specified IP in '192.168.140.100/24'
[root@squid sarg-2.3.7]# systemctl stop httpd		#停止前面配置的httpd服务
  • 在Win10hosts文件中添加域名及对应的IP地址,讲浏览器代理服务打开,并设置端口为80

以上是关于Squid缓存代理服务器!的主要内容,如果未能解决你的问题,请参考以下文章

CentOS上构建squid传统代理,透明代理(squid3.4.6)

squid传统代理(附压缩包文件)

如何使用Squid服务来构建=》传统和透明代理服务器,通俗易懂!

实战Squid 缓存服务器 之 传统代理 + 透明代理

Centos7 下 squid安装 以及 传统代理和透明代理的部署

缓存加速------Squid代理服务器应用(传统代理,透明代理,反向代理,ACL访问控制,日志分析)