4

Squid代理服务器应用

 2 years ago
source link: https://blog.51cto.com/u_15381682/5066429
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Squid代理服务器应用

一、Squid 代理服务器

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

缓存代理概述

Web代理的工作机制

●缓存网页对象,减少重复请求
Squid代理服务器应用_Squid 日志分析
代理的基本类型
传统代理:适用于Internet, 需明确指定服务端
透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用
Squid代理服务器应用_反向代理网站加速_02
使用代理的好处
●提高Web访问速度
●隐藏客户机的真实IP地址

二、安装 Squid 服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

Squid代理服务器应用_反向代理网站加速_03

1.编译安装 Squid

yum -y install gcc gcc-c++ make
cd /opt
tar zxvf squid-3.5.28.tar.gz
cd /opt/squid-3.5.28

./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--disable-poll \
--enable-epoll \
--enable-gnuregex

make && make install

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

Squid代理服务器应用_Squid代理服务器应用_04
Squid代理服务器应用_反向代理网站加速_05

Squid代理服务器应用_Squid代理服务器应用_06

ln -s /usr/local/squid/sbin/* /usr/local/sbin/

useradd -M -s /sbin/nologin squid

chown -R squid:squid /usr/local/squid/var/
#/usr/local/squid/var/ 此目录是用于存放缓存文件

Squid代理服务器应用_Squid代理服务器应用_07

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	#指定缓存文件目录

Squid代理服务器应用_Squid代理服务器应用_08

3、Squid 的运行控制

  • 检查配置文件语法是否正确
squid -k parse

Squid代理服务器应用_透明代理_09

  • 启动 Squid,第一次启动squid服务时,会自动初始化缓存目录
squid -z 					#-z 选项用来初始化缓存目录
squid						#启动 squid 服务 ;如果是第一次启动会自动初始化

netstat -anpt | grep "squid"  #查看squid服务是否开启

Squid代理服务器应用_Squid代理服务器应用_10

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,数字越大,优先级越低。
Squid代理服务器应用_Squid代理服务器应用_11

chmod +x /etc/init.d/squid      #给刚才编写的启动脚本执行的权限
chkconfig --add squid           #将服务加入chkconfig管理
chkconfig --level 35 squid on   #在级别3、5上自启[级别3:字符界面 级别5:视图界面]

chkconfig --list squid          #查看squid服务在哪些级别中自启

Squid代理服务器应用_Squid代理服务器应用_12

三、构建传统代理服务器

环境配置

主机 操作系统 IP地址 软件、安装包、工具

Squid-Server CentOS7 192.168.38.75 squid-3.5.28.tar.gz

Web-Server CentOS7 192.168.38.76 httpd

客户机 Windows 10 192.168.38.129

Squid-Server(192.168.38.75)

1、首先先编译安装squid,然后修改配置文件

vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
#---------63行插入-----------------------------------------------
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB

#---------添加内容解释------------------------------------------
cache_mem 64 MB				 #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB	 #允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
maximum_object_size 4096 KB	 #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
#-------------------------------------------------------------------

service squid restart             
#或systemctl restart squid       #重启squid服务

Squid代理服务器应用_透明代理_13
Squid代理服务器应用_透明代理_14
2、生产环境中还需要修改防火墙规则

iptables -F       #清空iptables的规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT    #允许所有通过3128端口的tcp协议的入站数据包通过
iptables -L INPUT  #列出入站数据链里的所有规则

Squid代理服务器应用_反向代理网站加速_15
Web1(192.168.38.76)

systemctl stop firewalld.service
setenforce 0
yum -y install httpd
systemctl start httpd
netstat -natp | grep 80

Squid代理服务器应用_Squid 日志分析_16
Squid代理服务器应用_Squid代理服务器应用_17
客户机(192.168.38.129)

打开浏览器,配置代理功能
流程:打开浏览器,工具–>Internet选项–>连接–>局域网设置–>开启代理服务器(地址:Squid服务器IP地址,端口:3128)
Squid代理服务器应用_反向代理网站加速_18
Squid代理服务器应用_ACL访问控制_19
验证结果
Squid-Server(192.168.38.75)

tail -f /usr/local/squid/var/logs/access.log   #查看squid 访问日志的新增记录

Squid代理服务器应用_反向代理网站加速_20
Web1(192.168.38.76)

tail -f /var/log/httpd/access_log   #查看Web1访问日志的新增记录

Squid代理服务器应用_反向代理网站加速_21
客户机(192.168.38.129)
在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。

http://192.168.38.76

Squid代理服务器应用_反向代理网站加速_22
Squid代理服务器应用_Squid代理服务器应用_23
Squid代理服务器应用_Squid代理服务器应用_24

四、构建透明代理服务器

环境配置

主机 操作系统 IP地址 服务、安装包、工具

Squid-Server CentOS7 ens33:192.168.38.75 ens37:12.0.0.1 squid-3.5.28.tar.gz

Web1 CentOS7 12.0.0.12 httpd

客户端 Windows 192.168.38.129

Squid服务器配置(ens33:192.168.38.75、ens37:12.0.0.1)

1、关机,添加网卡,注意两个网卡设置在不同的虚拟网卡上
Squid代理服务器应用_Squid代理服务器应用_25
2、然后将双网卡配置好对应的IP地址和子网掩码

cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33
IPADDR=192.168.163.10
NETMASK=255.255.255.0

cp ifcfg-ens33 ifcfg-ens37
vim ifcfg-ens37
IPADDR=12.0.0.1
NETMASK=255.255.255.0

systemctl restart network
ifconfig 

Squid代理服务器应用_ACL访问控制_26
Squid代理服务器应用_ACL访问控制_27
Squid代理服务器应用_透明代理_28
3、squid服务shangmian 已安装好了(安装squid服务前要设置好yum源)我就直接修改配置文件

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

systemctl restart squid
netstat -natp | grep 3128

Squid代理服务器应用_ACL访问控制_29
Squid代理服务器应用_反向代理网站加速_30
4、开启路由转发,实现本机中不同网段的地址转发

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

Squid代理服务器应用_ACL访问控制_31
5、修改防火墙规则

iptables -F
iptables -t nat -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.38.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.38.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

Squid代理服务器应用_反向代理网站加速_32
Web1(12.0.0.12)

systemctl stop firewalld.service
setenforce 0
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
ifconfig

Squid代理服务器应用_反向代理网站加速_33
Squid代理服务器应用_Squid 日志分析_34

yum -y install httpd
systemctl restart httpd.service 

Squid代理服务器应用_反向代理网站加速_35
Squid代理服务器应用_反向代理网站加速_36
客户机测试(192.168.163.100)

1、设置ip地址
Squid代理服务器应用_ACL访问控制_37
注意:如果使用刚才实验的主机,需要关闭客户机的浏览器设置的代理服务器的功能
Squid代理服务器应用_ACL访问控制_38
2、访问  http://12.0.0.12
Squid代理服务器应用_反向代理网站加速_39
查看 Squid 访问日志的新增记录

tail -f /usr/local/squid/var/logs/access.log
#Squid代理服务器上的日志可以检测到客户机ip以及访问的目标网站ip

Squid代理服务器应用_透明代理_40
查看 Web 访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问

tail -f /var/log/httpd/access_log
#从日志内容可以看出是代理服务器外网口12.0.0.1访问web服务器12.0.0.12

Squid代理服务器应用_Squid 日志分析_41

五、ACL访问控制

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

  • 步骤一:使用 acl 配置项定义需要控制的条件;
  • 步骤二:通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1.访问控制列表格式

格式:acl 列表名称 列表类型 列表内容 …

列表类型 定义的列表内容

src 源地址

dst 目标地址

maxconn 最大并发连接

port 目标地址

dstdomain 目标域

url_regex 匹配请求URL的任何部分

urlpath_regex 与url_regex非常相似(不包含传输协议和主机名)

time 访问时间

例如

vim /etc/squid.conf
......
acl localhost src 192.168.163.10/32     #源地址为 192.168.163.10
acl MYLAN src 192.168.163.0/24          #客户机网段
acl destionhost dst 192.168.163.20/32   #目标地址为 192.168.163.20
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”为每个星期的英文首字母

2.实操

环境配置(直接使用之前实验的实例即可)

主机 操作系统 IP地址 软件、安装包、工具

Squid-Server CentOS7 ens33:192.168.38.75 ens37:12.0.0.1 squid-3.5.28.tar.gz

Web-Server CentOS7 12.0.0.12 httpd

客户机 Windows 7 192.168.38.128

客户机 Windows 7 192.168.38.129

Squid-Server(192.168.38.75)

vim /etc/local.list
192.168.38.129

Squid代理服务器应用_Squid 日志分析_42

vim /etc/squid.conf
......
acl localhosttest src  "/etc/local.list"			#调用指定文件中的列表内容
......
http_access deny localhosttest				#注意,如果是拒绝列表,需要放在http_access allow all前面


systemctl restart squid
netstat -natp |grep squid
#或netstat -natp |grep 3128

Squid代理服务器应用_ACL访问控制_43
Squid代理服务器应用_Squid代理服务器应用_44
Web-Server(12.0.0.12)
继续使用上一个实验的即可

systemctl stop firewalld.service 
setenforce 0
yum -y install httpd
systemctl start httpd

浏览器(192.168.38.129)访问Web服务器 http://12.0.0.12
Squid代理服务器应用_反向代理网站加速_45
浏览器(192.168.38.128)访问Web服务器 http://12.0.0.12

访问正常
Squid代理服务器应用_透明代理_46

六、Squid 日志分析

1、安装图像处理软件包

  • 出现报错,将网卡配置文件中的dns和网关修改回原样
  • 安装在线源
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 --enable-extraprotection

make && make install

#---------./configure中模块解释---------------------------------------
--prefix=/usr/local/sarg 
--sysconfdir=/etc/sarg   #配置文件目录,默认是/usr/local/etc
--enable-extraprotection #额外安全防护
#------------------------------------------------------------------

Squid代理服务器应用_ACL访问控制_47

Squid代理服务器应用_Squid 日志分析_48
Squid代理服务器应用_反向代理网站加速_49

Squid代理服务器应用_Squid代理服务器应用_50

Squid代理服务器应用_Squid代理服务器应用_51

Squid代理服务器应用_Squid代理服务器应用_52

Squid代理服务器应用_ACL访问控制_53

Squid代理服务器应用_反向代理网站加速_54

Squid代理服务器应用_ACL访问控制_55

Squid代理服务器应用_反向代理网站加速_56

Squid代理服务器应用_Squid代理服务器应用_57

Squid代理服务器应用_Squid 日志分析_58
Squid代理服务器应用_反向代理网站加速_59

touch /usr/local/sarg/noreport   #创建不计入站点文件

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

Squid代理服务器应用_Squid 日志分析_60
3、运行
Squid代理服务器应用_Squid代理服务器应用_61
4、验证

  • 此时安装web服务实在squid服务器上,其他客户端机器无法访问测试的页面
yum install httpd -y
systemctl start httpd

Squid代理服务器应用_Squid代理服务器应用_62
Squid代理服务器应用_Squid代理服务器应用_63

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/squid-reports -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0

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

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

七、反向代理网站加速

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

工作机制
●缓存网页对象,减少重复请求
●将互联网请求轮训或按权重分配到内网Web服务器
●代理用户请求,避免用户直接访问Web服务器,提高安全
Squid代理服务器应用_Squid 日志分析_65
环境配置

主机 操作系统 IP地址 软件、安装包、工具

Squid-Server CentOS7 192.168.38.75 squid-3.5.28.tar.gz

Web1-Server CentOS7 192.168.38.76 httpd

Web2-Server CentOS7 192.168.38.38 httpd

客户机 Windows10 192.168.38.128

Squid-Server(192.168.38.75)

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


systemctl stop httpd
systemctl restart squid
#---------解释-----------------------------------------------------
http_port 80 accel vhost vport 
#squid从一个缓存变成了一个Web服务器使用加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据要么向绑定的端口直接请求数据。
accel:反向代理加速模式
vhost:支持域名或主机名来表示代理节点
vport:支持ip和端口来表示代理节点

parent:代表为父节点
80:HTTP_PORT
0:ICP_PORT
no-query:不做查询操作,直接获取数据
originserver:指定是源服务器
round-robin:指定 squid 通过轮询方式将请求分发到其中一台父节点
max_conn:指定最大连接数
weight:指定权重
name:设置别名

Squid代理服务器应用_反向代理网站加速_66

Squid代理服务器应用_ACL访问控制_67
web1、web2

systemctl stop firewalld.service 
setenforce 0
yum install -y httpd
systemctl start httpd

Squid代理服务器应用_反向代理网站加速_68
Squid代理服务器应用_Squid代理服务器应用_69
web1(192.168.38.76)

echo "this is web1" >> /var/www/html/index.html

Squid代理服务器应用_Squid代理服务器应用_70
web1(192.168.38.38)

echo "this is web2" >> /var/www/html/index.html

Squid代理服务器应用_反向代理网站加速_71

客户机(192.168.38.129)

1、修改客户端的域名映射
如果提示权限不够,需要修改hosts文件权限
右击hosts文件,属性–>安全–>编辑–>组或用户名中的(Users)–>选择允许权限–>确定,图示在下面

#修改 C:\Windows\System32\drivers\etc\hosts 文件
192.168.38.75 www.test.com

Squid代理服务器应用_反向代理网站加速_72


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK