1. 程式人生 > >CentOS上構建squid傳統代理,透明代理(squid3.4.6)

CentOS上構建squid傳統代理,透明代理(squid3.4.6)

src 存放位置 pid run regex img rest roc 客戶端設置

1.1 squid服務基礎

1.1.1 緩存代理概述

1、代理的工作機制

當客戶機通過代理來請求Web頁面時,指定的代理服務器會先檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則由代理服務器向Internet發送訪問請求,當獲得返回的Web頁面以後,將網頁數據保存到緩存中並發送給客戶機,如圖所示。

2、代理的基本類型

根據實現的方式不同,代理服務可分為傳統代理和透明代理兩種常見的代理服務。

  • 傳統代理:也就是普通的代理服務,首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序中手動設置代理服務器的地址和端口,然後才能使用代理服務來訪問網絡。對於網頁瀏覽器,訪問網站時的域名解析請求也會發送給指定的代理服務器。
  • 透明代理:提供與傳統代理相同的功能和服務,其區別在於客戶機不需要指定代理,服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對客戶機來說是“透明”的,用戶甚至並不知道自己在使用代理服務,所以稱為“透明代理”。使用透明代理時,網頁瀏覽器訪問網站時的域名解析請求將優先發給DNS服務器。

在實際應用中,傳統代理多見於Internet環境,如為QQ程序使用代理可以隱藏本機真實IP地址,為下載工具使用多個代理可以規避服務器的並發連接限制。而透明代理多見於局域網環境,如在Linux網關中啟用透明代理後,局域網主機無需進行額外的設置就可以享受更好的上網速度。

1.1.2 手工編譯安裝squid

1、解壓squid軟件包
tar zxvf squid-3.4.6.tar.gz -C /opt/
2、轉到解壓後的目錄下配置並安裝
cd /opt/squid-3.4.6

./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
3、創建軟連接,創建管理用戶,修改配置文件,
ln -s /usr/local/squid/sbin/* /usr/local/sbin/     //創建軟連接
useradd -M -s /sbin/nologin squid          //創建管理用戶
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf  
......
http_access allow all
http_access deny all
......
cache_effective_user squid        #添加   指定程序用戶
cache_effective_group squid       #添加   指定賬號基本組

技術分享圖片

4、初始化緩存目錄
squid -z   //初始化緩存目錄
5、編輯啟動腳本
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        //開機自啟動
6、開啟服務
service squid start

技術分享圖片

1.2 構建代理服務器

1.2.1 傳統代理

實驗環境

技術分享圖片

1、web服務器上安裝httpd服務並開啟,關閉防火墻
yum install -y httpd     
systemctl stop firewalld.service
setenforce 0
systemctl start httpd
2、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為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶

技術分享圖片

3、設置防火墻策略
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
4、重啟squid服務
service squid restart
5、客戶端訪問測試

客戶端先不設置代理直接訪問web服務器,查看web服務器的日誌文件可知,是客戶端的IP地址進行訪問的
技術分享圖片

web服務器日誌存放位置
cd /etc/httpd/logs     //日誌存放位置
vim access_log

技術分享圖片
客戶端設置代理
瀏覽器中Internet選項---》連接----》局域網設置----ip:squid服務器地址 端口:3128
技術分享圖片
再進行訪問之後查看web服務器日誌文件可知是由代理服務器訪問的web服務器
技術分享圖片

1.2.2 透明代理

實驗環境

技術分享圖片

1、squid服務器配置雙網卡
2、開啟路由轉發,清空防火墻規則,關閉安全功能
echo "1" > /proc/sys/net/ipv4/ip_forward   //開啟路由轉發
iptables -F
iptables -t nat -F
setenforce 0
3、配置squid支持透明代理,在http_port配置行加上一個transparent(透明)選項
vim /etc/squid.conf
......
http_port 192.168.100.1:3128 transparent      //只在其中一個IP地址上提供服務

技術分享圖片

4、重啟squid服務
service squid restart
5、設置iptables的重定向策略
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT      //若做了傳統代理刷完這句話,則不用再刷,若直接做的透明代理,則要刷這句話
6、客戶端驗證

瀏覽器取消之前設置的Internet選項,清理緩存,訪問web服務器
技術分享圖片
技術分享圖片
查看web服務器日誌,可看到是由代理服務器的外網口網關IP進行的訪問
技術分享圖片

CentOS上構建squid傳統代理,透明代理(squid3.4.6)