squid代理及部署方法

本文详细介绍了Squid代理服务器的安装、配置及使用,包括传统代理、透明代理的设置,以及访问控制和日志分析。通过案例展示了如何在Linux环境中配置Squid,以提高Web访问速度、隐藏IP地址,并通过 acl 访问控制管理网络流量。此外,还探讨了Squid的反向代理功能,用于负载均衡和内容分发。
摘要由CSDN通过智能技术生成

目录

一.squid概述

二.代理的基本类型

三.使用代理的好处

四.案例

1.squid代理配置(传统代理)

2.Web服务器配置

3.客户机测试

透明代理

Squid服务器配置

修改配置文件

设置防火墙规则

客户机测试

查看日志文件,看访问的IP

 

acl访问控制

修改squid配置文件

Squid日志分析

Squid反向代理


一.squid概述

Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。squid的官方网站为http://www.squid-cache.org

  • 代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全。
  • 可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
  • 可以用在局域网中,使局域网用户通过代理上网。
  • 可以将数据缓存在内存中,同时也缓存DNS查询的结果,还支持非模块化的DNS查询,对失败的请求进行消极缓存。
  • Squid支持SSL,支持ACL访问控制。

 

二.代理的基本类型

  • 传统代理:适用于Internet,需明确指定服务端

  •  

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

     

三.使用代理的好处

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

四.案例

1.squid代理配置(传统代理)

[root@squid ~]# yum -y install gcc gcc-c++ make
[root@squid ~]# tar xf squid-3.5.23.tar.gz -C /opt/
[root@squid ~]# cd /opt/squid-3.5.23/
[root@squid squid-3.5.23]# ./configure --prefix=/usr/local/squid \
> --sysconfdir=/etc \ ##指定配置文件位置
> --enable-arp-acl \  ##支持acl访问控制列表
> --enable-linux-netfilter \ ##打开网络筛选
> --enable-linux-tproxy \  ##支持透明代理
> --enable-async-io=100 \  ##io优化
> --enable-err-language="Simplify_Chinese" \ ##报错显示简体中文
> --enable-underscore \ ##支持下划线
> --enable-poll \ ##默认使用poll模式,开启epoll模式时提升性能
> --enable-gnuregex   ##支持正则表达式

​
[root@squid squid-3.5.23]# make && make install

​

优化路径

[root@squid squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@squid squid-3.5.23]# useradd -M -s /sbin/nologin squid
[root@squid squid-3.5.23]# chown -R squid.squid /usr/local/squid/var/

修改配置文件

[root@squid ~]# vi /etc/squid.conf

cache_effective_user squid   #添加   指定程序用户
      
cache_effective_group squid  #添加   指定账号基本组
[root@squid ~]# squid -k parse #检查配置文件语法
[root@squid ~]# squid -z  #初始化缓存目录
[root@squid ~]# squid     #启动服务
[root@squid ~]# netstat -anpt | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      47447/(squid-1)   

添加服务到service管理

[root@squid ~]# vi /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
[root@squid ~]# chmod +x /etc/init.d/squid 
[root@squid ~]# chkconfig --add squid
[root@squid ~]# chkconfig --level 35 squid on 
[root@squid ~]# systemctl start squid
[root@squid ~]# netstat -anpt |  grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      47447/(squid-1)     

配置传统代理

[root@Squid ~]# vi /etc/squid.conf
http_access allow all
http_access deny all   #在这行上面添加如上配置 allow all
http_port 3128      #squid的工作端口
cache_mem 64 MB              ###指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB     ###允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB   ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
[root@squid ~]# iptables -F
[root@squid ~]# setenforce 0
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# systemctl restart squid.service 

2.Web服务器配置

安装httpd,并设置默认网页内容

[root@web ~]# systemctl stop firewalld.service 
[root@web ~]# setenforce 0
[root@web ~]# yum -y install httpd
[root@web ~]# echo "web1" > /var/www/html/index.html

3.客户机测试

查看日志文件,看访问的IP

在网页上进行代理配置并测试

 

在访问网页查看ip

透明代理

在传统代理的基础上修改下网络配置:客户机的网关设置为squid的VMnet1地址;给squid添加一张网卡VMnet8;修改web的网卡为VMnet8,各IP如上图;关闭客户机刚刚开启的手动代理。

Squid服务器配置

[root@squid ~]# vi /etc/sysctl.conf 

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1 //开启路由转发功能
[root@squid ~]# sysctl -p
net.ipv4.ip_forward = 1

修改配置文件

[root@squid ~]# vi /etc/squid.conf

http_port 192.168.100.11:3128 transparent 添加squid地址,开启透明代理

[root@squid ~]# systemctl restart squid.service 
[root@web ~]# route add -net 192.168.100.0/24 gw 192.168.174.51 //给web添加一条指向客户机的默认路由,实现两个不同网段的互通

设置防火墙规则

[root@squid ~]# iptables -F
[root@squid ~]# iptables -t  nat -F
[root@squid ~]# iptables -t  nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t  nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

客户机测试

查看日志文件,看访问的IP

 

 

acl访问控制

修改squid配置文件

 

[root@squid ~]# vi /etc/squid.conf

acl host     src 192.168.100.12/32     #添加

http_access deny host

[root@squid ~]# systemctl restart squid.service 

 

Squid日志分析

安装环境

[root@squid ~]# yum -y install gd gd-devel httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: 
软件包 gd-2.0.35-26.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@squid ~]# mkdir /usr/local/sarg
[root@squid ~]# tar xf sarg-2.3.7.tar.gz -C /opt
[root@squid ~]# cd /opt/sarg-2.3.7/
[root@squid sarg-2.3.7]# ./configure \
> --prefix=/usr/local/sarg \
> --enable-extraprotection
[root@squid sarg-2.3.7]# make && make install

修改配置文件

[root@squid ~]# vi /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          //使用用户名显示

206/ exclude_hosts /usr/local/sarg/noreport   //不计入排序的站点列表文件

184/ topuser_sort_field connect reverse   //top排序中有连接次数、访问字节、降序排列 升序是normal

(注释掉)190/ #  user_sort_field reverse    //用户访问记录 连接次数、访问字节按降序排序

257/ overwrite_report no   //同名日志是否覆盖

289/ mail_utility mailq.postfix   //发送邮件报告命令

434/ charset UTF-8   //使用字符集

518/ weekdays 0-6   //top排行的星期周期

525/ hours 0-23   //top排行的时间周期

633/ www_document_root /var/www/html  //网页根目录

添加不计入站点文件,添加的域名将不被显示在排序中

[root@Squid ~]# touch /usr/local/sarg/noreport

优化启动项并启动服务 做周期性计划任务crontab使其每天生成报告

[root@squid sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@squid sarg-2.3.7]# sarg
SARG: 纪录在文件: 6, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Nov11-2020Nov11
[root@squid ~]# sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
[root@squid ~]# cd /var/www/html/squid-reports/
[root@squid squid-reports]# ll
总用量 8
drwxr-xr-x. 3 root root  180 11月 11 19:06 2020Nov10-2020Nov11
drwxr-xr-x. 3 root root  180 11月 11 19:02 2020Nov11-2020Nov11
drwxr-xr-x. 2 root root   92 11月 11 19:02 images
-rw-r--r--. 1 root root 4680 11月 11 19:06 index.html
[root@squid ~]# crontab -e

30 22 * * * sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $ (date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
~                    

 

Squid反向代理

在透明模式的基础上进行反向代理

因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务

 

web1配置

[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "<h1>this is web1</h1>" > /var/www/html/index.html
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      50552/httpd

[root@web1 ~]# route add -net 192.168.100.0/24 gw 192.168.174.51 ###添加静态路由

web2配置

[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo "<h1>this is web2</h1>" > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -anpt | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      50552/httpd

[root@web2 ~]# route add -net 192.168.100.0/24 gw 192.168.174.51 ###添加静态路由

squid配置

[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# vi /etc/squid.conf
# Squid normally listens to port 3128
# 关闭透明代理
#http_port 192.168.100.11:3128 transparent  #透明代理
http_port 192.168.174.51:80 accel vhost vport #squid外网口IP,用作反向代理服务
cache_peer 192.168.174.52 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 #web服务器主机名
cache_peer 192.168.174.53 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com  #域名绑定
[root@squid ~]# systemctl restart squid

测试

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moon-01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值