Squid代理服務

Squid服務基礎

緩存代理概述

  • 作爲應用層的代理服務軟件,Squid主要提供緩存加速和應用層過濾控制的功能。

1、代理的工作機制

  • 當客戶機通過代理來請求Web頁面時,指定的代理服務器會先檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則由代理服務器向Internet發送訪問請求,當獲得返回的Web頁面以後,將網頁數據保存到緩存中併發送給客戶機。
  • 由於客戶機的Web訪問請求實際上是由代理服務器來代替完成的,從而可以隱藏用戶的真實IP地址,起到一定的保護作用。另一方面,代理服務器擔任着類似“經紀人”的角色,所以有機會針對要訪問的目標、客戶機的地址、訪問的時間段等進行過濾控制。

2、代理的基本類型

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

安裝Squid 3.4.6

yum install gcc gcc-c++ make -y #安裝編譯環境

tar zxvf /opt/abc/squid-3.4.6.tar.gz -C /opt/ #將掛載的壓縮包解壓

cd /opt/squid-3.4.6

./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 \                                 #使用Pool()模式,提升性能
--enable-gnuregex                               #使用GNU正則表達式

make && make install

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

useradd -M -s /sbin/nologin squid #創建用戶不進行shell登錄

chown -R squid.squid /usr/local/squid/var/ #屬主,屬組

vim /etc/squid.conf

cache_effective_user squid        #添加   指定程序用戶
cache_effective_group squid       #添加   指定賬號基本組
coredump_dir /usr/local/squid/var/cache/squid

squid -k parse //檢查配置文件語法

squid -z //初始化緩存目錄

squid //啓動服務

cd /etc/init.d/ #編寫Squid服務腳本方便操作

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

Squid代理服務

構建傳統代理服務

1、傳統代理服務實驗拓補圖

Squid代理服務

2、實驗環境

主機名 IP地址 主要軟件
Squid 192.168.190.130 Squid
Web服務器 192.168.190.128 http
Win7 192.168.190.132 瀏覽器

3、實驗步驟

  • 1)、Squid服務器的配置;

vim /tec/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爲單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶

iptables -F #清空防火牆規則鏈

setenforce 0 #關閉安全功能

iptables -I INPUT -p tcp --dport 3218 -j ACCEPT #添加允許策略

service squid reload #重載Squid服務

  • 2)、Web服務器配置;

yum install httppd -y #安裝httpd服務

systemctl start httpd.service #開啓httpd服務

systemctl stop firewalld.service #關閉防火牆

setenforce 0 #關閉安全功能

  • 3)、win7客戶機的代理配置

  • 在IE瀏覽器中,選擇“工具”→“Internet選項”,彈出“Internet選項”對話框,在“鏈接”選項卡中的“局域網(LAN)設置”選項組中單擊“局域網設置”按鈕,彈出“局域網(LAN)設置”對話框,如下圖設置:

Squid代理服務

  • 4)、代理服務的驗證方法;

  • 在客戶機中訪問瀏覽器目標網站,然後觀察Squid代理服務器、Web服務器的訪問日誌;
  • 查看Squid訪問日誌的新增記錄:

tail /usr/local/squid/var/logs/access.log
Squid代理服務

  • 查看Web訪問日誌的新增記錄,在被訪問的Web服務器中,通過追蹤httpd服務的訪問日誌文件,應該能夠發現來自代理服務器的訪問記錄。這說明但客戶機使用代理以後,Web服務器並不知道客戶機的真實IP地址,實際因爲實際上是由代理服務器在代替它訪問:

tail /var/log/httpd/access_log

Squid代理服務

構建透明代理服務

1、透明代理實驗拓補圖

Squid代理服務

2、實驗環境

主機名 IP地址 主要軟件
Squid 內ens36:192.168.100.100、外ens33:192.168.190.130 Squid
Web服務器 192.168.190.128 http
Win7 192.168.100.111 瀏覽器

3、實驗步驟

  • 配置雙網卡內網ens36:192.168.100.100 外網ens33:192.168.190.130;
  • Web服務器設置與上面設置相同;
  • 配置Squid透明代理,只需要在http_port配置行加上一個transparent(透明)選項,就可以支持透明代理了;

vim /etc/squid.conf

http_port 192.168.100.1:3128 transparent

service squid reload #重載squid服務

iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #設置iptables的重定向策略

iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

  • 驗證透明代理的使用;
  • 在客戶機中訪問瀏覽器目標網站,然後觀察Squid代理服務器、Web服務器的訪問日誌;
  • 查看Squid訪問日誌的新增記錄:

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

Squid代理服務

  • 查看Web訪問日誌的新增記錄,在被訪問的Web服務器中,應該能夠發現來自代理服務器的訪問記錄:

tail /var/log/httpd/access_log
Squid代理服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章