Squid全名Squid Cache(官網:http://www.squid-cache.org/),一個高性能的代理緩存服務器。主要支持FTP、HTTPS和HTTP協議。Squid用途廣泛,可以作爲緩存服務器,可以過濾流量幫助網絡安全,也可以作爲代理服務器鏈中的一環,向上級代理轉發數據或直接連接互聯網。
下面我們來搭建一個代理服務器,同時完成一個多層代理的配置:
一、安裝Squid3 ,在centos中,安裝squid是非常簡單的:
- 執行下在的命令:
yum install -y squid
- 配置文件目錄:/etc/squid/squid.conf
-
啓動服務
systemctl start squid.service(systemctl restart squid.service) -
配置系統防火牆規則,增加squid端口(squid默認的端口爲:3128)
firewall-cmd --zone=public --add-port=3128/tcp --permanent
firewall-cmd --reload
二、驗證服務器
- 打開Squid實時日誌(日誌目錄:/var/log/squid/access.log)
tail -f /var/log/squid/access.log
- window系統使用:配置IE瀏覽器代理好後,訪問外網網站,可看到日誌文件有內容輸出且頁面正常打開,說明配置成功。
四、高級應用(多層代理)
在上面,我們完成了一個單代理服務器的簡單配置和使用,接下來有個需求,阿里雲上某臺無外網服務器訪問【*.baidu.com】這類請求時,需要通過公司的代理服務器訪問目標服務器上的相關服務(如下圖),對於其它請求則不用通過公司的代理服務器,那我們需要怎麼配置?
1、首先在2臺服務器上安裝Squid;
2、在【代理服務-1】上完進行下配置
- 修改配置文件
vim /etc/squid/squid.conf #在http_access deny !Safe_ports 前新增下面的內容
#定義基於【目標域名】的策略
acl cnlist dstdomain .baidu.com#配置一個父代理服務器的信息
cache_peer 父代理服務器IP parent 3128 0 no-query no-digest#指定只有符合策略的請求才走父代理服務器
cache_peer_access 父代理服務器IP allow cnlist #對*.baidu.com的請求走上面配置的父代理never_direct allow cnlist #對*.baidu.com的請求不發送給源服務器,轉向父代理
#指定總是要發給源服務器請求ACL策略
always_direct allow !cnlist # 對非*.baidu.com的請求不走父代理 - 重啓Squid服務
systemctl restart squid.service
- 在無外網服務器上訪問www.baidu.com,查看是否正常訪問,是則說明配置生效
四、其它配置說明
1、 配置可訪問代理服務器的IP
acl localnet src 請求電腦的IP
2、acl規則配置說明
格式:acl name type parm... #多個參數之間爲OR的關係
squid有25種type,常用的類型及功能作用列舉如下:
名稱 |
作用 |
示例 |
備註 |
src/dst |
指定控制源或目標的IP地址列表 |
acl localnet src 192.168.1.0/24 acl localnet src 172.16.10.0-172.16.19.0/24 |
地址控制勿用主機名,解析比較慢,主機對應IP變化後會失效,要使用srcdom等; |
srcdomain dstdomain |
指定源或目的的域名列表 |
acl servers dstdomain .baidu.com |
.作爲通配符,它匹配此域的任何主機域,包括域名自身。無.則爲精確匹配。 |
srcdom_regex dstdom_regex url_regex urlpath_regex ident_regex proxy_auth_regex req_mime_type |
指定按照指定的字段 進行正則表達式的匹配 |
acl servers dstdom_regex -i baidu |
支持一些參數,如-i 大小寫不敏感; |
ident/proxy_auth |
支持身份過濾 |
acl auser ident proxy |
|
port | 支持端口的過濾 |
acl SafePort port 80 8080 8000 |
端口比較適合用範圍來表示,通常 |
myip/myport |
指定squid服務器的地址與端口 | acl aport myport 80 acl pport myport 3128 |
myip用於在系統有多個接口時指定自己的IP myport用於squid在多個端口上監聽時指示不同PORT |
method |
支持HTTP請求方法的過濾 |
acl Uploads method PUT POST |
|
proto |
支持不同協議的過濾 HTTP/HTTS/FTP等 |
acl ftpcl proto ftp | |
maxconn |
指定每個IP的最大連接數 |
acl MaxCon maxconn 10 |
|
arp |
檢測客戶端的MAC地址 |
acl mybox arp 00:10:20:30:40:50 |