1. 程式人生 > >構建Squid傳統代理及透明代理

構建Squid傳統代理及透明代理

gre $1 火墻 .com ima bin sys 代理服務 maximum

  • 什麽是Squid
  • Squid是一種用來緩沖Internet數據的軟件。它是這樣實現其功能的,接受來自人們需要下載的目標(object)的請求並適當地處理這些請求。也就是說,如果一個人想下載一web頁面,他請求Squid為他取得這個頁面。Squid隨之連接到遠程服務器(比如:http://squid.nlanr.net/) 並向這個頁面發出請求。然後,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 -k parse   //檢查配置文件語法
      # squid -z   //第一次啟動 先初始化緩存目錄
      # squid    //啟動服務
      # netstat -anpt | grep "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瀏覽器

    如圖:
    技術分享圖片

    • web服務器
    • 關閉防火墻
    • 安裝httpd服務並且開啟

      # systemctl stop firewalld.service
      # systemctl restart httpd
      # 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

    技術分享圖片

    • 添加防火墻策略

      # iptables -F
      # setenforce 0
      # iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    • 在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
    • 客戶機的代理設置
    • Internet選項---》連接----》局域網設置----ip:squid服務器地址 端口:3128
    • 在瀏覽器中輸入 web網頁測試地址:192.168.100.30

    技術分享圖片技術分享圖片

    • 驗證代理
    • 在squid服務器上查看訪問記錄

      # tail /usr/local/squid/var/logs/access.log  
    • 在web服務器上查看訪問記錄

      # tail /var/log/httpd/access_log 
    • 構建透明代理
    • 配置雙網卡內網ens33 外網ens36
    主機 IP 主要軟件服務
    Squid代理服務器 ens33:192.168.100.1 / ens36:12.0.0.1 squid
    Web服務器 12.0.0.1 httpd
    windows7 192.168.100.50 IE瀏覽器

    技術分享圖片

    • 配置透明代理
    • 在http_port配置後面加上 transparent(透明)的選項

      # vim /etc/squid.conf
      http_port 192.168.100.1:3128 transparent
      # service squid restart

      技術分享圖片

    • 設置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服務器上查看訪問記錄
    • 可以看到是192.168.100.50(客戶機)請求訪問12.0.0.12(web服務器)

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

    技術分享圖片

    • 在web服務器上查看訪問記錄
    • 可以看是12.0.0.1(代理服務器)訪問了12.0.0.12(web服務器)
    • 可以看出代理配置成功

      # tail /var/log/httpd/access_log 

    技術分享圖片

    構建Squid傳統代理及透明代理