Squid 代理伺服器
一。Squid伺服器
Squid 主要提供快取加速、應用層過濾控制的功能。
代理的工作機制
1. 代替客戶機向網站請求資料,從而可以隱藏使用者的真實IP地址。
2. 將獲得的網頁資料(靜態 web 元素)儲存到快取中併發送給客戶機,以便下次請求相同的資料時快速響應。
代理伺服器的概念及其作用
代理伺服器是一個位於客戶端和原始(資源)伺服器之間的伺服器,為了從原始伺服器取得內容,客戶端向代理伺服器傳送一個請求並指定目標原始伺服器, 然後代理伺服器向原始伺服器轉交請求並將獲得的內容返回給客戶端。
其主要作用有:
資源獲取∶代替客戶端實現從原始伺服器的資源獲取;
加速訪問∶代理伺服器可能離原始伺服器更近,從而起到一定的加速作用;
快取作用∶代理伺服器儲存從原始伺服器所獲取的資源,從而實現客戶端快速的獲取
隱藏真實地址∶代理伺服器代替客戶端去獲取原始伺服器資源, 從而隱藏客戶端真實資訊。
Squid 代理的型別
傳統代理∶適用於Internet, 需在客戶機指定代理伺服器的地址和埠。
透明代理∶客戶機不需指定代理伺服器的地址和埠,而是通過預設路由、防火牆策略將web訪問重定向給代理伺服器處理。
反向代理∶如果 Squid 反向代理伺服器中快取了該請求的資源,則將該請求的資源直接返回給客戶端,否則反向代理伺服器將向後臺的 WEB 伺服器請求資源,然後將請求的應答返回給客戶端,同時也將該應答快取在本地,供下一個請求者使用。
二。原始碼編譯安裝Squid服務
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1.編譯安裝 Squid
yum -y install gcc gcc-c++ make #準備安裝環境 cd /opt tar zxvf squid-3.5.28.tar.gz -C /opt/ cd /opt/squid-3.5.28 ./configure --prefix=/usr/local/squid \ #指定安裝目錄路徑 --sysconfdir=/etc \ #指定配置檔案路徑--enable-arp-acl \ #MAC地址管控,防止客戶端使用IP欺騙 --enable-linux-netfilter \ #使用核心過濾 --enable-linux-tproxy \ #支援透明代理模式 --enable-async-io=100 \ #非同步IO,提升儲存效能 --enable-err-language="Simplify_Chinese" \ #錯誤資訊的顯示語言(簡體中文) --enable-underscore \ #允許URL中有下劃線 --disable-poll \ #關閉預設使用poll模式 --enable-epoll \ #開啟epoll模式提升效能 --enable-gnuregex #使用GNU正則表示式 ------------------------------------------------------------------------- ./configure --prefix=/usr/local/squid \ --sysconfdir=/etc \ --enable-arp-acl \ --enable-linux-netfilter \ --enable-linux-tproxy \ --enable-async-io=100 \ --enable-err-language="Simplify_Chinese" \ --enable-underscore \ --disable-poll \ --enable-epoll \ --enable-gnuregex make -j 2 && make install
ln -s /usr/local/squid/sbin/*/usr/local/sbin/ #建立軟連結使用squid命令
useradd -M -s /sbin/nologin squid #不建立宿主目錄,無法登入系統,只作為服務使用使用者
chown -R squid:squid /usr/local/squid/var/ #此目錄用於存放快取檔案
2.修改 Squid 的配置檔案
vim /etc/squid.conf
......
--- 56行 ---插入
http_access allow all #放在http_access deny all之前,允許任意客戶機使用代理服務,控制規則自上而下匹配,則下一條拒絕所有不會執行
http_access deny all
http_port 3128 #用來指定代理服務監聽的地址和埠(預設的埠號為 3128)
--- 61行 ---插入
cache_effective_user squid #新增,指定程式使用者,用來設定初始化、執行時快取的賬號,否則啟動不成功
cache_effective_group squid #新增,指定賬號基本組
coredump_dir /usr/local/squid/var/cache/squid #指定快取檔案目錄
3. Squid的執行控制
squid -k parse #檢查配置檔案語法是否正確
#啟動 squid,第一次啟動 squid 服務時,會自動初始化快取目錄
squid -z #-z 選項用來初始化快取目錄
squid #啟動 squid 服務
#squid -k kill 程序號 #關閉服務
netstat -anpt | grep "squid" #驗證服務是否開啟
4. 建立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 kill &> /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
#chkconfig: 2345 90 25的2345是預設自啟動級別,如果-代表任何級別都不自啟動,90是啟動優先順序,25是關閉優先順序,優先順序範圍0-100,數字越大優先順序越低
chmod +x /etc/init.d/squid
chkconfig --add squid #新增到系統服務
#chkconfig --level 35 squid on #設定自啟動級別,不設定使用的是指令碼設定
service squid status #檢視服務狀態
三。構建傳統代理服務
客戶端通過提前設定代理伺服器對web服務進行訪問,squid對web伺服器隱藏了客戶端的真實ip地址,並且加快了響應速度,如果客戶端請求的資源在squid伺服器快取中,將快速回應客戶端無需多次向web伺服器傳送請求
配置環境
主機 |
IP地址 |
所需軟體、工具 |
Squid伺服器 |
192.168.150.20 |
squid-3.5.28 |
Web 伺服器 |
192.168.150.25 |
http |
客戶機 |
192.168.150.60 |
|
配置思路
(1)Squid伺服器可以配置代理相應的快取引數對服務進行優化
(2)Squid伺服器需要對防火牆的轉發規則進行修改,允許轉發所有入站資料
(3)web伺服器安裝web服務並可自定義頁面資訊
(4)客戶端需要指定代理伺服器的IP及埠
1. 修改配置資訊增加代理優化引數
vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
--63行--插入優化引數
cache_mem 64 MB #指定快取功能所使用的記憶體空間大小,便於保持訪問較頻繁的WEB物件,容量最好為4的倍數,單位為MB,建議設為實體記憶體的1/4
reply_body_max_size 10 MB #允許使用者下載的最大檔案大小,以位元組為單位,當下載超過指定大小的Web物件時,瀏覽器的報錯頁面中會出現“請求或訪問太大”的提示預設設定0表示不進行限制
maximum_object_size 4096 KB #允許儲存到快取空間的最大物件大小,以KB為單位,超過大小限制的檔案將不被快取,而是直接轉發給使用者
service squid restart
2. 修改防火牆規則
iptables -F
iptables -I INPUT -p tcp --dport 3128 -jACCEPT#允許轉發所有入站的資料包
3. web伺服器配置web服務
yum -y install httpd
vim /var/www/html/index.html
<html><body><h1>this is web con</h1>
<img src="gtx.jpg"/>
</body></html>
systemctl start httpd
4. 客戶機使用代理訪問
#客戶機的代理配置(win10)開啟瀏覽器,設定-->高階-->代理設定-->手動開啟代理伺服器-->儲存
(地址∶ Squid伺服器IP地址,埠:3128)
5. 分析日誌檔案資訊和資料包報文
#動態檢視Squid伺服器訪問日誌的新增記錄
tail -f /usr/local/squid/var/logs/access.log
#動態檢視web伺服器訪問日誌的新增記錄
tail -f /var/log/httpd/access_log
6. 抓取資料資訊進行分析
tcpdump tcp -i ens33 -t -s 0 -c 50 -w ./squid.cap
sz squid.cap #傳入到windows系統中
四。構建透明代理伺服器
客戶端不知道中間有squid代理伺服器的存在,不需要設定客戶端的代理服務,正常對web服務發起請求,該請求會直接被squid重定向至代理服務的埠進行轉發,web伺服器會認為是squid伺服器發起的請求,正常處理並轉發資料,squid伺服器收到後根據規則會對部分資源進行快取,並修改目的地址轉發給客戶端,整個過程對客戶端都是透明的,如果下次請求有快取的資料squid伺服器會直接傳送給客戶端,減少響應時間
配置環境
主機 |
IP地址 |
所需軟體、工具 |
Squid伺服器 |
內網ens33∶192.168.150.20 外網ens36∶12.0.0.20 |
squid-3.5.28 |
Web 伺服器 |
192.168.15.25 |
http |
客戶機 |
12.0.0.10 |
|
配置思路
(1)Squid伺服器新增雙網絡卡,對Squid配置檔案中需要透明代理服務的網絡卡IP進行設定
(2)開啟路由轉發功能,設定資料重定向輸入到代理埠
(3)因為是虛擬機器web伺服器和客戶機指向Squid網絡卡
1. Squid伺服器網絡卡配置
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
systemctl restart network
2. 修改squid服務配置檔案
vim /etc/squid.conf
..........
http_access allow
all http_access deny all
--60行--修改新增需要提供代理服務的網絡卡IP地址,和支援透明代理選項 transparent
http_port 12.0.0.20:3128 transparent
service squid restart
3. 開啟路由轉發, 實現本機中不同網段的地址轉發
echo 'net.ipv4.ip_forward = 1'>> /etc/sysctl.conf
sysctl-p
4. 修改防火牆規則
iptables -F #清空原有的規則
iptables -t nat -F #清空nat表規則
#用於轉發http協議,將80埠重定向輸入到3128埠
iptables -t nat -I PREROUTING -i ens36 -s 12.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
#用於轉發https協議 ,將443埠重定向輸入到3128埠
iptables -t nat -I PREROUTING -i ens36 -s 12.0.0.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
5. web伺服器修改IP地址和閘道器資訊
vim /etc/sysconfig/network-scripts/ifcfg-ens33
6. 客戶機設定閘道器進行訪問
關閉客戶機的瀏覽器之前設定的代理伺服器的功能後訪問http://192.168.150.25
7. 分析Squid和web日誌
#檢視 Squid 訪問日誌的新增記錄
tail -f /usr/local/squid/var/logs/access.log
#檢視 Web 訪問日誌的新增記錄,顯示的是由代理伺服器代替客戶機在訪問
tail -f /var/log/httpd/access.log
8. 抓取報文進行分析
tcpdump tcp -i ens36 -t -s 0 -c 100 -w ./target.cap
sz target.cap