squid 代理


squid代理

課程目標

  • 了解squid的應用場景
  • 理解squid的工作原理和作用
  • 理squid的代理類型(重點)
  • 掌握squid的正向和透明代理的配置(重點)
  • 能夠根據需求對squid服務器做簡單的訪問控制

一、squid基本概述

1.squid是什么?用來做什么?

squid cache(簡稱squid)是流行最廣的,使用最普遍的開源緩存代理服務器

2.squid的作用和應用場景有哪些?

  • 用來做前置的web緩存,加快用戶訪問web的速度
  • 代理內網用戶訪問互聯網資源
  • 設置訪問控制策略,控制用戶的上網行為
  • 主要支持http、ftp等應用協議
  • 官網地址:http://www.squid-cache.org/

3.常見的代理服務器軟件

  • squid 非常古老,功能齊全
  • varnish 性能優於squid,功能相對沒有squid多
  • 其他 haproxy、nginx等

4.squid的工作原理

優點:減少訪問請求,節約帶寬

具有ACL(access control list)訪問控制列表功能,對客戶機上網行為靈活控制

對內網客戶機具有保護作用

二、squid代理類型

1.正向代理

2.透明代理

正向代理的過程隱藏了真實的請求客戶端,服務器不知道真實的客戶端是誰,客戶端請求的服務都被代理服務器代替請求。我們常說的代理就是正向代理,正向代理代理的是請求方,也就是客戶端。

3.反向代理

反向代理的過程隱藏了真實的服務器,客戶不知道真正提供服務的人是誰,客戶端請求的服務都被代理服務器處理。反向代理代理的是響應方,也就是服務端。

4.總結

  • 正向代理和透明代理中的代理服務器和客戶端同屬一個LAN,對server端是透明的,服務器並不知道自己為誰提供服務。作用都是讓內網用戶可以通過代理服務器上互聯網,也可以提高訪問速度,並且可以通過代理服務器的訪問控制限制內網用戶的上網行為。
  • 反向代理的過程隱藏了真實的服務器,對客戶端是透明的,客戶端並不知道真正提供訪問的服務器。可以起到負載均衡端作用,提高用戶的訪問速度。
  • 兩者的區別在於代理的對象不一樣,正向代理代理的對象是客戶端,反向代理代理的對象是服務端。
  • 應用場景
    • 正向和透明代理:一般用於公司內網用戶訪問互聯網,根據需求進行訪問控制
    • 反向代理:一般用於公司服務器集群前做web緩存,提高用戶訪問效率,同時可以起到負責均衡作用,為互聯網提供可持續端web服務。

三、squid代理服務器和SNAT|DNAT的區別

1.SNAT和DNAT

  • 網絡層次:網絡層

    局域網用戶訪問外圍走SNAT模式,同一個數據包,改變數據包頭部的來源地址,再把數據包發到internet

  • 作用:內網用戶上外網(SNAT)和內網服務發布到公網(DNAT)

2.代理服務器模式

  • 網絡層次:應用層

    不改變數據包頭信息,把數據包代理給Internet的服務器,基於應用層端過濾。

  • 應用層:

    協議:http、ftp、pop、smtp、p2p等

  • 作用:緩存頁面,加速訪問,ACL資源訪問控制

  • 反向代理:

    • Internet用戶訪問局域網服務器
    • squid做反向代理服務器,把用戶端請求轉發到后方端真實端服務器,可以做到負載均衡端效果,同時緩存用戶經常訪問的頁面以提高訪問速度。

四、了解squid代理軟件相關信息

1.安裝軟件

squid在本地鏡像里有,只需要配置好本地端yum源即可
yum -y install squid

2.軟件的文件列表

rpm -ql squid
/etc/squid/squid.conf	配置文件
/etc/rc.d/init.d/squid	啟動腳本
/usr/sbin/squid		二進制命令
/usr/share/doc/squid-3.1.23	手冊
/var/log/squid		日志目錄
/var/spool/squid	緩存目錄

3.配置文件說明

[root@agent2 ~]# vim /etc/squid/squid.conf		簡化的配置文件
[root@agent2 ~]# vim /usr/share/doc/squid-3.1.23/squid.conf.documented 	查看文檔
//設置監聽端IP和端口號
http_port 3128
//額外提供給squid使用端內存大小
cache_mem	256MB(默認大小)
//設置squid磁盤緩存最大文件,超過4M端文件不保存到磁盤
maximum_object_size 4MB
//設置squid磁盤緩存最小文件
minimum_object_size 0 KB
//設置squid內存緩存最大文件,超過4M不保存到內存
maximum_object_size_in_memory 4096 KB
//定義squid端cache存放路徑、cache目錄容量(單位M)、一級緩存目錄數量、二級緩存目錄數量
cache_dir ufs /var/spool/squid 100 16 256

//log文件日志格式
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
//log文件存放路徑和日志格式
# access_log /var/log/squid/access.log squid
//設置緩存日志
cache_log /var/log/suqid/cache.log
//log輪轉60天
logfile_rotate 60
//cache目錄使用量大於95%時,開始清理舊的cache
cache_swap_high 95
//cache目錄清理到90%時停止
cache_swap_low 90

//定義本地網段
acl localnet src 192.168.1.0/24
//允許本地網段使用
http_access allow localnet
//拒絕所有
http_access deny all
//主機名
visible_hostname xxx.xxxx.xxxx

//管理員郵箱
cache_mgr 123456@qq.com
 

五、squid端正向代理配置

需求:內網用戶通過瀏覽器指定代理服務器端ip和端口訪問互聯網中端web服務

環境:client:10.1.1.2
squid—server:10.1.1.1和2.2.2.1
web-server:2.2.2.2
(都是僅主機模式)
思路:
1.squid-server需要兩個IP,一個公網一個私網
2.client端只需要和squid-server能互通就行,不需要指定gw和dns
3.client端需要在瀏覽器上設置代理服務器端IP和端口
4.squid-server可以上外網(要能訪問2.2.2.2),client不能上外網,目的就是讓squid代理內網用戶訪問互聯網web服務
5.搭建一個web服務

步驟:
搭建squid-server服務器
1.安裝軟件
yum -y install squid

把主機名改為squid-server.itcast.cc 下面要用到,臨時改就行,要求不嚴

2.根據需求修改配置文件
需求:代理內網所有用戶訪問互聯網端web服務
cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
vim /etc/squid/squid.conf
...
#http_access deny all	注釋掉這行
http_access allow all	允許所有人來訪問代理服務器

cache_dir ufs /var/spool/squid 100 16 256	取消掉前面注釋,打開緩存目錄
增加以下兩行:
visible_hostname squid-server.itcast.cc		定義squid服務器主機名
access_log	/var/log/squid/access.log		定義訪問日志

3.啟動squid服務
service squid start
init_cache_dir /var/spool/squid... Starting squid: .       [ ok ]

服務器啟動后會再緩存目錄里產生以下一級、二級緩存目錄文件
ls /var/spool/squid/
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  swap.state

查看端口3128已經處於監聽狀態

注意:如果再次重啟會報以下警告:
WARNING cache_mem is larger than total disk cache space!
原因:默認情況下,cache_mem為256M,而squid端配置里磁盤緩存默認為100M
解決:
方法1:調小cache_mem的值
在配置文件中增加 cache_mem 100MB
方法2:調大磁盤緩存
修改配置文件中如下內容:
cache_dir ufs /var/spool/squid 256 16 256	——>把100換成256
說明:squid緩存從 內存 ————> 磁盤
	cache_mem	/var/spool/squid
	
	
搭建web服務:
web-server:2.2.2.2

rpm -q httpd
做一個網頁文件,帶圖片的,可以展示緩存,放到/var/www/html/里面
啟動httpd


客戶端測試:
client:10.1.1.2 注意:不需要設置網關和dns
配置代理服務器前:不能夠直接訪問web服務
ping 2.2.2.2 網絡不可達
客戶端內火狐瀏覽器訪問http://2.2.2.1不能連接(因為沒有打開轉發功能echo 1 > /proc/sys/net/ipv4/ip_forward,此處不需要打開)
手動配置代理服務器ip和port
edit-->preferences--advanced-->network-->connection-->setting-->manual proxy configuration
輸入代理服務器端內網地址10.1.1.1,port 3128
此時再輸入http://2.2.2.2
能夠看到自己端網頁文件

內網不直接訪問web服務器,但是通過代理服務器訪問到了,這就是代理

假設web-server宕機,
service httpd stop
客戶端重新輸入http://2.2.2.2,仍能訪問到

六、squid的透明代理配置

需求:內網用戶通過代理服務器可以直接訪問互聯網中的web服務,不用指定proxy地址和端口

思路:
1.squid-server需要兩個IP,一個公網一個私網
2.client端瀏覽器不需要指定代理服務器的IP和端口,但是需要指定網關為squid-server的私網地址
3.squid-server需要借助iptables將內網的80端口重定向到自己的3128端口幫內網用戶代理上網
4.搭建一個web服務
(僅主機模式)

步驟:
client端瀏覽器清空剛剛的代理設置(不要忘記)
client端指定自己的默認網關為squid-server的私有地址
[root@client ~] route add default gw 10.1.1.1

squid-server端配置透明代理服務器並添加iptables規則:
1.修改squid配置文件
vim /etc/squid/squid.conf
http_port 3128 transparent 	//在代理端口后面加上transparent(透明),代表透明代理
重啟服務:
service squid restart

2.添加防火牆規則
iptables -t nat -A PREROUTING -s 10.1.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -nL

說明:
-j REDIRECT 表示端口重定向,僅用於tcp和udp協議
This is only valid if the rule also specifies -p tcp or -p udp

3.客戶端測試驗證
1)打開瀏覽器,輸入http://2.2.2.2	可以看到web-server的web頁面
curl -I http://2.2.2.2/index.html	//查看是否緩存
。。。
X-Cache:HIT from squid-server.itcast.cc
X-Cache-Lookup:HIT from squid-server.itcast.cc:3128		//HIT代表命中,緩存

。。。
X-Cache:MISS from squid-server.itcast.cc
X-Cache-Lookup:MISS from squid-server.itcast.cc:3128	
2)web-server端,查看/var/log/httpd/access.log日志
3)squid-server端,查看/var/log/squid/access.log日志
4)測試web-server服務停止,squid-server是否緩存

只能上外網,訪問頁面,不能ping通2.2.2.2
另外:
windows不能訪問是因為網關不同,網絡不能訪問squid-server端

七、squid實現訪問控制

1.訪問控制配置語法

1.禁止IP地址為192.168.0.100的客戶機上網
	acl test src 192.168.0.100	//定義來源IP,test可以自己定義,代表定義端IP
	http_access deny test	//拒絕test后面定義端源IP :192.168.0.100上網
可以把要管理的IP寫到一個文件里,然后在src后面跟上“文件路徑”

2.禁止192.168.1.0這個網段里端所有客戶機上網
	acl test src 192.168.1.0/255.255.255.0
	或者
	acl test src 192.168.1.0/24
	http_access deny test
	
3.禁止用戶訪問IP為210.21.118.68的網站
	acl test dst 210.21.118.68
	http_access deny test

4.禁止用戶訪問域名為www.163.com的網站
	acl test dstdomain -i www.163.com	//-i 忽略大小寫
	http_access deny test
		
5.禁止用戶訪問域名包含有163.com的網站
	acl test url_regex -i 163.com	//使用正則表達式匹配URL地址
	http_access deny test
	
6.禁止用戶訪問包含有sex關鍵字端URL
	acl test url_regex -i sex
	http_access deny test

7.禁止用戶訪問多個網址
	acl test dstdom_regex "/etc/squid/baddaturl"
	//如果網址太多,可以寫成一個文件,然后在這個文件里一行一個網站寫上要
	http_access deny test
	
8.vip用戶沒有任何限制
	acl vip arp 00:0c:29:79:0C:1A	//綁定mac地址
	http_access allow vip

9.禁止192.168.2.0這個子網內所有客戶機在周一到周五的9點到18點上網
	acl test1 src 192.168.2.0/255.255.255.0
	acl test2 time MTWHF 9:00-18:00		/S日/M一/T二/W三/H四/F五/A六/D(周一到周五)
	http_access deny test1 test2
	
hwclock --hctosys	還原時間命令

10.禁止用戶下載*.mp3,*.exe,*.zip,*.rar帶有定義后綴名的文件
	acl test urlpath_regex -i \.mp3$ \.exe$ \.zip$ \.rar$ \.txt$
	//urlpath_regex	正則表達式匹配URL地址
	http_access deny test

注意:設置acl訪問控制規則的時候,有先后順序。第一條規則匹配上就不再繼續往下,所以先把拒絕寫在前面

2.應用案例

2.1根據IP地址訪問控制
2.2根據域名訪問控制
2.3根據時間和日期訪問控制

2.4根據文件名訪問控制

3.綜合案例

八、反向代理(擴展)

需求:某公司內網搭建了一台web服務器,希望互聯網用戶來訪問該web服務,越多越好

環境:
client:2.2.2.2	互聯網用戶
squid-server:2.2.2.1和10.1.1.1	2個IP,一個公網一個私網
web-server:10.1.1.3		公司內網web服務器

還原acl控制

搭建反向代理服務器squid步驟:
1.清空之前的環境
iptables -t nat -F
2.修改squid.conf配置文件來配置反向代理
vim /etc/squid/squid.conf
...
http_port 80 vhost
cache_peer 10.1.1.3 parent 80 0 originserver

解釋說明:
less /usr/share/doc/squid-3.1.10/squid.conf.documented
...
cache_peer hostname type http-port icp-port [options]

cache_peer:做反向代理的關鍵字
hostname:代表后台真正的web服務器
type:代表代理服務器的類型,有PARENT和SIBLING兩種:parent代表父親,sibling代表兄弟伙伴
http-port:后台web服務的端口
icp-port:代表代理服務器之間通訊的端口(用於查詢兄弟緩存的端口)
[options]:代表可選項
originserver:代表原始服務器(真正的web服務器)
weight:代表權重
max-coon:代表
...

3.測試驗證
在client端:2.2.2.2上直接訪問代理服務器:
http://2.2.2.1		(訪問代理服務器)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM