其他分享
首页 > 其他分享> > Squid代理服务器应用

Squid代理服务器应用

作者:互联网

一、Squid代理服务器

1、功能

2、代理的工作机制

3、代理服务器的概念

4、代理服务器的作用

5、Squid代理的类型

二、搭建Squid服务

1、编译安装Squid

2、修改squid的配置文件

3、squid的运行控制

4、创建squid服务脚本

三、构建传统代理服务器

1、修改squid的配置文件

2、修改防火墙规则

3、web服务器(192.168.142.10)

4、客户机的代理配置

5、查看squid访问日志的新增记录

6、查看web访问日志的新增记录

四、构建透明代理服务器

1、squid配置文件修改

2、开启路由转发

3、修改防火墙规则

4、web服务器配置(12.0.0.12)

5、客户机访问

6、查看squid访问日志的新增记录

7、查看web访问日志的新增记录

五、ACL访问控制

1、步骤

2、配置格式

3、定义访问控制列表

4、启动对象列表管理

六、Squid日志分析

1、squid日志编译安装

2、修改sarg配置文件

3、运行sarg

4、查看sarg报告网页

5、添加计划任务,执行每天生成报告

七、反向代理

1、反向代理概述

2、反向代理工作机制

3、反向代理设置

 

一、Squid代理服务器

1、功能

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

2、代理的工作机制

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

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

3、代理服务器的概念

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

4、代理服务器的作用

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

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

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

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

5、Squid代理的类型

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

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

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

二、搭建Squid服务

web服务器:192.168.142.10
squid服务器:192.168.142.20
客户机:192.168.142.6

1、编译安装Squid

systemctl stop firewalld 
setenforce 0

yum -y install gcc gcc-c++ make
tar zxvf squid-3.5.28.tar.gz -C /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 -j2 && 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 -natp | 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

三、构建传统代理服务器

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				
#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的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

#修改防火墙规则
iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

2、修改防火墙规则

iptables -F	#清空规则链
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

3、web服务器(192.168.142.10)

systemctl stop firewalld.service
setenforce 0

yum -y install httpd
systemctl start httpd 
netstat -natp | grep 80

4、客户机的代理配置

打开浏览器,工具-->internet选项-->连接-->局域网设置-->开启代理服务器(地址:squid服务器IP地址,端口:3128)

5、查看squid访问日志的新增记录

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

6、查看web访问日志的新增记录

tail -f /var/log/httpd/access.log
#浏览器输入web服务器ip地址访问,查看web服务器访问日志,显示的是由代理服务器替客户机在访问

四、构建透明代理服务器

squid服务器:双网卡,内网ens33:192.168.80.11
            外网ens36:12.0.0.1
web服务器:12.0.0.12
客户机:192.168.80.16

#添加双网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
systemctl restart network

1、squid配置文件修改

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

systemctl restart squid

2、开启路由转发

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

3、修改防火墙规则

#先清空之前的规则
iptables -F
iptables -t nat -F

iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #用于转发http协议

iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #用于转发https协议

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT 

4、web服务器配置(12.0.0.12)

yum -y install httpd
systemctl start httpd

关闭客户机的浏览器之前设置的代理服务器的功能后访问http://12.0.0.12

5、客户机访问

6、查看squid访问日志的新增记录

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

7、查看web访问日志的新增记录

tail -f /var/log/httpd/access.log

五、ACL访问控制

1、步骤

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

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

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

2、配置格式

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

列表名称:名称自定义,相当于给acl起个名字

列表类型:必须使用squid预定义的值,对应不同类别的控制条件

列表内容:是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格为分隔,为“或”的关系)

3、定义访问控制列表

vim /etc/squid.conf
.......
acl localhost src 192.168.80.11/32             #源地址为192.168.80.11
acl MYLAN src 192.168.80.0/24    				#客户机网段
acl destinationhost dst 192.168.80.12/32      #目标地址为192.168.184.12 
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"为每个星期的英文首字母

http_access deny (或allow) 列表名称

4、启动对象列表管理

#启动对象列表管理
mkdir /etc/squid
vim /etc/squid/aaa.list
192.168.80.11        #Squid服务器IP
192.168.80.0/24     #任意需要的网段

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

systemctl restart squid

六、Squid日志分析

1、squid日志编译安装

#安装图像处理软件包
yum -y install 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-extraprotecton		#额外安全防护

make && make install

2、修改sarg配置文件

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	#指定网页根目录

3、运行sarg

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

#创建软链接
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/

#获取帮助
sarg --help

#运行
sarg	#启动一次记录

4、查看sarg报告网页

yum -y install httpd
systemctl start httpd

浏览器访问http://192.168.80.11/sarg 查看sarg报告网页

5、添加计划任务,执行每天生成报告

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
exit 0 

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

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

七、反向代理

1、反向代理概述

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

2、反向代理工作机制

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

(2)讲互联网请求轮询或按权重分配到内网web服务器

(3)代理用户请求,避免用户直接访问web服务器,提高安全

3、反向代理设置

(1)实验环境

squid服务器:192.168.80.11
web服务器1:192.168.80.12
web服务器2:192.168.80.13
客户机:192.168.80.16

(2)squid服务器修改(192.168.80.11)

vim /etc/squid.conf
......
#60行修改
http_port 192.168.80.11:80 accel vhost vport
cache_peer 192.168.80.12 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.80.13 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.123.com
#表示对www.123.com的请求,squid向192.168.80.12和192.168.80.13的80端口发出请求

#清空之前的iptables规则
iptables -F
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

 

http_port 80 accle 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:设置别名

(3)web服务器配置(192.168.80.12/13)

yum -y install httpd
systemctl restart httpd

#web1服务器
echo '111111' > /var/www/html/index.html

#web2服务器
echo '222222' > /var/www/html/index.html

(4)客户机配置

#添加域名映射
cmd
notepad hosts
192.168.80.11 www.123.com

#开启反向代理

  

标签:squid,--,Squid,sarg,192.168,代理服务器,应用,服务器
来源: https://www.cnblogs.com/JC123/p/15315848.html