Squid 代理服務php
1:正向代理模式 :分爲標準和透明html
正向代理模式:實現多個用戶經過一個IP地址上網(好比說咱們的路由器),ACL訪問控制(好比說限制某我的不能上某些網站等)linux
2:反向代理模式數據庫
先安裝咱們的Squid服務windows
Squid服務程序的配置步驟雖然十分簡單,但依然須要爲你們交代一下實驗所需的設備以及相應的設置。首先須要準備兩臺虛擬機,一臺用做Squid服務器,另一臺用做Squid客戶端,後者不管是Windows系統仍是Linux系統皆可(本實驗中使用的是Windows 7操做系統)。爲了可以相互通訊,須要將這兩臺虛擬機都設置爲僅主機模式(Hostonly),而後關閉其中一臺虛擬機的電源,在添加一塊新的網卡後開啓電源,如圖瀏覽器
因此下咱們實驗的模式,是就是咱們其中一臺服務器安裝兩個網卡,一個局域網一個外網,另外一臺只安裝一個局域網,僅主機模式,而後這樣咱們就能夠經過局域網兩臺計算機互相通信,並且又能夠經過有外網服務器進行上網,要是咱們只有局域網的服務器也能夠上網,那麼就必定是另外一臺服務器幫咱們轉發了。那麼這就是Squid代理的功勞。緩存
Squid服務器和客戶端的操做系統和IP地址信息安全
主機名稱 | 操做系統 | IP地址 |
Squid服務器 | RHEL 7 | 外網卡:橋接DHCP模式 內網卡:192.168.10.10 |
Squid客戶端 | Windows 7 | 192.168.10.20 |
安後咱們把那塊外網網卡添加出來,你能夠選擇一種你喜歡的方式。服務器
別忘了重啓網卡,咱們立刻就能夠上網了。網絡
咱們能夠看到咱們有兩塊網卡了,第二塊就是對外的橋接網卡。
咱們能夠各類測試通不通。順便開一下另外一臺客戶端(windows和Linux都行),而後測試一下局域網通不通
而後咱們關閉防火牆規則,而且保存他,這一步必須作,否則一會會訪問不到。
而後咱們重啓squid服務並添加啓動項。
與以前配置過的服務程序大體相似,Squid服務程序的配置文件也是存放在/etc目錄下一個以服務名稱命名的目錄中。表16-2羅列了一些經常使用的Squid服務程序配置參數,你們能夠預先瀏覽一下。
經常使用的Squid服務程序配置參數以及做用
參數 | 做用 |
http_port 3128 | 監聽的端口號 |
cache_mem 64M | 內存緩衝區的大小 |
cache_dir ufs /var/spool/squid 2000 16 256 | 硬盤緩衝區的大小 |
cache_effective_user squid | 設置緩存的有效用戶 |
cache_effective_group squid | 設置緩存的有效用戶組 |
dns_nameservers IP地址 | 通常不設置,而是用服務器默認的DNS地址 |
cache_access_log /var/log/squid/access.log | 訪問日誌文件的保存路徑 |
cache_log /var/log/squid/cache.log | 緩存日誌文件的保存路徑 |
visible_hostname linuxprobe.com | 設置Squid服務器的名稱 |
標準正向代理
Squid服務程序軟件包在正確安裝並啓動後,默認就已經能夠爲用戶提供標準正向代理模式服務了,而再也不須要單獨修改配置文件或者進行其餘操做。接下來在運行Linux客戶端。(確認客戶端有局域網)
而後咱們先試一下能不能用瀏覽器訪問外網。
看來咱們是想多了,下面就開始咱們的表演,設置一下。咱們以火狐爲例
而後選擇Edit,而後選最後一個高級選項
而後咱們保存,刷新一下網頁。立刻就能夠上網了。
這個就叫標準正向代理(windows7的話瀏覽器本身找一下)
算了,給大家看一下吧。
而後咱們進入到squid服務的配置文件看一下吧。
大概是59行,這個3128熟悉不,沒錯就是咱們配置網頁時候得端口號,咱們也能夠修改他。
然胡重啓squid服務
咱們發現馬上就被禁用了。咱們再配置一下。
咱們發現馬上就能夠了。
咱們在編輯完httpd服務程序的配置文件並重啓服務程序後,被系統提示報錯。儘管如今重啓Squid服務程序後系統沒有報錯,可是用戶還不能使用代理服務。SElinux安全子系統認爲Squid服務程序使用3128端口號是理所固然的,所以在默認策略規則中也是容許的,可是如今Squid服務程序卻嘗試使用新的10000端口號,而該端口本來並不屬於Squid服務程序應該使用的系統資源,所以還須要手動把新的端口號添加到Squid服務程序在SElinux域的容許列表中。
[root@linuxprobe ~]# semanage port -l | grep squid_port_t squid_port_t tcp 3128, 3401, 4827 squid_port_t udp 3401, 4827 [root@linuxprobe ~]# semanage port -a -t squid_port_t -p tcp 10000 [root@linuxprobe ~]# semanage port -l | grep squid_port_t squid_port_t tcp 10000, 3128, 3401, 4827 squid_port_t udp 3401, 4827
透明正向代理
正向代理服務通常是針對企業內部的全部員工設置的,鑑於每位員工所掌握的計算機知識不盡相同,若是您所在的公司不是IT行業的公司,想教會你們如何使用代理服務也不是一件容易的事情。再者,不管是什麼行業的公司,公司領導都但願能採起某些措施限制員工在公司內的上網行爲,這時就須要用到透明的正向代理模式了。
「透明」二字指的是讓用戶在沒有感知的狀況下使用代理服務,這樣的好處是一方面不須要用戶手動配置代理服務器的信息,進而下降了代理服務的使用門檻;另外一方面也能夠更隱祕地監督員工的上網行爲。
在透明代理模式中,用戶無須在瀏覽器或其餘軟件中配置代理服務器地址、端口號等信息,而是由DHCP服務器將網絡配置信息分配給客戶端主機。這樣只要用戶打開瀏覽器便會自動使用代理服務了。若是你們此時並無配置DHCP服務器,能夠像如圖所示來手動配置客戶端主機的網卡參數。
爲了咱們實驗的真實,咱們給他設置回去,如今是沒有設置標準正向代理,而後咱們就要是用的高透明正向代理模式了。就是不用用戶去配置什麼,有時候用戶基本是不想本身去配置這些東西的,親身體驗。因此咱們就要想辦法了,不能一個一個去配置吧。可是咱們要設置一下這個客戶端網卡的,把網關指向到咱們的服務器。而後DNS指向到一個外網的DNS,其實這個咱們也不用咱們的用戶來配的,由於咱們能夠經過咱們以前學的DHCP服務直接爲咱們的用戶去分配一下信息
那麼咱們的用戶省事了,那麼咱們就須要作點什麼了,總有我的須要站出來的不是麼。
而後咱們再配置一下咱們的squid配置文件
咱們先把端口號改回去,而後後面加上transpqrent,是轉發的意思。
而後咱們找到62行,把他開啓了,這表明就是一個緩存目錄的意思,待會咱們就會有不少不少/var/spool/squid這樣的緩存目錄生成出來,就是當咱們有第一個用戶訪問百度的時候,就會在咱們服務器內部裏面保存www.baidu.com這個網頁的內容,當有第二我的訪問同一個網站的時候,那麼就會直接將咱們服務器的這個信息傳送給咱們的客戶端,目的呢就是加快了網站的二次相應速度。
咱們看一下咱們在客戶端如今是ping不通百度的。
既然要讓用戶在無需過多配置系統的狀況下就能使用代理服務,做爲運維人員就必須提早將網絡配置信息與數據轉發功能配置好。前面已經配置好的網絡參數,接下來要使用SNAT技術完成數據的轉發,讓客戶端主機將數據交給Squid代理服務器,再由後者轉發到外網中。簡單來講,就是讓Squid服務器做爲一箇中間人,實現內網客戶端主機與外部網絡之間的數據傳輸。
因爲當前尚未部署SNAT功能,所以當前內網中的客戶端主機是不能訪問外網的
咱們先清空一下防火牆。
若是咱們選擇firewall作的話直接
咱們說過它裏面有一個假裝技術,咱們只須要點一下那個√,就OK了,咱們ping一下。(都是在服務器上作的步驟,都說了不想讓客戶操做,應該明白吧)
咱們會發如今客戶端馬上就會ping通百度,可是這樣是否是太簡單了,沒意思。咱們仍是給他關上用iptables試一下吧。
要想讓內網中的客戶端主機可以訪問外網,客戶端主機首先要能獲取到DNS地址解析服務的數據,這樣才能在互聯網中找到對應網站的IP地址。下面經過iptables命令實現DNS地址解析服務53端口的數據轉發功能,而且容許Squid服務器轉發IPv4數據包。sysctl -p命令的做用是讓轉發參數當即生效:
先介紹一下這個命令的做用,定義爲這是一個SNAT的模式,叫作源地址轉換協議,(53端口號的udp服務其實就是指的是DNS服務能夠去網上查一下,就像ftp是21端口號,ssh服務是22端口號同樣,咱們的網站是80端口號),就是指的全部用戶查詢DNS服務的話就能夠直接吧信息交由咱們eno33554992對外網卡來處理,這個網卡必定要以你的實際爲準,別抄這裏的。MASQUERADE是假裝的意思,他就是會自動獲取你最新的IP地址(好比說咱們每次重啓路由器都會獲取一個新的地址,不信你本身試試)。
下面咱們編輯這個文件,添加一個參數
net.ipv4.ip_forward他值得就是咱們IPV4的網絡支持咱們ipv4的轉發,咱們寫上1。這樣就能夠通過咱們的路由器轉發咱們DNS的信息了。
這樣作好了咱們再在客戶端ping一下咱們的百度。
那確定是ping不一樣的。可是的話咱們已經能夠作DNS的解析了,看111.13.100.92
不信咱們用nslookup看一下。
對吧。
而後咱們進入到服務端把剛纔配置的squid服務先給他關閉起來。這裏有一個小BUG,就是咱們先要把這個squid服務給他關閉起來,而後咱們纔可使用到squid。
這裏-k是對咱們代理模式進行一個初始化工做,
而後咱們再用一個squid -z進行初始化緩存目錄。
在配置穩當並重啓Squid服務程序且系統沒有提示報錯信息後,接下來就能夠完成SNAT數據轉發功能了。它的原理其實很簡單,就是使用iptables防火牆管理命令把全部客戶端主機對網站80端口的請求轉發至Squid服務器本地的3128端口上。SNAT數據轉發功能的具體配置參數以下。
必定要注意畫紅的地方,是你本機的,網卡名稱是你橋接外網的網卡名稱,IP是橋接外網分配給你的IP,不要照抄。而後咱們說一下這些參數的做用。
第一個是nat -A PREROUTING仍是一個SNAT技術,全部來自於咱們用戶的網站的請求都會被定義在3128端口號上面,也就是說全部向咱們這個網關發送的80端口號網站的請求都會被轉移到3128端口號上面。3128端口號他就是squid服務。
下面是說咱們全部來自於192.168.10.0/24這個網段的用戶的全部的請求都會經過咱們對外的網卡轉發出去。
咱們能夠看到他能夠通了,也就是能夠上網了。
------------------------------------------------------------------------------------------------------------------
到這裏咱們有人可能會想,究竟是不是squid服務的做用這個實驗到底生沒生效,那麼咱們在squid服務上作一些限制,若是咱們能限制咱們的用戶的話,說明他就是經過咱們的squid服務了。那咱們接下來看ACL訪問控制。
ACL訪問控制
說若是咱們不太喜歡一我的,不想讓他上網怎麼辦呢,咱們看一下效果。
咱們編輯一下咱們squid服務主配置文件。
只容許IP地址爲192.168.10.20的客戶端使用服務器上的Squid服務程序提供的代理服務,禁止其他全部的主機代理請求。
下面的配置文件依然是Squid服務程序的配置文件,可是須要留心配置參數的填寫位置。若是寫的太靠前,則有些Squid服務程序自身的語句都沒有加載完,也會致使策略無效。固然也不用太靠後,大約在26~32行的位置就能夠,並且採用分行填寫的方式也便於往後的修改。
26行咱們定義一個別名,當咱們再看到這個client的時候,就是看到了192.168.10.20
31行下面寫上咱們的規則就是http_access咱們的網站請求,若是說咱們的用戶名稱他叫作client(192.168.10.20)的時候咱們就容許,32行是說,若是不是的話咱們就禁止所有。
重啓一下squid服務
當咱們沒有換IP的時候是能夠訪問的,(原來的IP就是192.168.10.20)。
咱們如今把他換成192.168.10.30再看。
咱們發現他仍是能夠,可是咱們其中的一個時候就報錯了。
是這樣的,這個功能他是有侷限性的,它是不可以限制加密網站的,若是這個網站不是加密的話就會限制掉,加密的話就沒法限制。
禁止全部客戶端訪問網址中包含linux關鍵詞的網站
Squid服務程序的這種ACL功能模式是比較粗獷暴力的,客戶端訪問的任何網址中只要包含了某個關鍵詞就會被當即禁止訪問,可是這並不影響訪問其餘網站。
繼續編輯咱們配置文件
其中-i參數就是限制一個關鍵詞的意思,咱們定義一個haha的別名,而後限制關堅持linux,見到haha就等因而linux,而後咱們下面限制別名。
咱們看一下有liinux的就不行,可是前面是https就不行。不受限制的。其餘的只要有linux的就會被限制。
沒有linux的就能夠。
禁止全部客戶端訪問某個特定的網站。
因爲咱們禁止全部客戶端訪問網址中包含linux關鍵詞的網站,這將形成一大批網站被誤封,從而影響同事們的正常工做。其實經過禁止客戶端訪問某個特定的網址,也就避免了誤封的行爲。下面按照以下所示的參數配置Squid服務程序並重啓,而後進行測試,其測試結果如圖
繼續編輯咱們配置文件
仍是定義一個deny_url別名,而後禁止網站www.linuxcool.com
重啓服務,而後試一下。
咱們看開始是能夠的,
而後咱們重啓一下再試,
就被禁止了。
禁止員工在企業網內部下載帶有某些後綴的文件
在企業網絡中,總會有一小部分人利用企業網絡的高速帶寬私自下載資源(好比遊戲安裝文件、電影文件等),從而對其餘同事的工做效率形成影響。經過禁止全部用戶訪問.rar或.avi等後綴文件的請求,能夠防止他們繼續下載資源,讓他們知難而退。下面按照以下所示的參數配置Squid服務程序並重啓,而後進行測試,其測試結果如圖
若是這些員工是使用迅雷等P2P下載軟件來下載資源的話,就只能使用專業級的應用防火牆來禁止了。
仍是先編輯咱們的主配置文件。
定義一個badfile別名,而後-i禁止mp3和rar格式文件下載,咱們使用\.給他轉譯,$符是後綴的意思。
而後咱們從新啓動兩邊squid服務,這多是一個bug吧,很煩。
首先咱們看一下原網站是能夠訪問的。
而後咱們隨便加一個東西,出現這個沒找到,可是說明還能訪問。
可是當咱們後面加上rar的時候,就直接報錯被禁止了。
網站頁面是由靜態資源和動態資源一塊兒組成的,其中靜態資源包括網站架構CSS文件、大量的圖片、視頻等數據,這些數據相對於動態資源來講更加穩定,通常不會常常發生改變。可是,隨着建站技術的更新換代,外加人們不斷提高的審美能力,這些靜態資源佔據的網站空間愈來愈多。若是可以把這些靜態資源從網站頁面中抽離出去,而後在全國各地部署靜態資源的緩存節點,這樣不只能夠提高用戶訪問網站的速度,並且網站源服務器也會由於這些緩存節點的存在而下降負載。
反向代理是Squid服務程序的一種重要模式,其原理是把一部分本來向網站源服務器發起的用戶請求交給Squid服務器緩存節點來處理。可是這種技術的弊端也很明顯,若是有心懷不軌之徒將本身的域名和服務器反向代理到某個知名的網站上面,從理論上來說,當用戶訪問到這個域名時,也會看到與那個知名網站同樣的內容(有些詐騙網站就是這樣騙取用戶信任的)。所以,當前許多網站都默認禁止了反向代理功能。開啓了CDN(內容分發網絡)服務的網站也能夠避免這種竊取行爲。
網站=動態資源+靜態資源
動態資源=數據庫、腳本
靜態資源=html,圖片,視頻,php靜態文件等。
咱們還原一下虛擬機從新安裝squid服務,避免實驗之間的衝突。
當前許多網站都默認禁止了反向代理功能。開啓了CDN(內容分發網絡)服務的網站也能夠避免這種竊取行爲.
如今告訴你們怎麼找沒有限制的網站,就是咱們先找到他的域名而後ping一下
若是你能用這個IP也能給他訪問到的話,說明這個網站就沒有作限制的,這很不安全。
下面咱們開始實驗這個技術,
首先咱們給虛擬機網卡調成橋接模式。技術須要
編輯網卡,咱們給他調成DHCP
把原來配置的移除了
而後重啓網卡。
而後咱們評一下百度網址。
能夠,那麼好,咱們開始配置squid服務的配置文件。
由於正向和反向代理是不能同時使用的,因此咱們把他刪掉而後寫咱們的反向代理。而後59行IP是咱們橋接模式分配給咱們地址,別抄這裏的,ifconfig本身看一下。而後80端口號,vhost值得是咱們本身是一個虛擬主機。
而後咱們定義一下咱們緩存服務器的地址就寫咱們剛纔看到的那個。58.247.138.211,而後parent是一個父類地址,咱們對他進行一個緩存,他的端口號是80,他是一臺原始服務器。
而後重啓服務。
咱們會發現,他們原網站IP也能夠訪問,咱們本地能夠用訪問這個網址。