Squid代理服务器应用

目录

一、squid 代理服务器

二、缓存代理概述

1、Web代理的工作机制

2、正向代理的工作机制 

3、代理服务器的概念及其作用

3.1代理服务器的概念

3.2代理服务器的主要作用

3.3Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

4、squid代理的类型

三、Squid安装介绍

1、安装Squid服务

1.1关闭防火墙

1.2编译安装squid

2、 修改 Squid 的配置文件

3、Squid 的运行控制

4、创建 Squid 服务脚本

四、构建传统代理服务器

1、代理服务器192.168.52.110

2、web服务器192.168.52.100

3、客户机的代理配置

对客户机进行代理

配置代理后,再多次访问web服务器 

查看web服务器的访问日志

查看 Squid 访问日志的新增记录中的缓存命中情况

五、构建透明代理服务器

 1、配置squid服务器

1.1添加网卡

1.2 编辑Squid服务器配置文件

2、Web服务器12.0.0.100配置 

2.1安装apache

2.2修改web服务器的网卡

3、客户机192.168.52.30设置

3.1配置客户机的IP与网关

 3.2关闭代理服务器

3.3IE浏览器访问web服务器

3.4squid服务器查看访问日志

3.5查看 Web 访问日志的新增记录

六、 ACL访问控制

         定义访问控制列表

编辑配置文件,定义控制访问列表 

重启服务

使用客户机访问web服务器

七、Squid 日志分析

八、Squid 反向代理

1、配置squid服务器

1.1修改配置文件

1.2清空防火墙规则

1.3开启squid服务

2、web服务器配置

2.1web1服务器配置

2.2web2服务器配置

3、客户机的域名映射配置

         3.1修改 C:\Windows\System32\drivers\etc\hosts 文件

3.2浏览器不开启代理访问 http://www.my.com

3.3查看日志


一、squid 代理服务器

Squid 主要提供缓存加速、应用层过滤控制的功能。

二、缓存代理概述

1、Web代理的工作机制

缓存网页对象,减少重复请求

2、正向代理的工作机制 

1、代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。

2、将获得的网页数据(静态Web元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。 

3、代理服务器的概念及其作用

3.1代理服务器的概念

代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。

缓存代理对于Web至关重要,尤其对于大型高负载Web站点。Nginx缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。

3.2代理服务器的主要作用

资源获取:代替客户端实现从原始服务器的资源获取;

加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用:

缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;

隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息。

3.3Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

Squid、Varinsh和Nginx都是代理服务器

什么是代理服务器:能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网。

区别:

  • Nginx本来是反向代理/web服务器,用了插件可以做做这个副业但是本身不支持特性挺多,只能缓存静态文件;

  • 从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成;

  • varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术;在内存的利用上,Varnisht比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的;只支持反向代理,功能少,缓存容量较小,CPU/IO/内存消耗搞,进程意外退出会丢失缓存数据。

  • squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境;既能支持正向代理也能支持反向代理,缓存数据也能支持持久化,模式多

工作中选择:要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。

4、squid代理的类型

  • 传统代理:适用于Internet,需在客户机指定代理服务器的地址和端口。

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

  • 反向代理:如果squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

三、Squid安装介绍

1、安装Squid服务

1.1关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

1.2编译安装squid

yum -y install gcc gcc-c++ make                     #安装依赖环境
tar zxvf squid-3.5.28.tar.gz -C /opt/               #将安装包解压到指定目录opt中
cd /opt/squid-3.5.28

./configure --prefix=/usr/local/squid \				#指定安装目录路径
--sysconfdir=/etc \									#指定配置文件路径
--enable-arp-acl \									#MAC地址管控,防止客户端使用IP欺骗
--enable-linux-netfilter \							#使用内核过滤
--enable-linux-tproxy \								#支持透明模式
--enable-async-io=100 \								#异步IO,提升存储性能
--enable-err-language="Simplify_Chinese" \			#错误信息的显示语言
--enable-underscore \								#允许URL中有下划线
--disable-poll \									#关闭默认使用 poll 模式
--enable-epoll \									#开启epoll模式提升性能
--enable-gnuregex	                                #使用GNU正则表达式
-------------------------------------------------------------------------
make && make install

ln -s /usr/local/squid/sbin/* /usr/local/sbin/   #创建软链接使系统直接能够识别squid命令
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/		 #此目录用于存放缓存文件

2、 修改 Squid 的配置文件

vim /etc/squid.conf
......
--56行--插入
http_access allow all	#放在 http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
http_access deny all
http_port 3128					#用来指定代理服务监听的地址和端口(默认的端口号为 3128)
--61行--插入
cache_effective_user squid		#添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid		#添加,指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid		#指定缓存文件目录

3、Squid 的运行控制

#检查配置文件语法是否正确
squid -k parse
#启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录
squid -z 					#-z 选项用来初始化缓存目录
squid						#启动 squid 服务

netstat -anpt | grep "squid"

 4、创建 Squid 服务脚本

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
-------------------------------------------------------------------------
#2345是默认自启动级别,如是-代表任何级别都不自启动;90是启动优先级,25是停止优先级,优先级范围是0-100,数字越大,优先级越低。
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on
chkconfig --list squid

四、构建传统代理服务器

Squid代理服务器:192.168.52.110/24

web服务器:192.168.52.100/24

客户机:192.168.52.30/24

1、代理服务器192.168.52.110

关闭防护墙与selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
----------------------------------------
vim /etc/squid.conf
--63行--插入
cache_mem 64 MB
#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4

reply_body_max_size 100 MB 
#允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制

maximum_object_size 4096 KB
#允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
----------------------------------------------------------------------------------
service squid restart     #重启服务


#生产环境中还需要修改防火墙规则
iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

#查看 Squid 访问日志的新增记录中的缓存命中情况
tail -f /usr/local/squid/var/logs/access.log
        TCP_MEM_HIT/200

#查看 Web 访问日志的新增记录
tail -f /var/log/httpd/access_log
在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。

关闭防火墙

编辑配置文件

重启服务

 修改防火墙规则

2、web服务器192.168.52.100

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install httpd -y
systemctl start httpd

安装apache网页

启动服务

3、客户机的代理配置

代理之前先使用浏览器访问并查看web服务器访问日志

查看web服务器访问日志

cd /etc/httpd/logs/
ls
tail -f access_log

对客户机进行代理

打开浏览器(尽量使用IE浏览器),工具-->Internet选项-->连接-->局域网设置-->开启代理服务器(地址:Squid服务器IP地址,端口:3128) 

配置代理后,再多次访问web服务器 

查看web服务器的访问日志

查看 Squid 访问日志的新增记录中的缓存命中情况

tail -f /usr/local/squid/var/logs/access.log 

五、构建透明代理服务器

Squid服务器:内网ens33:192.168.52.30,外网ens36:12.0.0.254

Web 服务器:12.0.0.100

客户机:192.168.52.30

 1、配置squid服务器

1.1添加网卡

设置——>添加——>网络适配器——>确定

ifconfig  #查看网卡名
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
------------------------------
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.254
NETMASK=255.255.255.0
------------------------------------
vim ifcfg-ens33
----------------------------
注释掉DNS与Gateway
----------------------
systemctl restart network

1.2 编辑Squid服务器配置文件

vim /etc/squid.conf
......
http_access allow all
http_access deny all
--60行--修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
http_port 192.168.52.110:3128 transparent

#重启squid服务
systemctl restart squid

#开启路由转发,实现本机中不同网段的地址转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

#修改防火墙规则
iptables -F
iptables -t nat -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.52.0/24 -p tcp --dport 80 -j REDIRECT --to 3128	#用于转发http协议
iptables -t nat -I PREROUTING -i ens33 -s 192.168.52.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	#用于转发https协议
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

 

2、Web服务器12.0.0.100配置 

2.1安装apache

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install httpd -y
systemctl start httpd

安装apache网页

启动服务

2.2修改web服务器的网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens33
--------------------------------------------------
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a3484a07-0b78-4735-9302-e04ba6617e8b
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.254
DNS1=8.8.8.8
--------------------------------------------------------
systemctl restart network
ifconfig

3、客户机192.168.52.30设置

3.1配置客户机的IP与网关

 3.2关闭代理服务器

3.3IE浏览器访问web服务器

3.4squid服务器查看访问日志

tail -f /usr/local/squid/var/logs/access.log

3.5查看 Web 访问日志的新增记录

显示的是由代理服务器的外网口代替客户机在访问

tail -f /var/log/httpd/access_log 

六、 ACL访问控制

在配置文件 squid.conf 中,ACL 访问控制通过以下两个步骤来实现:

(1)使用 acl 配置项定义需要控制的条件;

(2)通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1、定义访问控制列表

格式:
acl 列表名称 列表类型 列表内容 …
vim /etc/squid.conf
......
acl localhost src 192.168.52.110/32 				#源地址为 192.168.52.110
acl MYLAN src 192.168.52.0/24 192.168.1.0/24		#客户机网段
acl destinationhost dst 192.168.80.13/32			#目标地址为 192.168.52.120
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”为每个星期的英文首字母

编辑配置文件,定义控制访问列表 

acl src 192.168.52.30/32
http_access deny myhost

重启服务

systemctl restart squid

使用客户机访问web服务器

七、Squid 日志分析

#安装图像处理软件包
yum install -y pcre-devel gd gd-devel

mkdir /usr/local/sarg
tar zxvf sarg-2.3.7.tar.gz -C /opt/

cd /opt/sarg-2.3.7
./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \							#配置文件目录,默认是/usr/local/etc
--enable-extraprotection							#额外安全防护

----------------------------------------------------------------------------------------------------------
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install

vim /etc/sarg/sarg.conf
--7行--取消注释
access_log /usr/local/squid/var/logs/access.log		#指定访问日志文件
--25行--取消注释
title "Squid User Access Reports"					#网页标题
--120行--取消注释,修改
output_dir /var/www/html/sarg						#报告输出目录
--178行--取消注释
user_ip no											#使用用户名显示
--184行--取消注释,修改
topuser_sort_field connect reverse					#top排序中,指定连接次数采用降序排列,升序是normal
--190行--取消注释,修改
user_sort_field connect reverse						#对于用户访问记录,连接次数按降序排序
--206行--取消注释,修改
exclude_hosts /usr/local/sarg/noreport				#指定不计入排序的站点列表的文件
--257行--取消注释
overwrite_report no									#同名同日期的日志是否覆盖
--289行--取消注释,修改
mail_utility mailq.postfix							#发送邮件报告命令
--434行--取消注释,修改
charset UTF-8										#指定字符集UTF-8
--518行--取消注释
weekdays 0-6										#top排行的星期周期
--525行--取消注释
hours 0-23											#top排行的时间周期
--633行--取消注释
www_document_root /var/www/html						#指定网页根目录


#添加不计入站点文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport

ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
sarg --help

#验证
yum install httpd -y
systemctl start httpd

#运行
sarg				#启动一次记录


浏览器访问 http://192.168.80.10/sarg ,查看sarg报告网页。

#添加计划任务,执行每天生成报告
vim /usr/local/sarg/report.sh
#/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
#Get one week 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
find ./ -type d -a -name "$(env LANG=en_US.UTF-8 date -d "30 day ago" +%Y%b%d)-$(env LANG=en_US.UTF-8 date -d "29 day ago" +%Y%b%d)" | xargs rm -rf
exit 0


chmod +x /usr/local/sarg/report.sh

crontab -e
0 0 * * * /usr/local/sarg/report.sh

八、Squid 反向代理

如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

工作机制:

  • 缓存网页对象,减少重复请求
  • 将互联网请求轮训或按权重分配到内网Web服务器
  • 代理用户请求,避免用户直接访问Web服务器,提高安全

squid服务器:192.168.52.110
web1服务器:192.168.52.120
web2服务器:192.168.52.130
客户机:192.168.52.30

1、配置squid服务器

1.1修改配置文件

vim /etc/squid.conf
......
--60行--修改,插入
http_port 192.168.52.110:80 accel vhost vport
cache_peer 192.168.52.130 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.52.130 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.my.com

#表示对www.my.com的请求,squid向192.168.52.130和192.168.52.120的80端口发出请求

------------------------------------------------------------------------
http_port 80 accel vhost vport 
 ##squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据、要么向绑定的端口直接请求数据。
 accel :反向代理加速模式。
 vhost :支持域名或主机名来表示代理节点。
 vport :支持IP和端口来表示代理节点。
 ​
 parent :代表为父节点,上下关系,非平级关系。
 80 :代理内部web服务器的80端口。
 0 :没有使用icp(电信运营商),表示就一台squid服务器。
 no-query :不做查询操作,直接获取数据。
 originserver :指定是源服务器。
 round-robin :指定 squid 通过轮询方式将请求分发到其中一台父节点。
 max_conn :指定最大连接数。
 weight : 指定权重。
 name :设置别名。

1.2清空防火墙规则

iptables -F
iptables -t nat -F

1.3开启squid服务

systemctl stop httpd       #防止 httpd 服务使用的 80 端口号和 squid 反向代理配置的监听端口冲突
netstat -natp | grep 80
systemctl restart squid

2、web服务器配置

2.1web1服务器配置

关闭防火墙

systemctl stop firewalld.service 
setenforce 0

 安装apache并配置网页主页

yum install -y httpd
systemctl start httpd
echo "this is test01" >> /var/www/html/index.html
systemctl restart httpd

2.2web2服务器配置

关闭防火墙

systemctl stop firewalld.service 
setenforce 0

 安装apache并配置网页主页

yum install -y httpd
systemctl start httpd
echo "this is test02" >> /var/www/html/index.html
systemctl restart httpd

3、客户机的域名映射配置

3.1修改 C:\Windows\System32\drivers\etc\hosts 文件

192.168.52.110 www.my.com

3.2浏览器不开启代理访问 http://www.my.com

3.3查看日志

tail -f /usr/local/squid/var/logs/access.log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值