Squid簡(jiǎn)介:
代理服務(wù)器是目前網(wǎng)絡(luò)中常見(jiàn)的服務(wù)器之一痴鳄,它可以提供文件
緩存、復(fù)制和地址過(guò)濾等服務(wù)缸夹,充分利用有限的出口帶寬痪寻,加快
內(nèi)部主機(jī)的訪問(wèn)速度螺句,也可以解決多用戶需要同時(shí)訪問(wèn)外網(wǎng)但公
有IP地址不足的問(wèn)題。同時(shí)可以作為一個(gè)防火墻橡类,隔離內(nèi)網(wǎng)與外
網(wǎng)蛇尚,并且能提供監(jiān)控網(wǎng)絡(luò)和記錄傳輸信息的功能,加強(qiáng)局域網(wǎng)的
安全性等顾画。它的主要作用有以下幾點(diǎn)取劫。
1.共享網(wǎng)絡(luò)
2.加快訪問(wèn)速度,節(jié)約通信帶寬
3.防止內(nèi)部主機(jī)受到攻擊
4.限制用戶訪問(wèn)研侣,完善網(wǎng)絡(luò)管理
1.Squid是Linux系統(tǒng)中最為流行的一款高性能代理服務(wù)軟件勇凭,通常用作Web網(wǎng)站的前置緩存服務(wù),能夠代替用戶向網(wǎng)站服務(wù)器請(qǐng)求頁(yè)面數(shù)據(jù)并進(jìn)行緩存义辕。簡(jiǎn)單來(lái)說(shuō)虾标,Squid服務(wù)程序會(huì)按照收到的用戶請(qǐng)求向網(wǎng)站源服務(wù)器請(qǐng)求頁(yè)面、圖片等所需的數(shù)據(jù)灌砖,并將服務(wù)器返回的數(shù)據(jù)存儲(chǔ)在運(yùn)行Squid服務(wù)程序的服務(wù)器上璧函。當(dāng)有用戶再請(qǐng)求相同的數(shù)據(jù)時(shí),則可以直接將存儲(chǔ)服務(wù)器本地的數(shù)據(jù)交付給用戶基显,這樣不僅減少了用戶的等待時(shí)間蘸吓,還緩解了網(wǎng)站服務(wù)器的負(fù)載壓力。
2.Squid服務(wù)程序具有配置簡(jiǎn)單撩幽、效率高库继、功能豐富等特點(diǎn),它能支持HTTP窜醉、FTP宪萄、SSL等多種協(xié)議的數(shù)據(jù)緩存,可以基于訪問(wèn)控制列表(ACL)和訪問(wèn)權(quán)限列表(ARL)執(zhí)行內(nèi)容過(guò)濾與權(quán)限管理功能榨惰,還可以基于多種條件禁止用戶訪問(wèn)存在威脅或不適宜的網(wǎng)站資源拜英,因此可以保護(hù)企業(yè)內(nèi)網(wǎng)的安全,提升用戶的網(wǎng)絡(luò)體驗(yàn)琅催,幫助節(jié)省網(wǎng)絡(luò)帶寬居凶。
3.由于緩存代理服務(wù)不但會(huì)消耗服務(wù)器較多的CPU計(jì)算性能、內(nèi)存以及硬盤等硬件資源藤抡,同時(shí)還需要較大的網(wǎng)絡(luò)帶寬來(lái)保障數(shù)據(jù)的傳輸效率侠碧,由此會(huì)造成較大的網(wǎng)絡(luò)帶寬開(kāi)銷。因此國(guó)內(nèi)很多IDC或CDN服務(wù)提供商會(huì)將緩存代理節(jié)點(diǎn)服務(wù)器放置在二三線城市以降低運(yùn)營(yíng)成本缠黍。
Squid的原理:
① 客戶端A向代理服務(wù)器提出訪問(wèn)Internet的請(qǐng)求弄兜。
② 代理服務(wù)器接受到請(qǐng)求后,首先與訪問(wèn)控制列表中的訪問(wèn)規(guī)則相對(duì)照,如果滿足規(guī)則挨队,則在緩存中查找是否存在需要的信息谷暮。
③ 如果緩存中存在客戶端A需要的信息,則將信息傳送給客戶端盛垦。如果不存在湿弦,代理服務(wù)器就代替客戶端向Internet上的主機(jī)請(qǐng)求指定的信息。
④ Internet上的主機(jī)將代理服務(wù)器的請(qǐng)求信息發(fā)送到代理服務(wù)器中腾夯,同時(shí)代理服務(wù)器會(huì)將信息存入緩存中颊埃。
⑤ 代理服務(wù)器將Internet上主機(jī)的回應(yīng)信息傳送給客戶端A。
⑥ 客戶端B向代理服務(wù)器提出相同的請(qǐng)求蝶俱。
⑦ 代理服務(wù)器也首先與訪問(wèn)控制列表中的訪問(wèn)規(guī)則相對(duì)照班利。
⑧ 如果滿足規(guī)則,則將緩存中的信息傳送給客戶端B榨呆。
CentOS環(huán)境下使用部署正向代理
步驟:
搭建環(huán)境:兩臺(tái)虛擬機(jī)罗标,一臺(tái)作為Squid服務(wù)器(CentOS7),一臺(tái)作為Squid客戶端(win XP)积蜻。Squid服務(wù)器端需要兩塊網(wǎng)卡闯割,一塊為橋接模式ip=10.100.81.34,用于連接外網(wǎng)竿拆,另外一塊為主機(jī)模式ip=192.168.25.129宙拉,用于連接內(nèi)部局域網(wǎng);另外一臺(tái)客戶端需要一塊網(wǎng)卡丙笋, 主機(jī)模式即可ip=192.168.25.130谢澈,和服務(wù)器端處在一個(gè)局域網(wǎng)內(nèi)。
-
主要文件
服務(wù)名:squid
主程序:/usr/sbin/squid
配置目錄:/etc/squid
主配置文件:/etc/squid/squid.conf
監(jiān)聽(tīng)tcp端口號(hào):3128
默認(rèn)訪問(wèn)日志文件:/var/log/squid/access.log
1御板、檢查是否安裝squid
rpm -qa | grep squid
2锥忿、假如沒(méi)有squid,安裝squid軟件包
yum install squid
3、若需要添加acl訪問(wèn)控制就編輯squid的配置文件稳吮,
vi /etc/squid/squid.conf
4缎谷、檢查配置文件是否有語(yǔ)法錯(cuò)誤
squid -k check
5、初始化緩存目錄
squid -z
6灶似、關(guān)閉防火墻,或者在防火墻中添加3128端口(注意CentOS7沒(méi)有iptables,已經(jīng)改成firewall)
systemctl stop firewalld
//關(guān)閉防火墻
firewall-cmd --zone=public --add-port=3128/tcp --permanent
//在防火墻中添加3128端口瑞你,success則添加成功
7酪惭、重啟squid
systemctl restart squid
8、在虛擬機(jī)winxp中的瀏覽器上Internet選項(xiàng)設(shè)置代理服務(wù)器IP和端口者甲,正向代理服務(wù)器搭建完畢春感。
9、測(cè)試
處于主機(jī)模式下的Win XP能夠訪問(wèn)外網(wǎng)www.baidu.com即成功;否則失敗鲫懒。
10嫩实、查看日志文件
tail -f /var/log/squid/access.log
注意:
在公司內(nèi)部,都會(huì)限制員工網(wǎng)絡(luò)的訪問(wèn)窥岩,比如上班時(shí)間不能打游戲逛淘寶等等甲献。接下來(lái)的實(shí)驗(yàn)就是來(lái)實(shí)現(xiàn)這些功能。
*在/etc/squid/squid.conf中添加 acl訪問(wèn)控制實(shí)例
配置文件/etc/squid/squid.conf的說(shuō)明
cache_mem 64 MB
//額外提供給squid使用的內(nèi)存颂翼,squid的內(nèi)存總占用為 X * 10+15+“cache_mem”晃洒,其中X為squid的cache占用的容量(以GB為單位),
//比如下面的cache大小是100M朦乏,即0.1GB球及,則內(nèi)存總占用為0.1*10+15+64=80M,推薦大小為物理內(nèi)存的1/3-1/2或更多呻疹。
maximum_object_size 4 MB
//設(shè)置squid磁盤緩存最大文件吃引,超過(guò)4M的文件不保存到硬盤
minimum_object_size 0 KB
//設(shè)置squid磁盤緩存最小文件
maximum_object_size_in_memory 4096 KB
//設(shè)置squid內(nèi)存緩存最大文件,超過(guò)4M的文件不保存到內(nèi)存
cache_dir ufs /var/spool/squid 100 16 256
//定義squid的cache存放路徑 刽锤、cache目錄容量(單位M)际歼、一級(jí)緩存目錄數(shù)量、二級(jí)緩存目錄數(shù)量
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 combined
//log文件存放路徑和日志格式
cache_log /var/log/squid/cache.log
//設(shè)置緩存日志
logfile_rotate 60
//log輪循 60天
cache_swap_high 95
//cache目錄使用量大于95%時(shí)姑蓝,開(kāi)始清理舊的cache
cache_swap_low 90
//cache目錄清理到90%時(shí)停止鹅心。
acl localnet src 192.168.1.0/24
//定義本地網(wǎng)段
http_access allow localnet
//允許本地網(wǎng)段使用
visible_hostname squid.david.dev
//主機(jī)名
cache_mgr mchina_tang@qq.com
//管理員郵箱
coredump_dir /var/spool/squid
//squid掛掉后,臨終遺言要放到哪里
ACL的應(yīng)用
ACL訪問(wèn)控制的步驟:
1纺荧、acl定義控制列表
2旭愧、http_access定義控制訪問(wèn)
格式:acl 列表名 列表類型 列表內(nèi)容 ...
格式:http_access allow或deny 列表名1 列表名2......
注意:列表名1與列表名2之間空格分隔,為“與”的關(guān)系
常用的列表類型
列表類型 | 格式 | |
---|---|---|
src | 源IP地址宙暇,客戶端的IP地址 | acl name src ip/netmask |
dst | 目的IP地址输枯,訪問(wèn)的IP地址 | acl name src ip/netmask |
arp | 客戶端MAC地址 | acl name arp mac-addr |
srcdomain | 源域名 | acl name srcdomain .domain.com |
dstdomain | 目標(biāo)域名 | acl name dstdomain .domain.com |
port | 端口 | acl name port num |num1 - num2 |
proto | 協(xié)議 | acl name proto HTTP FTP ...... |
method | 請(qǐng)求類型 | acl name method GET POST ...... |
maxconn | 單一IP地址最大連接數(shù) | acl name maxconn num |
url_regex | URL匹配 | acl name url_regex [-i] ^http://...... |
time | 時(shí)間段 | acl name time [day] [h1:m1-h2:m2] |
ACL的實(shí)際應(yīng)用
- squid按照順序讀取訪問(wèn)控制列表的,在獲得匹配的訪問(wèn)控制語(yǔ)句后占贫,不在繼續(xù)向下查詢
- 如存在多條訪問(wèn)控制語(yǔ)句桃熄,必須注意它們的順序
1、禁止任何客戶機(jī)訪問(wèn)代理服務(wù)器
acl all src 0.0.0.0/0.0.0.0
http_access deny all
2型奥、允許指定的客戶機(jī)在指定的時(shí)間上網(wǎng)
acl kehuji src 192.168.1.0/24 192.168.4.0/24
acl worktime time MTWHF 08:30-17:30
(其中MTWHF是周一到周五的英文首字母)
http_access allow kehuji worktime
[root@localhost~]#
3瞳收、創(chuàng)建黑名單
-
不允許被用戶訪問(wèn)的網(wǎng)站IP
[root@localhost~]#vi /etc/squid/deny_ip
//創(chuàng)建黑名單
220.170.91.114
//nslooup查詢到的www.taobao.com的ip
183.3.226.35
//nslookup查詢到的www.qq.com的ip
[root@localhost~]#vi /etc/squid/squid.conf
acl deny_ip dst "/etc/squid/deny_ip"
http_access deny deny_ip
-
不允許被用戶訪問(wèn)的域
[root@localhost~]#vi /etc/squid/deny_domain
.qq.com
.bai.com
[root@localhost~]#vi /etc/squid/squid.conf
acl deny_domain dst "/etc/squid/deny_domain"
http_access deny deny_domain
4、創(chuàng)建白名單
-
被允許訪問(wèn)網(wǎng)站的客戶端
[root@localhost~]#vi /etc/squid/guest
//創(chuàng)建白名單
192.168.25.130
192.168.25.131
192.168.25.0/24
[root@localhost~]#vi /etc/squid/squid.conf
acl guest dst "/etc/squid/guest"
http_access allow guest
配置大概在/etc/squid.conf的26行的位置
squid涉及到防火墻
1.firewalld的基本使用
啟動(dòng): systemctl start firewalld
查看狀態(tài): systemctl status firewalld
停止: systemctl disable firewalld
禁用: systemctl stop firewalld
2.systemctl是CentOS7的服務(wù)管理工具中主要的工具厢汹,它融合之前service和chkconfig的功能于一體螟深。
在開(kāi)機(jī)時(shí)啟用一個(gè)服務(wù):systemctl enable firewalld.service
在開(kāi)機(jī)時(shí)禁用一個(gè)服務(wù):systemctl disable firewalld.service
查看服務(wù)是否開(kāi)機(jī)啟動(dòng):systemctl is-enabled firewalld.service
查看已啟動(dòng)的服務(wù)列表:systemctl list-unit-files|grep enabled
查看啟動(dòng)失敗的服務(wù)列表:systemctl --failed
3.配置firewalld-cmd
查看所有打開(kāi)的端口: firewall-cmd --zone=public --list-ports
那怎么開(kāi)啟一個(gè)端口呢:firewall-cmd --zone=public --add-port=80/tcp --permanent
那怎么關(guān)閉一個(gè)端口呢:firewall-cmd --zone= public --remove-port=80/tcp --permanent
注意:該命令方式開(kāi)啟的端口,可在/etc/firewalld/zones/public.xml中的對(duì)應(yīng)配置文件中得到體現(xiàn)
說(shuō)明:
firewall-cmd:Linux中提供的操作firewall的工具烫葬。
–zone:指定作用域界弧。
–add-port=80/tcp:添加的端口凡蜻,格式為:端口/通訊協(xié)議。
–permanent:表示永久生效垢箕,沒(méi)有此參數(shù)重啟后會(huì)失效划栓。
更新防火墻規(guī)則: firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=3128/tcp