• 什么是Squid

Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器。 并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。

  • 代理的基本类型
  • 传统代理:即为普通的代理服务,一般以提供HTTP、ftp代理为主,需要客户端在浏览器中指定代理服务器地址和端口(默认为3128)。

  • 透明代理:客户不需要指定代理服务器的地址和端口,而是通过网关,由防火墙的重定向策略将用户的请求交给代理服务器处理;域名解析有客户机完成

  • 安装及运行控制

  • 编译安装squid
  • 编译安装时目录设置为/usr/local/squid

    # tar zxvf squid-3.5.28.tar.gz -C /opt/
    # yum install gcc gcc-c++ cmake -y
    # 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           //异步I/O,提升存储性能
    --enable-err-language="Simplify_Chinese"      //错误信息的显示语言
    --enable-underscore             //允许URL中有下划线
    --enable-poll                   //使用Poll() 模式,提升性能
    --enable-gnuregex               // 使用GUN正则表达式
    
    # 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/
  • Squid配置文件

    # vim /etc/squid.conf  (添加下面3行)
        cache_effective_user squid        #添加   指定程序用户
        cache_effective_group squid       #添加   指定账号基本组
        coredump_dir /usr/local/squid/var/cache/squid

    构建Squid传统代理及透明代理

    # squid -k parse   //检查配置文件语法
    # squid -z   //第一次启动 先初始化缓存目录
    # squid    //启动服务
    # netstat -anpt | grep "squid"  

    构建Squid传统代理及透明代理

  • 使用Squid服务脚本
  • 为了更方便控制服务的 启动、停止、重载

    # cd /etc/init.d/
    # vim 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
    
    # chmod +x squid
    # chkconfig --add squid
    # chkconfig --level 35 squid on
  • 构建传统代理
主机 IP 主要软件服务
Squid代理服务器 192.168.100.20 squid
Web服务器 192.168.100.30 httpd
windows7 192.168.100.50 IE浏览器

如图:
构建Squid传统代理及透明代理

  • web服务器
  • 关闭防火墙
  • 安装httpd服务并且开启

    # systemctl stop firewalld.service
    # setenforce 0
    # yum install -y httpd
    # systemctl start httpd
  • squid上配置文件

        # vim /etc/squid.conf
        http_access allow all
        http_access deny all
        http_port 3128
        cache_mem 64 MB                   #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
        reply_body_max_size 10 MB         #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
        maximum_object_size 4096 KB       #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
    
        # service squid restart

构建Squid传统代理及透明代理

  • 添加防火墙策略

    # iptables -F
    # setenforce 0
    # iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
  • 客户机的代理设置
  • Internet选项---》连接----》局域网设置----ip:squid服务器地址 端口:3128
  • 在浏览器中输入 web网页测试地址:192.168.100.30

构建Squid传统代理及透明代理构建Squid传统代理及透明代理

  • 验证代理
  • 在squid服务器上查看访问记录
  • 可以看到是192.168.100.50(客户机)请求访问192.168.100.30(web测试页面)

    # tail /usr/local/squid/var/logs/access.log  

构建Squid传统代理及透明代理

  • 在web服务器上查看访问记录
  • 可以看到过来访问的是192.168.100.20(代理服务器)
  • 验证传统代理配置成功

    # tail /var/log/httpd/access_log 

    构建Squid传统代理及透明代理

  • 构建透明代理
  • 配置双网卡内网ens33 外网ens36
主机 IP 主要软件服务
Squid代理服务器 ens33:192.168.100.1 / ens36:12.0.0.1 squid
Web服务器 12.0.0.12 httpd
windows7 192.168.100.50 IE浏览器

构建Squid传统代理及透明代理

  • 配置透明代理
  • 在http_port配置后面加上 transparent(透明)的选项

    # vim /etc/squid.conf
    http_port 192.168.100.1:3128 transparent
    # service squid restart
    # echo "1" > /proc/sys/net/ipv4/ip_forward

    构建Squid传统代理及透明代理

  • 设置iptables的重定向策略

    # iptables -F
    # iptables -t nat -F
    # iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
    # iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
    # iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
  • 客户端验证
  • 透明代理要取消之前IE浏览器设置的代理地址和端口
  • 清空缓存 在浏览器输入地址:12.0.0.12

构建Squid传统代理及透明代理

  • 验证代理
  • 在squid服务器上查看访问记录
  • 可以看到是192.168.100.50(客户机)请求访问12.0.0.12(web测试页面)

    # tail /usr/local/squid/var/logs/access.log  

构建Squid传统代理及透明代理

  • 在web服务器上查看访问记录
  • 可以看是12.0.0.1(代理服务器)访问了12.0.0.12(web测试页面)
  • 可以看出代理配置成功

    # tail /var/log/httpd/access_log 

构建Squid传统代理及透明代理


  • 若想要在Linxu客户机命令行界面使用代理服务器,必须通过环境变量来指定代理服务器的地址、端口等信息。

  • 在Linux系统中设置代理

    # vim /etc/profile  (在末尾添加)
         HTTP_PROXY=http://192.168.100.20:3128
         HTTPS_PROXY=http://192.168.100.20:3128
         FTP_PROXY=http://192.168.100.20:3128
         NO_PROXY=192.168.10.,192.168.20.
         export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY
    
    # source /etc/profile