您好,登錄后才能下訂單哦!
1· Squid代理的概述原理
2· 代理的基本類型
3· Squid 服務腳本
4· 構建代理服務器(傳統代理、透明代理)
5· 總結
1)代理的工作機制
1.什么是 Squid ?
Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher、HTTPS和HTTP協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。
2·緩存的工作原理
squid 是工作在應用層的代理服務軟件,squid 主要提供緩存加速和應用層過濾控制的功能。在這里舉個列子:當客戶機通過代理來請求 web 頁面時,那么代理服務器會檢查自己有沒有你請求的頁面,有的話就直接發送給客戶端,沒有的話,代理服務器就會向web發送請求,當獲得了web頁面后,就會把數據保存到緩存中,并發給客戶端。
下圖是代理服務的緩存機制過程:
2)·HTTP 代理的緩存說明:
HTTP代理的緩存加速對象主要針對文字、圖像等靜態 Web 元素。使用緩存機制后,客戶端在訪問 同一 Web 元素,就可以直接從代理服務器的緩存中得到你想要的。這樣做的好處就減少 對 Web 請求的過程,提高了客戶端的訪問速度
還有就是客戶機訪問的 Web 訪問請求實際上是由代理服務器帶完成的,這樣就可以隱藏用戶的真實 IP,有一定的保護作用,代理服務器還有機會對訪問的目標、客戶機的地址、訪問的時間段進行過濾控制。
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服務器的防火墻沒有關閉;防火墻策略寫入有誤、修改配置文件后是否重啟服務,查看端口服務是否啟動。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。