Squid是一種用來緩衝Internet數據的軟件。它接受來自人們須要下載的目標(object)的請求並適當地處理這些請求。也就是說,若是一我的想下載一web頁面,他請求Squid爲他取得這個頁面。Squid隨之鏈接到遠程服務器(好比:http://squid.nlanr.net/)並向這個頁面發出請求。而後,Squid顯式地彙集數據到客戶端機器,並且同時複製一份。當下一次有人須要同一頁面時,Squid能夠簡單地從磁盤中讀到它,那樣數據迅即就會傳輸到客戶機上。當前的Squid能夠處理HTTP,FTP,GOPHER,SSL和WAIS等協議。但它不能處理如POP,NNTP,RealAudio以及其它類型的東西。linux
你可能會想到一些問題:緩衝有多大的用處?何時目標(object)應該或者不該該被緩衝?例如,緩衝信用卡號碼是徹底不適合的,腳本文件的執行結果在遠程服務器端,站點常常更新(像www.cnn.com)或者甚至站點不容許緩衝,這些狀況也都是不適合緩衝的。Squid處理各類狀況是不錯的(固然,這須要遠程站點按標準形式工做)。可執行的cgi-bin腳本文件不被緩衝,返回正確頁眉的頁面是在一段限制了的時間內被緩衝,並且你能夠規定特殊的規則以肯定什麼是能夠或不能夠被緩衝的,還有緩衝的時間爲多長。談到緩衝的用處有多大,這要看Internet的容量大小,各有不一樣。對於小型的緩衝區(幾轉磁盤空間)來講,返回值很是高(達到25%)。這個空間緩衝常常訪問的站點,如netscape,cnn和其它一些相似狀況的站點。若是你增長一倍緩衝的磁盤空間,但你不會成倍增長你的命中率。這是由於你開始緩衝網絡中剩餘部分時,這些一般時很大的並且不多被訪問。一個很是大的高速緩衝區,有20轉左右,可能返回值仍小於50%,除非你對保存數據的時間長短常常改變(通常地你不要分配20轉的磁盤空間,由於頁面很快就會過期,應該被刪除掉)。咱們在這裏說的目標(object)指的是可保存的web頁面或其它相似的可下載頁面(ftp文件或目錄內容也稱爲目標(object))。web
3.Squid的下載和獲取正則表達式
squid在諸多unix like系統上都有軟件庫的提供,好比在ubuntu可使用apt install squid進行安裝,也能夠到squid的官網直接下載二進制的編譯好的軟件包, 下載地址ubuntu
也就是普通的代理服務,,必須在客戶端的瀏覽器、QQ聊天工具、下載軟件等程序中手動設置代理服務器的地址和端口,而後才能使用代理服務來訪問網絡。對於網頁瀏覽器,訪問網站時的域名解析請求也會發送給指定的代理服務器。vim
提供與傳統代理相同的功能和服務,其區別在於客戶機不須要指定代理服務器的地址和端口,而是經過默認路由、防火牆策略將web訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對於客戶機來講是「透明」的,用戶甚至並不知道本身在使用代理服務,因此稱爲「透明代理」。windows
CentOS7虛擬機、squid-4.1.tar.gz軟件包瀏覽器
tar zxvf squid-4.1.tar.gz -C /opt緩存
./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-pthreads --enable-storeio=ufs,aufs --enable-err-language="Simplify_Chinese" \ #錯誤信息的顯示語言 --enable-underscore \ #容許URL中有下劃線 --enable-poll \ #使用Poll()模式,提高性能 --enable-gnuregex #使用GUN正則表達式
make && make installbash
ln -s /usr/local/squid/sbin/* /usr/local/sbin/服務器
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf
。。。省略 http_port 3128 cache_effective_user squid #添加 指定程序用戶 cache_effective_group squid #添加 指定帳號基本組
squid -z #初始化緩存目錄
squid #啓動服務
vim /etc/init.d/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 shutdown &> /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 chmod +x /etc/init.d/squid #給與執行權限 chkconfig --add squid chkconfig --level 35 squid on #加入開機自啓動而且在三、5模式下開機自啓動
測試下服務啓動腳本
主機 | IP地址 | 主要服務 |
---|---|---|
CentOS7-1 | 172.16.10.129 | http服務 |
CentOS7-2 | 172.16.10.128 | squid服務 |
windows7 | 172.16.10.131 | 客戶機 |
vim /etc/squid.conf
# And finally deny all other access to this proxy http_access allow all #添加 容許任意客戶機使用代理服務 http_access deny all # Squid normally listens to port 3128 http_port 3128 cache_mem 64 MB #指定緩存功能所使用的內存空間大小,便於保持訪問較頻繁的WEB對象,容量最好爲4的倍數,單位爲MB,建議設爲物理內存的1/4 reply_body_max_size 10 MB #容許用戶下載的最大文件大小,以字節爲單位。默認設置0表示不進行限制 maximum_object_size 4096 KB #容許保存到緩存空間的最大對象大小,以KB爲單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶 cache_effective_user squid #添加 指定程序用戶 cache_effective_group squid #添加 指定帳號基本組 # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
iptables -F #清空防火牆策略
setenforce 0 #關閉SELinux
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #容許訪問3218端口的tcp數據包經過
service squid restart
systemctl stop firewalld.service
setenforce 0
systemctl start httpd #開啓web服務
首先代理服務器要配置雙網卡,
其中ens33爲內網網關192.168.100.1;
ens36爲外網網關12.0.0.1;
web服務器 12.0.0.12
client客戶端 192.168.100.50
echo "1" > /proc/sys/net/ipv4/ip_forward #開啓路由轉發 iptables -F #清空防火牆策略 iptables -t nat -F
#這邊解釋一下,可能有人會問不該該是3128端口麼,其實不是,由於我使用squid4.1版本作的,有些東西和3.4版本可能會不一樣,若是設置3128端口,squid服務會沒法開啓的,由於3128端口在被佔用。
重啓squid代理服務
service squid stop
service squid start
netstat -ntap | grep squid
tcp 0 0 192.168.100.1:3129 0.0.0.0: LISTEN 57899/(squid-1)
tcp6 0 0 :::3128 ::: LISTEN 57899/(squid-1)這裏能夠看到咱們設置的3129端口已經啓動了
這樣透明代理就完成了
#注:squid4.1和squid3.4版本配置仍是有些不一樣的,但願能幫助到各位