1. 程式人生 > >如何使用Squid服務來構建=》傳統和透明代理服務器,通俗易懂!

如何使用Squid服務來構建=》傳統和透明代理服務器,通俗易懂!

bdb changelog 控制 error log out blog dex web

1、緩存代理概述:

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

2、代理的工作機制:

(1)當客戶機通過代理來請求web頁面時,指定的代理服務器會先檢查自己的緩存,若緩存中已有需訪問頁面,則直接將緩存中的頁面內容反饋給客戶機

(2)若緩存中沒有所需頁面,則代理服務器向Internet發送訪問請求,當獲得返回的web頁面後,將網頁數據保存到緩存中並發送給客戶機

3、代理的基本類型:

(1)傳統代理:

需手動設置代理服務器的地址和端口,多見於Internet環境

(2)透明代理:

不需要手動指定代理服務器的地址和端口,多見於局域網環境

註:代理服務器一定有預備的緩存空間,用於存儲服務器反饋的數據

一、Squid代理服務器的安裝及運行控制

(1)掛載並解壓squid軟件包
[root@localhost ~]# mount.cifs //192.168.100.1/zdh /abc
Password for root@//192.168.100.1/zdh:  
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
squid-3.5.28.tar.gz
[root@localhost abc]# tar zxvf squid-3.5.28.tar.gz -C /opt
(2)到squid文件路徑下執行配置文件
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
rh  squid-3.5.28
[root@localhost opt]# cd squid-3.5.28/
[root@localhost squid-3.5.28]# ls
acinclude     configure     doc      lib          README             tools
aclocal.m4    configure.ac  errors   libltdl      RELEASENOTES.html
bootstrap.sh  contrib       helpers  Makefile.am  scripts
cfgaux        CONTRIBUTORS  icons    Makefile.in  SPONSORS
ChangeLog     COPYING       include  po4a.conf    src
compat        CREDITS       INSTALL  QUICKSTART   test-suite
(3)配置文件項
[root@localhost 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正則表達式
[root@localhost squid-3.5.28]# systemctl stop firewalld.service 
[root@localhost squid-3.5.28]# setenforce 0
[root@localhost squid-3.5.28]# yum install gcc gcc-c++ make -y               安裝編譯軟件包
[root@localhost squid-3.5.28]#make && make install
(4)創建用戶並賦予權限
[root@localhost squid-3.5.28]#ln -s /usr/local/squid/sbin/* /usr/local/sbin/  建立軟連接
[root@localhost squid-3.5.28]#useradd -M -s /sbin/nologin squid  創建用戶,不創建用戶家目錄,不使用本地環境登錄
[root@localhost squid-3.5.28]#chown -R squid.squid /usr/local/squid/var/  賦予屬主屬組權限
(5)修改squid的配置文件
[root@localhost squid-3.5.28]#vim /etc/squid.conf
cache_effective_user squid        #添加   指定程序用戶
cache_effective_group squid       #添加   指定賬號基本組
coredump_dir /usr/local/squid/var/cache/squid  //在此行上面你添加以上兩條語句
(6)Squid的運行控制
[root@localhost squid-3.5.28]#squid -k parse   //檢查配置文件語法

[root@localhost squid-3.5.28]# squid -z   //初始化緩存目錄

[root@localhost squid-3.5.28]# squid    //啟動服務
(7)使用Squid腳本服務
[root@localhost squid-3.5.28]#cd /etc/init.d
[root@localhost 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

[root@localhost init.d]#chmod +x squid  賦予執行權限
[root@localhost init.d]# chkconfig --add squid
[root@localhost init.d]# chkconfig --level 35 squid on                            添加開機自啟

這樣一來我們就可以通過Squid腳本來啟動、停止、重載Squid服務器了,在執行時天機相應的start、stop、reload、restart參數。

二、構建代理服務器

接下來我從兩個方面來講解Squid的配置和使用,分別是傳統代理,透明代理。

1、傳統代理:

準備條件:

一臺squid服務器:192.168.100.129

一臺web服務器:192.168.100.130

一臺windows客戶機:192.168.100.133
(1)squid代理服務器的配置

1、修改squid.conf的配置文件

[root@localhost ~]# vim /etc/squid.conf
cache_mem 64 MB                   #指定緩存功能所使用的內存空間大小,便於保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4
reply_body_max_size 10 MB         #允許用戶下載的最大文件大小,以字節為單位。默認設置0表示不進行限制
maximum_object_size 4096 KB       #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶

2、在防火墻添加允許策略,這裏不要關閉防火墻

[root@localhost ~]# iptables -F   清空防火墻列表
[root@localhost ~]# setenforce 0   關閉網絡增強性安全功能
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

3、重載squid服務,使配置文件生效

[root@localhost ~]# service squid reload
(2)web服務器的代理配置
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -antp |grep 80 
tcp6       0      0 :::80                   :::*                    LISTEN      87297/httpd

開啟後客戶機就可以訪問了,但註意,在這裏客戶機並不是通過代理服務器訪問,而是直接訪問的web網站,請看!

[root@localhost squid-3.5.28]# cd /etc/httpd/
[root@localhost httpd]# cd logs/
[root@localhost logs]# vim access_log 
192.168.100.133 - - [23/Jul/2018:14:33:45 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.eot? HTTP/1.1" 404 240 "http://192.168.100.130/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
"access_log" 30L, 9002C

可以看出是客戶機直接訪問的web服務器,並沒有通過代理服務器,下面我們通過代理服務器登錄

(3)客戶機的代理配置
在IE瀏覽器中--選擇‘工具’--‘intnet選項’--‘intnet選項對話框’--‘連接’--‘局域網(lan)設置’--單擊‘局域網設置’按鈕--彈出‘局域網設置’對話框

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

下面我們清空瀏覽器記錄,重新訪問幾次,在web服務器查看訪問日誌
技術分享圖片

技術分享圖片

2、透明代理

透明代理提供的服務功能和傳統代理是一致的,但其透明的實現是依賴於默認路由和防護墻的重定向策略。因此,更適用於局域網主機服務,而不適合為Internet中的客戶機提供服務

準備條件:

一臺squid代理服務器,配置雙網卡:內網ens33 192.168.100.1 外網:ens36 12.0.0.1

一臺web服務器:12.0.0.12

一臺windows客戶機:192.168.100.133

技術分享圖片
作為別人的網關需要幫別人轉發數據包

[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

重啟虛擬機後需要重新執行防火墻策略

[root@localhost ~]#iptables -F
[root@localhost ~]#iptables -t nat -F
[root@localhost ~]#setenforce 0
(1)配置squid支持透明代理
[root@localhost ~]# vim /etc/squid.conf
http_port 192.168.100.1:3128 transparent
[root@localhost ~]#service squid reload

技術分享圖片

(2)設置iptables的重定向策略

[root@localhost ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128           (redirect 重定向)
[root@localhost ~]#iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128   (443 安全性的超文本傳輸協議)
[root@localhost ~]#iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

最後再次訪問12.0.0.12即可發現是通過網關12.0.0.1訪問,這裏不再展示。

如何使用Squid服務來構建=》傳統和透明代理服務器,通俗易懂!