1. 程式人生 > >Squid緩存服務器原理與實戰演練

Squid緩存服務器原理與實戰演練

Squid緩存服務器原理與實戰演練

Squid服務基礎講解
代理緩存機制:
技術分享圖片
代理的基本類型:
1、 傳統代理:需要在客戶端軟件手動設置指定代理服務器
技術分享圖片

2、 透明代理:無需用戶手動指定,通過路由、防火墻策略將訪問重定向
技術分享圖片
Squid 反向代理:為網站服務
技術分享圖片
下面進行實戰演練!

實驗環境:
代理服務器squid 192.168.80.181
HTTP服務器192.168.80.182
Win7客戶端 192.168.80.9
代理服務器端配置如下
[root@aa squid-3.5.27]# tar xf squid-3.5.27.tar.gz -C /opt/ #解壓squid源碼包
[root@aa squid-3.5.27]# yum install perl-devel #安裝perl語言編譯插件

[root@aa squid-3.5.27]# cd /opt/squid-3.5.27/
[root@aa squid-3.5.27]# ./configure
--prefix=/usr/local/squid
--sysconfdir=/etc
--enable-arp-acl //支持acl
--enable-linux-netfilter //支持透明代理
--enable-linux-tproxy //重定向
--enable-async-io=100
--enable-err-language="Simplify_Chinese"
--enable-underscore --enable-poll
--enable-gnuregex
[root@aa squid-3.5.27]# make && make install //配置、編譯、安裝
[root@aa squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin //
[root@aa squid-3.5.27]# useradd -M -s /sbin/nologin squid
[root@aa squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/
[root@aa squid-3.5.27]# vi /etc/squid.conf
http_port 3128 //59行,在下面新增
visible_hostname 192.168.80.181
cache_mem 64 MB
cache_swap_low 80
cache_swap_high 97
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 //68行,去掉註釋配置硬盤緩存,打開#.緩存目錄100M,其中一級目錄16個,二級256個
cache_effective_user squid
cache_effective_group squid //制定squid用戶的執行主和組
[root@aa squid-3.5.27]# squid -k parse //檢查配置文件
[root@aa squid-3.5.27]# squid –k rec //重新加載配置文件
[root@aa squid-3.5.27]# squid -zX //初始化緩存目錄
[root@aa squid-3.5.27]# vi /etc/init.d/squid //制作管理腳本
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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 "用法:{start | stop | restart | reload | check | status}"
esac
[root@aa squid-3.5.27]# chmod +x /etc/init.d/squid //賦予啟動腳本執行權限
[root@aa squid-3.5.27]# chkconfig --add squid //將squid添加到管理腳本
[root@aa squid-3.5.27]# chkconfig squid on //設置開機自啟動
[root@aa squid-3.5.27]# service firewalld stop
[root@aa squid-3.5.27]# setenforce 0
[root@aa squid-3.5.27]# service squid start
[root@aa squid-3.5.27]# netstat -anpt | grep 3128
此時已經可以通過代理服務器訪問www服務器了
下面是http服務器的配置
[root@ab ~]# yum install -y httpd //安裝httpd服務器
[root@ab ~]# service httpd start //啟動
下面客戶端直接訪問測試
技術分享圖片
沒有指定代理服務器,訪問正常
下面客戶端指定代理服務器

技術分享圖片
設置完畢,去http服務器上監控訪問日誌
[root@ab ~]# tail -f /etc/httpd/logs/access_log
下面再去訪問182
技術分享圖片
技術分享圖片
訪問依舊成功,查看日誌發現,實際的訪問者為181代理服務器。
du -sh /usr/local/squid/var/cache/squid/
技術分享圖片
緩存服務器內容已經緩存了

-------------------限制下載文件的大小------------
在http服務器上配置
[root@ab ~]# cd /var/www/html/
[root@ab html]# dd if=/dev/zero of=test1.tgz bs=1M count=11
[root@ab html]# dd if=/dev/zero of=test2.tgz bs=1M count=2 //復制出兩個tgz文件用於下載測試。
[root@aa squid-3.5.27]# vi /etc/squid.conf
reply_body_max_size 10 MB //限制文件超過10M的不能下載
[root@aa squid-3.5.27]# service squid restart
客戶端測試下載情況
當訪問下載test2.tgz時可以成功下載
技術分享圖片

當訪問test1.tgz時,由於大小為11M,則不能下載
技術分享圖片

-------------下面配置透明代理------------------
代理服務器做為內網的網關設備,兩塊網卡,一塊連接內網,另一塊連接外網,測試客戶端主機要指網關。
首先理清實驗拓撲:通過181的網關代理,使80.9的win7能夠上互聯網
Win7:ip地址為192.168.80.9,網關地址為192.168.80.181
代理squid:內網網卡地址為192.168.80.181,使用橋接模式連外網

下面進行實驗準備,打開代理服務器的橋接模式,兩塊網卡地址都已經獲得了
181為內網,123.197為外網口地址
技術分享圖片
Ping百度是通的,說明可以上網
技術分享圖片
將win7之前的指定代理服務器去掉,此時是上不了網的
技術分享圖片
指定他的網關為192.168.80.181
技術分享圖片
下面去配置squid透明代理
[root@aa ~]# vi /etc/squid.conf
http_port 192.168.80.181:3128 transparent //將改行修改如此,指定內網卡監聽端口
[root@aa ~]# service squid restart
[root@aa ~]# yum install -y iptables-services
[root@aa ~]# systemctl start iptables
[root@aa ~]# iptables –F //清空防火墻nat表內容
[root@aa ~]# iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -s 192.168.80.0/24 -j REDIRECT --to-ports 3128 //對nat表的PREROUTING鏈做操作,指定內網卡ens33接收到的來自192.168.80.0/24網段的80端口的tcp請求全部轉發給3128端口處理
[root@aa ~]# service iptables save //保存防火墻配置
技術分享圖片
Win7客戶端訪問百度成功

-------------------下面可以配置acl訪問控制---------
[root@aa ~]# vi /etc/squid.conf
Acl和防火墻一樣是從上向下依次匹配,匹配及停止,並執行匹配的動作。
#acl localnet src 192.168.0.0/16 //註釋本行默認配置

http_access allow all //在本行上面新增ACL語句,如果在該行下面插入,則訪問的已經被全部允許了

1.禁止某IP地址主機上網
acl nolink src 192.168.90.9
http_access deny nolink

2.禁止某網段在某時間段上網
acl nolink src 192.168.1.0/24
acl nowang time MTWHF 9:00-11:30
http_access deny nolink nowang

3.禁止所有人訪問某網站(精確匹配)
acl nourl dstdomain -i www.qq.com
http_access deny nourl

4.禁止所有人訪問某些網站(含有關鍵字的都會過慮)
acl nourl url_regex -i taobao.com
http_access deny nourl

5.禁止下載某類型的文件
acl nof urlpath_regex -i .avi$ .mkv$
http_access deny nof

6.禁止訪問某類型的網站
acl nop url_regex -i ^emule:// ^thunder
http_access deny nop

修改squid配置文件測試
[root@aa ~]# vi /etc/squid.conf
#acl localnet src 192.168.0.0/16 //註釋本行默認配置
技術分享圖片
[root@aa ~]# service squid restart
技術分享圖片
再次訪問,訪問被拒絕

---------------配置sarg日誌---------------
註意:需要在代理服務器上安裝WWW服務器
[root@aa ~]# yum install -y httpd
[root@aa sarg-2.3.11]# tar xf sarg-2.3.11.tar.gz -C /opt/
[root@aa sarg-2.3.11]# cd /opt/sarg-2.3.11/
[root@aa sarg-2.3.11]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
[root@aa sarg-2.3.11]# make && make install
[root@aa sarg-2.3.11]# vi /etc/sarg/sarg.conf
7 access_log /usr/local/squid/var/logs/access.log //squid的訪問日誌位置
25 title "Squid User Access Reports" //網頁標題
120 output_dir /var/www/html/squid-reports //分析報告的存放位置
178 user_ip no //不使用IP代替用戶ID
184 topuser_sort_field BYTES reverse //升序排列
190 user_sort_field BYTES reverse
206 exclude_hosts /usr/local/sarg/noreport //設置不生成報告的主機
257 overwrite_report no
289 mail_utility mailx //指定發郵件命令
434 charset UTF-8
518 weekdays 0-6 //指定top排序星期周期
523 hours 7-12,14,16,18-20 //指定top排序時間周期
633 www_document_root /var/www/html //網頁根目錄
[root@aa sarg-2.3.11]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@aa sarg-2.3.11]# sarg //啟動
SARG: Records in file: 102, reading: 100.00%
SARG: Successful report generated on /var/www/html/squid-reports/2018Mar21-2018Mar22

http://192.168.80.181/squid-reports/ //訪問日誌頁
技術分享圖片
----------------配置squid反向代理-------------
Squid服務器:內網卡192.168.80.181 外網卡192.168.80.90.181
兩臺web服務器:192.168.80.182 192.168.80.183
Win7客戶端:192.168.90.9 gw192.168.90.181
[root@aa network-scripts]# vi /etc/squid.conf
http_port 192.168.90.181:80 vhost vport
cache_peer 192.168.80.182 parent 80 0 no-query round-robin originserver name=s1
cache_peer 192.168.80.183 parent 80 0 no-query round-robin originserver name=s2
cache_peer_domain s1 www.test.com
cache_peer_domain s2 www.abc.com
[root@aa network-scripts]# service squid restart
下面去客戶端測試
修改hosts文件
192.168.90.181 www.test.com
192.168.90.181 www.abc.com
訪問成功
技術分享圖片如果報錯訪問被拒絕deny改為allow
技術分享圖片
技術分享圖片

Squid緩存服務器原理與實戰演練