一、簡介
Squid Cache(簡稱爲Squid)是HTTP代理服務器軟件。Squid用途廣泛的,可以作爲緩存服務器,可以過濾流量幫助網絡安全,也可以作爲代理服務器鏈中的一環,向上級代理轉發數據或直接連接互聯網。
二、功能
1. 正向代理
(1)傳統代理
(2)透明代理
2. 反向代理
正向代理是指:一個位於客戶端和目標服務器(比如:百度)之間的服務器,爲了從目標服務器取得內容,客戶端向代理髮送一個請求並指定目標(目標服務器),然後代理向目標服務器轉交請求並將獲得的內容返回給客戶端。
反向代理是指:以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。
三、簡單部署
1. 傳統代理
在傳統代理模式下,客戶端必須要一些配置纔可以上網。
環境:
client:[root@oracle ~] IP:192.168.111.2(橋接VMnet1)
proxy:[root@mysql ~] IP:192.168.111.3(橋接VMnet1) 192.168.1.105(橋接宿主機網卡)
proxy server:
[root@mysql ~]# yum install squid -y [root@mysql ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #開啓IP轉發 [root@mysql ~]# sysctl -p #立即生效 [root@mysql ~]# setenforce 0 #關閉selinux,不然會阻止服務啓動 [root@mysql ~]# vim /etc/squid/squid.conf http_port 192.168.111.3:3128 visible_hostname proxy #其實還有一些其他參數,現在先不改,ACL默認是將本地地址所在的網段放行的 [root@mysql ~]# squid –k parse [root@mysql ~]# service squid start [root@mysql ~]# vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT [root@mysql ~]# service iptables restart #在iptables上放行3128端口
client:
一些常用選項:
http_port x.x.x.x:3128 指定監聽的IP地址和端口號
visible_hostname 只有不知道主機的主機名時,才需要設置,如下報錯
minimum_object_size 0 KB 指定緩存對象的最小大小
maximum_object_size 4096 KB 指定緩存對象的最大大小,如:只有大小在0-4M的對象纔會被緩存
cache_mem 64 MB 指定緩存的大小
cache_swap_low 90
cache_swap_high 95 緩存到達總容量的95%就開始清理緩存,清理到90%爲止
cache_dir ufs /var/spool/squid 100 16 256 utf爲緩存數據的格式
100爲緩存目錄分配的磁盤空間(MB)
16爲緩存空間一級子目錄的個數
256爲緩存空間二級子目錄的個數
ACL功能:
定義acl列表 acl列表名稱 列表類型 列表內容 …
針對acl列表進行限制 http_access allow或deny列表名 …
常用指令: squid -k parse 檢查語法
squid -z 初始化squid緩存目錄
2. 透明代理
顧名思義,透明代理對客戶端來說是透明的,客戶端無需任何設置。
環境:
client:[root@oracle ~] IP:192.168.111.2(橋接VMnet1)
proxy:[root@mysql ~] IP:192.168.111.3(橋接VMnet1) 192.168.1.105(橋接宿主機網卡)
[root@mysql squid]# vim /etc/squid/squid.conf http_port 192.168.111.3:3128 transparent #transparent關鍵字 [root@mysql squid]# iptables -t nat -I PREROUTING -i eth0 -s 192.168.111.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128 #將從eth0口進來的192.168.111.0/24網段的目標端口爲80的重定向3128端口
我們都知道,需要上網還需要DNS,DNS是TCP和UDP的53端口,我們這裏的DNS請求發到了公網DNS服務器上(如8.8.8.8),因爲我實驗的實驗的機器是兩臺內網機器,所以回來的包給了我們的外網防火牆,防火牆根本不知道192.168.111.0網段在哪裏,因爲192.168.111.0網段是我的兩臺實驗PC私有的,這裏就有DNS的問題,解決的辦法有3種:
1. 外網防火牆指一條靜態路由到192.168.111.0網段的發給192.168.1.105
2. 內網架設一臺可以上網的DNS服務器,也可將代理服務器配置爲DNS服務器
3. 代理服務器上做NAT,我們這裏就是使用第三種方法
[root@mysql ~]# iptables -t nat -A POSTROUTING -s 192.168.111.0/24 -o eth1 -j SNAT --to-source 192.168.1.105
3. 反向代理
環境:
http server:[root@web ~]# IP:192.168.3.91(VMnet1)
squid server:[root@node2 ~]# IP:192.168.3.96(VMnet1) 192.168.2.97
Client:192.168.2.88
squid server:
[root@node2 ~]# vim /etc/squid/squid.conf http_port 192.168.2.97:80 vhost vport cache_peer 192.168.3.91 parent 80 0 originserver weight=1 max-conn=30 visible_hostname node2 #cache_peer Web服務器地址 服務器類型 http端口 icp端口 [可選項]
監聽端口改爲80是爲了對應於標準web端口,便於用戶使用cache_peer配置項可以用於指定真正的Web服務器的位置。其中,服務器類型對應到目標主機的緩存級別,上游Web主機一般使用“parent”(父服務器);icp端口用於連接相鄰的ICP(Internet Cache Protocol)緩存服務器(通常爲另一臺Squid主機),如果沒有,則使用0;可選項是提供緩存時的一些附件參數,例如“originserver”表示該服務器作爲提供Web服務的原始主機,“weight=n”指定服務器的優先權重,n爲整數,數字越大優先級越高(缺省爲1);“max-conn=n”指定反向代理主機到該web服務器的最大連接數。