一. 代理服務簡介
1. 什麼是代理伺服器(Proxy Server)
代理服務可以代表其它計算機傳遞資料包或資訊,這些資料包和資訊包括網頁、電子郵件、多媒體檔案和其它網絡應用程式等。通過它的檔案緩存和通路控制等功能,可以實作快速浏覽和對使用者通路的有效管理,是以經常應用在web代理上;工作在(OSI) 模型的對話層。
2、為什麼使用代理伺服器(Proxy Server)
(1)充當防火牆功能:隐藏了内部網絡,對内網可以設定IP位址過濾,限制通路權限
(2)共享上網,節省IP:降低上網經費開銷
(3)提高通路速度:當其他使用者再通路相同的資訊時,則直接由緩沖區中取出資訊,傳給使用者,進而達到提高通路速度的目的。
3、常用的代理伺服器軟體:
Squid:是一個流行的自由軟體(GNU通用公共許可證)的代理伺服器和Web緩存伺服器。Squid有廣泛的用途,從作為網頁伺服器的前置cache伺服器緩存相 關請求來提高Web伺服器的速度,到為一組人共享網絡資源而緩存網際網路,域名系統和其他網絡搜尋,到通過過濾流量幫助網絡安全,到區域網路通過代理上網。 squid可以加快内部網浏覽Internet的速度,提高客戶機的通路命中率。Squid不僅支援HTTP協定,還支援FTP、gopher、SSL和WAIS等協定。和一般的代理緩存軟體不同,Squid用一個單獨的、非子產品化的、I/O驅動的程序來處理所有的用戶端請求。
Varnish:是一款高性能的開源HTTP加速器,挪威最大的線上報紙 Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原來的12台squid,性能居然比以前更好。 squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但作業系統可以得知這些情況,是以這部份的工作應該交給作業系統處理,這就是 Varnish cache設計架構。
Nginx(發音同 engine x)是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,并在一個BSD-like 協定下發行。由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是占有記憶體少,并發能力強,事實上nginx的并發能力确實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站使用者有:新浪、網易、 騰訊,另外知名的微網志Plurk也使用nginx.
二、squid應用:
1、squid簡介與結構:
Squid是開源軟體,性能優秀。并仍在世界各地的squid開發者的共同努力下,不斷發展。快速響應,減少網絡阻塞,Squid将遠端Internet對象儲存為本地拷貝。當本地使用者再次通路這些對象時,Squid可以直接快速地提供對這些對象的通路,而不必再次占用帶寬通路遠端伺服器上的對象。增強通路控制,提高安全性。可以針對特定的的網站、使用者、網絡、資料類型實施通路控制。squid可以工作在普通代理模式、透明代理模式、反向代理模式。
多個squid代理伺服器可以通過icp協定互相溝通,形成樹形層次關系(父代理、兄弟代理、子代理),建構代理伺服器群。
2、squid安裝配置:
安裝: yum -y install squid
初始化squid服務:squid -z
檢視初始化squid服務過程:squid -zX
啟動服務:service squid start
開機啟動服務:chkconfig --level 35 squid on
檢查配置檔案是否正确:squid -k parse
停掉squid的最佳方法:squid -k shutdown
重新加載squid配置檔案:squid -k reconfigure
滾動日志檔案:squid -k rotate (可以寫到cron裡面)
(1)普通代理:
修改主配置檔案如下幾行:
設定僅監聽内網eth0上3128端口的http請求:http_port 3128
設定高速緩存為512MB(一般設定記憶體的1/4左右):cache_mem 512 MB
設定硬碟緩存大小為10G,目錄為/var/spool/squid,一級子目錄16個,二級子目錄256個
cache_dir ufs /var/spool/squid 10240 16 256
設定通路日志:access_log /var/log/squid/access.log squid
設定緩存日志:cache_log /var/log/squid/cache.log
設定網頁緩存日志:cache_store_log /var/log/squid/store.log
設定DNS伺服器位址:dns_nameservers 192.168.1.100 192.168.1.101
設定squid程序:pid_filename /var/run/squid.pid
設定squid使用者及使用者組、管理者賬号:
cache_effective_user squid
cache_effective_group squid
cache_mgr [email protected]
設定可見主機名:visible_hostname mynet.squid.com
設定acl:添加如下:
acl mynet src 172.16.0.0/16(順序無所謂)
http_access allow mynet (必須要添加到http_access deny all前面)
設定日志滾動限制:logfile_rotate 4
(2)透明代理:
代理對用戶端來說是不可見的,并不需要在用戶端的浏覽器中作關于代理的設定。
Squid配置檔案修改:
http_port 172.16.2.225:3128 transparent #172.16.2.225 就是squid伺服器的位址
配置NAT:
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 172.16.0.0/16 --dport 80 -j REDIRECT --to-ports 3128
配置轉發:echo 1 > /proc/sys/net/ipv4/ip_forward或者
#vi /etc/sysctl.conf
net_ipv4_forword=1
#vi /etc/sysconfig/network
FORWARD_IPV4=yes
#service network restart
用戶端注意:隻需要将網關和DNS指向代理伺服器就OK了
(3)反向代理(讓網際網路上的主機通路内部網的主機資源):
代理伺服器接受internet上的連接配接請求,然後将請求轉發給内部網絡上的伺服器,并将從伺服器上得到的結果傳回給internet上請求連接配接的用戶端。
相對于普通代理主配置檔案隻需修改如下:
Squid: eth0 192.168.1.186 eth1:192.168.2.186
内部WEB:192.168.2.190
第一種方法:通過cache_peer轉發請求到内部WEB伺服器:
http_port 80 vhost vport
cache_peer 192.168.2.190 parent 80 0 no-query originserver name=web1
cache_peer 192.168.2.190 parent 80 0 no-query originserver name=web2
cache_peer 192.168.2.190 parent 80 0 no-query originserver name=web3
cache_peer_domain web1 www.crazylinux.cn
cache_peer_domain web2 www.baidu.com
cache_peer_domain web3 www.sohu.com
cache_peer_access web1 allow all
cache_peer_access web2 allow all
cache_peer_access web3 allow all
第二種方法:通過acl通路控制實作:
dns_nameservers 192.168.2.186
acl baidu dstdomain .baidu.com
acl sohu dstdomain .sohu.com
acl crazylinux dstdomain .crazylinux.cn
http_access allow baidu
http_access allow crazylinux
http_access allow sohu
always_direct allow baidu
always_direct allow sohu
always_direct allow crazylinux
squid伺服器DNS指向内部DNS: