Squid传统、透明代理服务配置、日志分析、反向代理、ACL访问控制(图文详解)

目录

一、Squid代理服务器

二、安装 Squid 服务

 1、编译安装 Squid

 2、修改 Squid 的配置文件

 3、Squid 的运行控制

 4、创建 Squid 服务脚本

 三、构建传统代理服务器

环境配置

 四、构建透明代理服务器

环境配置

 五、ACL访问控制

环境配置

 六、Squid 日志分析

七、Squid 反向代理

环境配置 


一、Squid代理服务器

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

代理的工作机制

1、代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。
2、将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。

Squid 代理的类型

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

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

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

二、安装 Squid 服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

 1、编译安装 Squid

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 \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex

 

make && make install

 

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

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

 三、构建传统代理服务器

环境配置

主机操作系统IP地址软件、安装包、工具
Squid-ServerCentOS7192.168.184.10squid-3.5.28.tar.gz
Web1CentOS7192.168.184.20httpd
客户机Windows192.168.184.100——

 Squid-Server(192.168.184.10)

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
iptables -L INPUT

 客户机的代理配置(192.168.184.100)

1、配置客户端IP地址

 2、打开浏览器,配置代理功能

 

 

 Web1(192.168.184.20)

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

 

 检测

在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。

http://192.168.184.20

 查看Web1访问日志的新增记录

tail -f /var/log/httpd/access_log

 四、构建透明代理服务器

环境配置

主机操作系统IP地址服务、安装包、工具
Squid-ServerCentOS7ens33:192.168.184.10 、 ens37:12.0.0.1squid-3.5.28.tar.gz
Web1CentOS712.0.0.12httpd
客户端Windows192.168.184.100——

 Web1(12.0.0.12)

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

 

 

yum -y install httpd
systemctl restart httpd.service 

 Squid服务器配置(ens33、ens37)

关机,添加一块网卡,开机,ifconfig查看新增网卡名称,编辑网卡配置文件

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens37
vim ifcfg-ens33

 

vim ifcfg-ens37

 

systemctl restart network
ifconfig 

 60行修改添加提供内网服务的IP地址,和支持透明代理选项 transparent

vim /etc/squid.conf
......
http_access allow all
http_access deny all

http_port 192.168.184.10:3128 transparent
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.184.0/24 -p tcp --dport 80 -j REDIRECT --to 3128	
iptables -t nat -I PREROUTING -i ens33 -s 192.168.184.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

 客户机测试(192.168.184.100)

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

 

 

 


查看 Squid 访问日志的新增记录

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

Squid代理服务器则是检测到客户机访问目标网站

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

tail -f /var/log/httpd/access_log

可以看到是代理服务器外网口12.0.0.1访问的12.0.0.12

 五、ACL访问控制

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

(1)使用 acl 配置项定义需要控制的条件;
(2)通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1.定义访问控制列表
格式:acl 列表名称 列表类型 列表内容 …

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

环境配置

主机操作系统IP地址软件、安装包、工具
Squid-ServerCentOS7192.168.184.10squid-3.5.28.tar.gz
Web1CentOS7192.168.184.20httpd
Web2CentOS7192.168.184.30httpd
客户机Windows192.168.184.100——

 Squid-Server(192.168.184.10)

iptables -F
iptables -t nat -F

vim /dest.list
192.168.184.20

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

http_port 3128

systemctl restart squid

 

 

 Web1 (192.168.184.20)、Web2 (192.168.184.30)

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

浏览器(192.168.184.100)访问Web服务器 http://192.168.184.20 ,显示被访问被拒绝,访问http://192.168.184.30则可以访问。

客户机浏览器打开代理功能,代理服务器192.168.184.10,端口3128

 

 六、Squid 日志分析

#安装图像处理软件包
#需要使用在线源,出现报错,将网卡配置文件中的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

 

 

 

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/squid-reports						#报告输出目录

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

 运行

sarg				#启动一次记录

验证

yum install httpd -y
systemctl start httpd

 浏览器访问 http://192.168.184.10/squid-reports ,查看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/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 反向代理

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

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

环境配置 

主机操作系统IP地址软件、安装包、工具
Squid-ServerCentOS7192.168.184.10squid-3.5.28.tar.gz
Web1CentOS7192.168.184.20httpd
Web2CentOS7192.168.184.30httpd
客户机Windows192.168.184.100——

 Squid-Server(192.168.184.10)

iptables -F				#清空防火墙规则
iptables -t nat -F

vim /etc/squid.conf
......

60行修改,插入

http_port 192.168.184.10:80 accel vhost vport
cache_peer 192.168.184.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.184.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.lic.com

 

 http_port 80 accel vhost vport #squid从一个缓存变成了一个Web服务器使用加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据要么向绑定的端口直接请求数据。

 

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

 

systemctl stop httpd
systemctl restart squid

 web1、web2

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

web1(192.168.184.20)

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

 web2(192.168.184.30)

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

 客户机(192.168.184.100)的域名映射

修改 C:\Windows\System32\drivers\etc\hosts 文件
192.168.184.10 www.lic.com

 客户机的代理配置

 浏览器访问 http://www.lic.com

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
配置Squid代理服务器,您可以按照以下步骤进行操作: 1. 安装Squid软件包:使用适合您操作系统的软件包管理器(如apt、yum或brew)安装Squid软件包。 2. 配置Squid配置文件:打开Squid配置文件,该文件通常位于`/etc/squid/squid.conf`。您可以使用文本编辑器打开并进行编辑。 3. 定义访问控制列表(ACL):在配置文件中定义ACL控制谁可以访问代理服务器。例如,您可以为特定IP地址、子网或域名设置允许或拒绝访问。 示例: ``` acl internal_network src 192.168.0.0/24 http_access allow internal_network ``` 4. 配置代理端口:根据需要配置代理服务器监听的端口。默认情况下,Squid监听3128端口。 示例: ``` http_port 3128 ``` 5. 配置缓存:您可以定义代理服务器的缓存行为,例如缓存大小、缓存目录等。 示例: ``` cache_dir ufs /var/spool/squid 10000 16 256 maximum_object_size 128 MB ``` 6. 配置其他选项:根据需要配置其他选项,如日志记录、认证、SSL等。 7. 保存并关闭配置文件。 8. 启动Squid服务:启动Squid服务以使配置生效。使用适合您操作系统的命令。 例如,对于systemd系统,执行: ``` systemctl start squid ``` 或者对于SysVinit系统,执行: ``` service squid start ``` 这些是基本的Squid代理服务配置步骤。您可以根据您的需求进行进一步的配置和定制化。请确保在进行任何更改之前备份原始配置文件,并确保您的配置符合安全和隐私要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值