1· Squid代理的概述原理
2· 代理的基本類型
3· Squid 服務腳本
4· 構建代理服務器(傳統代理、透明代理)
5· 總結linux
1)代理的工做機制c++
1.什麼是 Squid ?web
Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher、HTTPS和HTTP協議。和通常的代理緩存軟件不一樣,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理全部的客戶端請求。正則表達式
2·緩存的工做原理apache
squid 是工做在應用層的代理服務軟件,squid 主要提供緩存加速和應用層過濾控制的功能。在這裏舉個列子:當客戶機經過代理來請求 web 頁面時,那麼代理服務器會檢查本身有沒有你請求的頁面,有的話就直接發送給客戶端,沒有的話,代理服務器就會向web發送請求,當得到了web頁面後,就會把數據保存到緩存中,併發給客戶端。vim
下圖是代理服務的緩存機制過程:windows
2)·HTTP 代理的緩存說明:瀏覽器
HTTP代理的緩存加速對象主要針對文字、圖像等靜態 Web 元素。使用緩存機制後,客戶端在訪問 同一 Web 元素,就能夠直接從代理服務器的緩存中獲得你想要的。這樣作的好處就減小 對 Web 請求的過程,提升了客戶端的訪問速度緩存
還有就是客戶機訪問的 Web 訪問請求其實是由代理服務器帶完成的,這樣就能夠隱藏用戶的真實 IP,有必定的保護做用,代理服務器還有機會對訪問的目標、客戶機的地址、訪問的時間段進行過濾控制。bash
1)傳統代理:
也就是普通的代理服務,好比咱們用的瀏覽器、QQ聊天工具等須要手動設置代理服務器的地址和端口,才能使用代理服務的。
下圖是瀏覽器設置代理服務器地址圖:
對以上圖說明:每一個軟件或者是瀏覽器設置代理服務器的位子是不同的,只要找到選項,幾乎就在裏面,設好代理服務器的地址與端口便可。
2)應用方向
傳統代理:多用於 Internet 環境,QQ 程序、下載工具等,能夠規避服務器的併發鏈接。
透明代理:多用於局域網環境,好比在 Linux 網關中啓用代理,局域網主機就不用再進行額外的設置就能更快的訪問。
部署前說明:
1·部署環境是:CenOS 7.4
2·部署方式:手工編譯, 版本爲 Squid 3.4.6
3·提供源碼包下載地址:Squid 緩存源碼包,須要請點擊 密碼:63xn
傳統代理服務器拓撲圖以下:
開始部署:
1)編譯安裝 Squid,如今是手工編譯的,在這以前咱們須要把源碼包下載,進行解壓,安裝編譯環境、指定安裝路徑與功能模塊等
[root@localhost ~]# tar zxvf squid-3.4.6.tar.gz -C /opt/ ----(解壓到 /opt 目錄下)
[root@localhost ~]# yum install gcc gcc-c++ make -y ----(安裝編譯環境)
[root@localhost ~]# cd /opt/squid-3.4.6/
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid \--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tpoxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex
2)對以上模塊解釋:
1·指定安裝路徑
2·單獨將配置文件放在 /etc
3·能夠在規則中設置爲直接經過客戶端MAC進行管理,防止客戶端使用IP欺騙
4·使用內核過濾
5·支持透明模式
6·異步 I/O,提高存儲性能
7·錯誤信息的顯示語言
8·容許 URL 中有下劃線
9·使用POLL()模式,提高性能
10·使用GNU 正則表達式
[root@localhost squid-3.4.6]# make && make install ----(製做、編譯安裝,這裏等待的時間須要稍長一點,請耐心等待)
3)安裝完畢,如今須要對 Squid 進行一些優化,使之後咱們用起來更加符合平常日操做習慣
[root@localhost squid-3.4.6]# ln -s /usr/local/squid/sbin/ /usr/local/sbin ——(建立軟鏈接)
[root@localhost squid-3.4.6]# useradd -M -s /sbin/nologin squid ---(建立管理用戶)
[root@localhost squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/
4)修改主配置文件,有圖有文字說明:
[root@localhost squid-3.4.6]# vim /etc/squid.conf ----(在編譯的時候就指定了主配置文件放在 /etc 下)
修改以下內容:
http_access allow all -----(須要添加,意思是運行全部人訪問http,這裏至關因而一個ACL訪問控制列表)
cache_effective_user squid ------(添加指定的程序用戶)
cache_effective_group squid ------(添加 指定的帳號基本組)
下圖是配置文件添加內容:
檢查配置文件語法,看看是否有報錯:
[root@localhost squid-3.4.6]# squid -k parse ---(檢查語法,有報錯問題幾乎是配置文件的問題)
[root@localhost squid-3.4.6]# 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 -antp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在啓動 squid...."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/nulll
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -antp | 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
優化 squid 與 啓動腳本
[root@localhost squid-3.4.6]# chmod +x /etc/init.d/squid ---(給腳本執行權限)
[root@localhost squid-3.4.6]# chkconfig --add squid ----(加入系統服務)
[root@localhost squid-3.4.6]# chkconfig --level 35 squid on ----(設置開機自啓)
到此 Squid 服務基本配置完成。接下來咱們須要先來作傳統代理模式
[root@localhost squid-3.4.6]# vim /etc/squid.conf ---(修改配置文件)
添加內容以下:
cache_mem 64 MB ---(#指定緩存功能使用的內存空間大小,以便於保持訪問較頻繁的web對象,容量最好爲4的倍數,單位爲MB,建議設爲物理內存的1/4)
reply_body_max_size 10 MB ----(容許用戶下載的最大文件大小,以字節爲單位,默認0,表示不限制
)
maximum_object_size 4096 KB ---(容許保存到緩存空間的最大對象大小,以KB爲單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶)
下圖是修改後的配置文件:
啓動前準備:
[root@localhost squid-3.4.6]# squid -k parse ---(再次檢查配置文件語法)
[root@localhost squid-3.4.6]# squid -z ---(初始化緩存目錄)
[root@localhost squid-3.4.6]# iptables -F ----(清空防火牆規則,便於以後咱們本身填寫策略)
[root@localhost squid-3.4.6]# iptables -t nat -F
[root@localhost squid-3.4.6]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ---(添加防火牆策略:容許 tcp 協議 3128端口經過)‘
[root@localhost squid-3.4.6]# setenforce 0 ---(關閉加強功能)
[root@localhost squid-3.4.6]# service squid start ----(啓動服務)
正在啓動 squid...
[root@localhost squid-3.4.6]# netstat -antp | grep 3128 ----(查看啓動端口)
tcp6 0 0 :::3128 :::* LISTEN 36813/(squid-1)
方法:搭建 Apache 網站服務器,用 windows 客戶端 IE 瀏覽器設置代理服務器,訪問 Apache 網站服務器,而後查看Apache 日誌文件,查看是誰訪問的Apache。若是是代理服務器說明咱們部署成功。
1)在另一臺服務器上搭建 Apache 服務器:
[root@localhost ~]# yum install httpd -y ---(注意這裏是在其餘服務器上安裝Apache)
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start httpd.service
2)在客戶機上給 IE 瀏覽器設置 Squid 代理服務器的地址與端口
這裏用圖表示:
開始訪問 apache 網站服務器:
以上圖說明:訪問成功,可是咱們須要知道是誰去訪問的,因此如今須要看看 apache 的日誌文件。
下圖是 Apache 的日誌文件:
上圖說明:傳統代理服務器部署成功!
透明代理提供的服務功能與傳統代理是一致的,可是其 」 透明 「 的實現依賴默認路由和防火牆的重定向策略。
在Linux 網關上,構架squid 爲客戶機訪問 Internet 提供代理服務
在全部的局域網客戶機上,只須要爭取設置IP地址、默認網關,而不須要手動指定代理服務器的地址、端口等信息。
根據以上的理論,因此咱們應該把 Squid 代理服務器 再添加一塊新的網卡,透明代理的拓撲圖以下:
開始部署:
[root@localhost ~]# vim /etc/squid.conf ---(修改配置文件)
修改內容以下:
http_port 192.168.100.1:3128 transparent ----(修改監聽地址,由於是內網須要訪問外網,因此監聽的是內網 transparent:意思就是透明模式)
配置文件修改得很少,接下來就是須要設置 iptables 的重定向策略:
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
開啓路由轉發功能:
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
重啓 squid 代理服務器
[root@localhost ~]# service squid restart
正在關閉 squid...
正在啓動 squid...
透明模式驗證:
說明:透明模式 是不須要手動設置代理服器的,訪問以下圖:
下圖是apache 日誌分析,看看是那一臺主機訪問的web
結論:如上圖,是不須要手動設置代理服務器,訪問web服務器是由代理服務器去訪問!
若是要再Linux客戶機的命令行界面中使用代理服務器(好比:elinks 網頁瀏覽器、wget 下載工具),必須經過環境變量來指定代理服務器的地址、端口等信息。
[root@localhost ~]# vim /etc/profile ---(添加以下內容到環境變量中)
添加以下內容:
HTTP_PROXY=http:192.168.100.50:3128 ---(爲使用HTTP協議指定代理)
HTTPS_PROXY=http:192.168.100.50:3128 ---(爲使用HTTPS協議指定代理)
FTP_PROXY=http:192.168.100.50:3128 ----(爲使用FTP協議指定代理)
NO_RPOXY=192.168.20.,192.168.30. ---(對兩個局域網段不使用代理)
export HTTP_PROXY HTTPS_PROXY FRP_PROXY NO_PROXY**[root@localhost ~]# source /etc/profile
總結:
1·要知道,咱們訪問的是web服務器,若是 Squid緩存代理服務器有訪問的數據,代理服務器就會直接給予回饋,若是沒有,squid 就會去找web服務器要數據,再返回給客戶端。
2·代理的基本類型有:傳統代理、透明代理。之間最大的區別是:須要手動設置代理服務器的地址和端口。
3·排錯可能性:·訪問的時候,web服務器的防火牆沒有關閉;防火牆策略寫入有誤、修改配置文件後是否重啓服務,查看端口服務是否啓動。