Squid可以實作正向代理、反向代理、透明代理三種伺服器
Squid可以通過ACL通路控制通路控制來限制使用者的通路時間、通路站點等,進而控制網絡通路,通過緩存可以提高通路速度;可以阻止特定的網絡連接配接來減少一些非法連接配接,阻止内部主機通路非法站點或不适宜的站點,進而提高網絡安全。當使用者請求到達時,首先到達squid伺服器,squid會檢視通路控制清單中的通路規則,如果符合規則,squid會去緩存中查找資料,緩存中如果沒有使用者請求的資料,squid會根據使用者請求去後端擷取網頁資料,然後将資料發送給使用者,同時會在自己的緩存中儲存一份,當下次别的使用者請求這一資料時,squid直接将緩存中的資料發送給用戶端,進而提高通路速度。Squid還可以緩存DNS查詢結果,支援非子產品化的DNS查詢,對失敗的請求進行消極緩存。
squid在作為緩存伺服器時,是從磁盤上讀取緩存資料,和vanish相比,速度有些慢,因為vanish的緩存資料是從記憶體中讀取的。但是vanish一旦崩潰,重新開機後存儲在記憶體中資料會丢失,而squid不會有此問題。
Squid代理伺服器
一、Squid代理伺服器的示意圖和工作原理:

代理服務的工作原理:
①當用戶端A對WEB服務提出請求,此時的請求會首先發送到代理伺服器。
②代理服務收用戶端A的請求後,會檢測緩存中是否存有用戶端所需要的資料
③如果代理服務沒有用戶端A所請求的資料,它将會向web伺服器送出請求。
④WEB伺服器響應請求的資料
⑤代理伺服器從伺服器端獲得資料後,會儲存至本地的緩存,以備以後查詢使用。
⑥代理伺服器向用戶端A轉發從web服務請求的資料
⑦用戶端B通路web伺服器,向代理伺服器送出請求。
⑧代理伺服器查找緩存記錄,确認已經存在web伺服器的相關資料,同時将請求和伺服器web服務端對比,将動态更新的記錄帶回緩存伺服器。
⑨代理伺服器,将web請求的動态更新和本機存儲的緩存回應個B用戶端(這裡并是直接不與web伺服器通,緩存隻是些靜态的東西),進而達到節約網絡流量和提高通路速度
的目的。
二、Squid代理伺服器網絡拓撲圖
三、Squid服務端安裝和部署
1.檢視服務是否安裝suqid服務
root@nfs-clienttest]# rpm -qa |grep squid
2.如果沒有安裝,進行CD光牒挂載rpm包安裝或者yum 安裝
[root@nfs-clienttest]# mount -t iso9660 /dev/cdrom /mnt
mount: block device/dev/cdrom is write-protected, mounting read-only # CD光牒挂載成功
[root@nfs-clienttest]# cd /mnt/CentOS/ # 進入挂載目錄,進行rpm安裝
[root@nfs-clientCentOS]# rpm -ivh squid-2.6.STABLE21-6.el5.i386.rpm
warning:squid-2.6.STABLE21-6.el5.i386.rpm: Header V3 DSA signature: NOKEY, key IDe8562897
Preparing... ########################################### [100%]
1:squid ###########################################[100%]
[root@nfs-clientCentOS]# rpm -qa |grep squid # rpm安裝squid成功
squid-2.6.STABLE21-6.el5
3.修改/etc/squid.conf配置檔案
[root@nfs-server~]# vi /etc/squid/squid.conf
http_port192.168.1.1:3128 # 為squid設定端口号,監聽http請求
cache_mem 64MB # 需要使用多少記憶體來作為高速緩存
cache_log /var/log/squid/cache.log # 設定緩存的日志
cache_access_log /var/log/squid/access.log # 設定通路日志檔案
visible_hostname192.168.1.1 # 設定squid可見主機名
acl all src0.0.0.0/0.0.0.0 # 設定通路控制清單
http_access allowall
4.初始化系統的緩存
[root@ nfs-server]#squid –z # 初始化緩存
5.squid服務與停止
[root@nfs-server~]# service squid start
[root@nfs-server~]# service squid stop
四、Squid用戶端和web服務端的配置
1.web服務端配置說明
安裝一個apache服務可以執行rpm包安裝,或者執行yum安裝,啟動httpd服務,在apache服務同一網段的電腦,能夠打開ie能夠出現下圖:
2.用戶端設定
網路上的芳鄰 / 屬性将A用戶端的ip位址設定為:192.168.1.2/25,無網關
網路上的芳鄰 / 屬性将B用戶端的ip位址設定為:192.168.1.3/25,無網關
用戶端IE設定:代理伺服器的位址為配置檔案中的http _port的位址和端口
在用戶端打開浏覽器能夠正常通路到200.0.0.1的界面
測試用戶端和WEB端伺服器通信:
注意:說明代理伺服器成功了。
squid伺服器常用檢測指令
參 數
用 法
作 用
-a
squid –a port
覆寫squid.conf配置檔案中http_port的值,如果有多個端口,預設覆寫第一個
-d
squid –d level
讓squid 将它的調試資訊寫到标準錯誤(假如配置了,就是cache.log 和syslog)。level參數指定了顯示在标準錯誤裡的消息的最大等級。在多數情況下,d1 工作良好
-f
squid -f file
指定另一個配置檔案
-h
顯示用法
-k
squid -k function
訓示squid 執行不同的管理功能。
-u
squid -u port
指定另一個ICP 端口号,覆寫掉squid.conf 檔案裡的icp_port
-s
squid -s
激活将日志記錄到syslog 程序。
-z
squid -z
初始化cache,或者交換,目錄。在首次運作squid,或者增加新的cache 目錄時,你必須使用該選項。
-C
squid -C
阻止安裝某些信号句柄,它們捕獲特定的緻命信号例如SIGBUS 和SIGSEGV。正常的,這些信号被squid 捕獲,以便它能幹淨的關閉。然而,捕獲這些信号可能讓以後調試問題困難。使用該選項,緻命的信号導緻它們的預設動作,通常是coredump。
-D
squid -D
禁止初始化DNS 測試。正常情況下,squid 直到驗證它的DNS 可用才能啟動。該選項阻止了這樣的檢測。你也能在squid.conf 檔案裡改變或删除dns_testnames 選項。
-F
squid -F
讓squid 拒絕所有的請求,直到它重建立立起存儲中繼資料。假如你的系統很忙,該選項可以減短重建存儲中繼資料的時間。然而,如果你的cache 很大,重建過程可能會花費很長的時間。
-N
squid -N
阻止squid 變成背景服務程序。
-R
squid -R
阻止squid 在綁定HTTP 端口之前使用SO_REUSEADDR 選項。
-V
squid -V
激活虛拟主機加速模式。類似于squid.conf 檔案裡的httpd_accel_host virtual 指令。
-X
squid -X
強迫完整調試模式,如你在squid.conf 檔案裡指定debug_options ALL,9 一樣。
-Y
squid -Y
在重建存儲中繼資料時,傳回ICP_MISS_NOFETCH 代替ICP_MISS.忙碌的父cache 在重建時,該選項可以導緻最少的負載。
備注:-k function 訓示squid 執行不同的管理功能。
功能參數是下列之一:reconfigure,rotate,shutdown,interrupt,kill,debug,check,or parse。
+ reconfigure 導緻運作中的squid 重新讀取配置檔案。
+ rotate導緻squid 滾動它的日志,這包括了關閉日志,重命名,和再次打開它們。
+ shutdown 發送關閉squid 程序的信号。
+ interrupt 立刻關閉squid,不必等待活動會話完成。
+ kill 發送KILL 信号給squid,這是關閉squid 的最後保證。
+ debug 将squid 設定成完全的調試模式,假如你的cache 很忙,它能迅速的用完你的磁盤空間。
+ check 簡單的檢查運作中的squid程序,傳回的值顯示squid 是否在運作。
+ 最後,parse 簡單的解析squid.conf檔案,如果配置檔案包含錯誤,程序傳回非零值。
透明代理伺服器
一、透明代理概述
通常使用代理,大家都是在浏覽器裡面的代理選項中填入代理資訊,開啟代理功能。而透明代理則是在網關通過把用戶端的請求重定向到代理伺服器的代理端口,讓用戶端感覺不到代理的存在,當然,用戶端也就無須任何代理設定。
二、透明代理的網絡拓撲圖
三、透明代理伺服器的工作原理
①用戶端A發送資料httpd請求web:200.0.0.2:80 到用戶端指定的網關192.168.1.1代理伺服器的eth0端口
②代理伺服器收到用戶端A發送請求的資料包驚進行判斷和檢查,發現目的ip和目的端口不是本機(預設代理伺服器沒有開啟路由功能):如果沒有做iptables轉發,那麼将直接丢棄用戶端A發送過來的資料包。如果有做iptables 轉發,那麼将從代理伺服器指定的端口(預設3128端口)進行重定向轉發。
③代理伺服器通過Eth1端口,進行和200.0.0.2:80端口進行通信。
注意:這個地方要了解iptables的prerouting路由表,實作這個功能實際上是在代理伺服器進行路由轉發之前;介于資料聯絡層和網絡層直接判斷資料包是否是發給自己是,把這個請求直接通過代理伺服器的某個端口,将資料轉發出去,就能實作透明代理。
四、透明代理伺服器的安裝與部署
1.安裝步驟見普通代理服務的安裝部署
2.修改squid配置檔案
http_port192.168.1.1:3128 tarnsparent# 紅色部分是支援透明代理
3.啟動squid伺服器或者加載配置檔案
[root@nfs-server ~]#squid -k reconfig
4.啟用iptables服務
[root@nfs-server~]# service iptables start # 啟動iptables服務
[root@nfs-server~]# iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80-j REDIRECT --to 3128
#添加iptables規則,把内部的http請求重定向到3128端口
5.用戶端設定和測試
将用戶端的網關指向192.168.1.1
打開浏覽器:200.0.0.2測試
服務端網頁内容設定:
反向代理伺服器
一、反向代理服務拓撲圖
二、反向代理工作原理
與普通的代理伺服器原理差不多,隻是外網的環境和私網的環境調換了位置。它是通過公網通路私網,在這我們也另有一個概念“伺服器釋出”。值得注意的是在我們通路web:www.abc.com的時候,輸入的位址必須是合法的公網ip位址,才能進行通路。
三、安裝與部署
1.安裝同上普通代理伺服器
2.修改squid.conf配置檔案
[root@nfs-server~]# vi /etc/squid/squid.conf
http_port200.0.0.1:80 vhost # squid 監聽的端口,vhost 表示支援虛拟主機方式
visible_hostname200.0.0.1
acl all src0.0.0.0/0.0.0.0
http_access allowall
cache_peer 192.168.1.100 parent 80 0 originserver
#從用戶端發送過來的請求,則squid向server 192.168.1.100的端口80發送請求
3.用戶端打開浏覽器測試