1. 程式人生 > >Squid 緩存服務器的緩存代理,及配置 Squid 的ACL訪問控制策略

Squid 緩存服務器的緩存代理,及配置 Squid 的ACL訪問控制策略

-- inux title play 訪問 yum 常見 需要 squid代理

Squid緩存服務器

Squid 是 Linux 系統中最常見的一塊開源代理服務軟件(官方網站為 http://www.squid-cache.org ),可以很好地實現HTTP、FTP、DNS、查詢,以及SSL等應用的緩存代理,功能十分強大。

緩存代理概述

作為應用層的代理服務軟件,Squid 主要提供緩存加速和應用層過濾控制的功能。

  • 代理的工作機制

    當客戶機通過代理來請求 Web 頁面時,指定的代理服務器輝縣檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則由代理服務器想 Internet 發送訪問請求,獲得返回的 Web 頁面以後,將網頁數據保存到緩存中並發送給客戶機。

     
    HTTP 代理的緩存加速對象主要是文字、圖像等靜態 Web 元素。使用緩存機制後,當客戶及在不同的時候訪問統一 Web 元素,或者不同的客戶機訪問相同的 Web 元素時,可以直接從代理服務器的緩存中獲得結果。這樣就大大減少了像 Internet 重復提交 Web 請求的過程,提高了客戶機的 Web 響應速度。
     
    由於客戶機的 Web 訪問請求實際上是由代理服務器代替完成的,從而可以隱藏用戶的真實 IP 地址,起到一定的保護作用。另一方面,代理服務器擔任著類似“經紀人”的角色,所以有機會針對要訪問的目標、客戶機的地址,訪問的時間段等進行過濾控制。

  • 代理的基本類型
    根據實現的方式不同,代理服務可分為傳統代理、透明代理以及反向代理三種代理服務。
  • 傳統代理:

    首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序手動設置代理服務器的地址和端口,然後才能使用代理服務來訪問網絡。對於網頁瀏覽器,訪問網站時的域名解析也會發送給指定的代理服務器。

  • 透明代理:

    提供與傳統代理相同的功能和服務,其區別在於客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將 Web 訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對客戶機來說是“透明”的,用戶甚至不知道自己在使用代理服務,所以稱為“透明代理”。使用透明代理時,網頁瀏覽器訪問網站時的域名解析請求將優先發給 DNS 服務器。

  • 反向代理:

    通過 squid 反向代理可以加速網站的訪問速度,可將不同的 URL 請求分發到後臺不同的 Web 服務器上,同時互聯網用戶只能看到反向代理服務器的地址,加強了網站的訪問安全。

系統環境

主機 操作系統 IP地址 所用軟件
Squid代理服務器 CentOS 7.4 x86_64 192.168.100.135 squid.x86_64 7:3.5.20-10.el7
Win10 客戶機 windows 10 192.168.100.10 Internet Explorer 11

 

部署服務

 

一、傳統代理模式

1. 安裝squid軟件包

yum -y install squid

2. 開啟squid服務

systemctl enable squid.service
systemctl start squid.service

3. 查看啟動進程信息

# netstat -tunlp | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      7374/(squid-1)      
udp        0      0 0.0.0.0:33427           0.0.0.0:*                           7374/(squid-1)      
udp6       0      0 :::38585                :::*                                7374/(squid-1)      

4. 為客戶機設置代理(IP:3128)

  • 在IE瀏覽器中,選擇“工具”→“Internet選項”,在“連接”選項卡中點擊“局域網設置”按鈕,填寫代理服務器IP與端口信息。
     
  • 若要在 Linux 客戶機的命令行界面中使用代理服務器,不許通過環境變量來指定代理服務器的地址、端口等信息。
    # vim /etc/profile
    HTTP_PROXY=http://192.168.100.135:3128  //為使用HTTP協議指定代理
    HTTPS_PROXY=http://192.168.100.135:3128  //為使用HTTPS協議指定代理
    FTP_PROXY=http://192.168.100.135:3128  //為使用FTP協議指定代理
    NO_PROXY=192.168.1.,192.168.4.  //對兩個局域網段不使用代理
    export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY
    # source /etc/profile

 

二、透明代理模式

1. 通過SNAT技術完成數據的轉發,讓客戶機將數據交給Squid代理服務器,再由其轉發到外網中

//清空防火墻規則
iptables -F
iptables -t nat -F
 
//開啟dns服務允許通過外網口
iptables -t nat -A POSTROUTING -p udp --dport 53 -o ens32 -j MASQUERADE
 
//開啟路由轉發
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
 
//立即生效
sysctl -p

2. 編輯squid配置文件

# vim /etc/squid/squid.conf
http_port 3128 transparent
cache_dir ufs /var/spool/squid 100 16 256

3. 檢查配置文件,初始化並重啟squid服務

squid -k parse  //檢查配置文件
squid -z    //初始化
systemctl restart squid.service

4. 添加防火墻規則

//將內網用戶對80端口的訪問都轉發到本機3128端口上
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
 
//將內網用戶對80端口的訪問都轉發到本機3128端口上
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3128
 
//保存防火墻規則
service iptables save

三、反向代理模式

1. 編輯squid配置文件,添加以下規則

# vim /etc/squid.conf
http_port IP:80 vhost
cache_peer 網站源服務器IP parent 80 0 originserver

2. 重啟squid服務

systemctl restart squid

3. 自定義錯誤頁面

# 錯誤頁面默認在/usr/share/squid/errors/zh-cn/目錄下
# 修改logo為公司logo ,/etc/squid/errorpage.css
# vim /etc/squid/errorpage.css

/* Page displayed title area */
#titles {
        margin-left: 15px;
        padding: 10px;
        padding-left: 100px;

        //ur(‘‘) 指向地址,替換為公司的logo路徑地址即可
        background: url(‘/squid-internal-static/icons/SN.png‘) no-repeat left;      
}

4. 修改系統管理員郵箱

# vim /etc/squid/squid.conf
//主機名
visible_hostname squid.njxx.com
 
//管理員郵箱信息
cache_mgr [email protected]

ACL訪問控制

  • Squid提供了強大的代理控制機制,通過合理的設置ACL,並進行限制,可以針對源地址、目標地址、訪問的URL路徑、訪問的時間等條件進行過濾。
  • 在配置文件squid.conf中,ACL訪問控制通過以下兩個步驟來實現:其一,使用acl配置項定義需要控制的條件;其二,通過http_access 配置對已定義的列表做出"允許" 或者 "拒絕" 訪問的控制。
  • 定義訪問控制列表
    acl 列表名稱 列表類型 列表內容 …
  • 常見的訪問控制列表類型
列表類型 含義/用途
src 源IP地址、網段、IP地址範圍
dst 目標IP地址、網段、主機名
port 目標端口
dstdomain 目標域,匹配域內的所有站點
time 使用代理服務的時間段,用字母表示一星期中各天的英文縮寫
maxconn 每個客戶機的並發連接數
url_regex 目標資源的URL地址,-i表示忽略大小寫
urlpath_regex 目標資源的整個URL路徑,-i表示忽略大小寫

Squid 緩存服務器的緩存代理,及配置 Squid 的ACL訪問控制策略