<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 17.2 Proxy 服務器的基礎設定 雖然在我們小型的網絡環境中,架設 Proxy 真的沒有什么用,不過,考慮到大家未來可能會高升嘛!所以企業常用的 Proxy 也需要了解一下比較好。 在這個小節中,我們主要介紹一個比較簡單的 Proxy 環境,就是單純可以跑而已的代理服務器。比較高階的設定請參考后續小節的介紹啰。 * * * ### 17.2.1 Proxy 所需的 squid 軟件及其軟件結構 達成代理服務器功能的軟件很多,例如效能不是很好的 Apache 以及我們這個章節要介紹的八爪章魚 squid 這一套。 目前代理服務器在 Unix Like 的環境下,大多就是使用 squid ,因此我們這里以 squid 為準來介紹啦。同樣的, 請使用 rpm 來檢查,如果尚未安裝,請用『 yum install squid 』來安裝吧!安裝好 squid 之后,它主要的提供的配置文件有: * /etc/squid/squid.conf 這個是主要的配置文件,所有 squid 所需要的設定都是放置在這個檔案當中的! 鳥哥底下提到的種種設定方法幾乎都是這個檔案里面的說明喔! * /etc/squid/mime.conf 這個檔案則是在設定 squid 所支持的 Internet 上面的文件格式,就是所謂的 mime 格式啰! 一般來說,這個檔案的預設內容已經能夠符合我們的需求了,所以不需要更動他,除非你很清楚的知道你所需要額外支持的 mime 文件格式。 其他重要的目錄與檔案有: * /usr/sbin/squid:提供 squid 的主程序啊! * /var/spool/squid:就是默認的 squid 快取放置的目錄。 * /usr/lib64/squid/:提供 squid 額外的控制模塊,尤其是影響認證密碼方面的程序,都是放在這個目錄下的; * * * ### 17.2.2 CentOS 預設的 squid 設定 在預設的情況下,CentOS 的 squid 具有底下幾個特色: * 僅有本機 (localhost, 127.0.0.1) 來源可以使用這個 squid 功能 * squid 所監聽的 Proxy 服務埠口在 port 3128 * 快取目錄所在的位置在 /var/spool/squid/ ,且僅有 100MB 的磁盤高速緩存量 * 除了 squid 程序所需要的基本內存之外,尚提供 8MB 的內存來給熱門檔案快取在內存中 (因為內存速度比硬盤還快) * 默認啟動 squid 程序的用戶為 squid 這個賬號 (與磁盤高速緩存目錄權限有關) 其實, CentOS 預設的 squid 設定,是僅針對本機 (localhost) 開放的情況,而一大堆設定的默認值, 都是僅針對小型網絡環境所指定的數值,同時,很多比較特殊的參數都沒有啟動。所以,我們就得要來了解一下各設定值的意義, 這樣才能夠進行修改嘛!這些參數都是在 squid.conf 里頭指定的,所以,就讓我們來看看這個檔案的內容與較重要的參數吧: **Tips:** CentOS 6.x 已經將 squid.conf 里面不相干的設定值通通拿掉了,所以這個檔案就變的非常的精簡!這樣其實有好有壞啦! 好處是,你不用去看一些你用不到的參數值,壞處是,如果你想要其他的設定,就得額外參考外部文件了!傷腦筋~ ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) ``` [root@www ~]# vim /etc/squid/squid.conf # 1\. 信任用戶與目標控制,透過 acl 定義出 localhost 等相關用戶 acl manager proto cache_object &lt;==定義 manager 為管理功能 acl localhost src 127.0.0.1/32 &lt;==定義 localhost 為本機來源 acl localhost src ::1/128 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 &lt;==定義 to_localhost 可聯機到本機 acl to_localhost dst ::1/128 # 2\. 信任用戶與目標控制,定義可能使用這部 proxy 的外部用戶(內網) acl localnet src 10.0.0.0/8 &lt;==可發現底下都是 private IP 的設定 acl localnet src 172.16.0.0/12 acl localnet src 192.168.0.0/16 acl localnet src fc00::/7 acl localnet src fe80::/10 # 上述數據設定兩個用戶 (localhost, localnet) 與一個可取得目標 (to_localhost) # 3\. 定義可取得的數據端口所在! acl SSL_ports port 443 &lt;==聯機加密的埠口設定 acl Safe_ports port 80 # http &lt;==公認標準的協議使用埠口 acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https # 定義出 SSL_ports 及標準的常用埠口 Safe_ports 兩個名稱 # 4\. 定義這些名稱是否可放行的標準依據(有順序喔!) http_access allow manager localhost &lt;==放行管理本機的功能 http_access deny manager &lt;==其他管理來源都予以拒絕 http_access deny !Safe_ports &lt;==拒絕非正規的埠口聯機要求 http_access deny CONNECT !SSL_ports &lt;==拒絕非正規的加密埠口聯機要求 &lt;==這個位置為你可以寫入自己的規則的位置喔!不要寫錯了!有順序之分的! http_access allow localnet &lt;==放行內部網絡的用戶來源 http_access allow localhost &lt;==放行本機的使用 http_access deny all &lt;==全部都予以拒絕啦! # 5\. 網絡相關參數,最重要的是那個定義 Proxy 協議埠口的 http_port http_port 3128 &lt;==Proxy 預設的監聽客戶端要求的埠口,是可以改的 # 其實,如果想讓 proxy server/client 之間的聯機加密,可以改用 https_port (923) # 6\. 快取與內存相關參數的設定值,尤其注意內存的計算方式 hierarchy_stoplist cgi-bin ? &lt;==hierarchy_stoplist 后面的關鍵詞 (此例為 cgi-bin) # 若發現在客戶端所需要的網址列,則不快取 (避免經常變動的數據庫或程序訊息) cache_mem 8 MB &lt;==給proxy額外的內存,用來處理最熱門的快取數據(需自己加) # 7\. 磁盤高速緩存,亦即放置快取數據的目錄所在與相關設定 cache_dir ufs /var/spool/squid 100 16 256 &lt;==默認使用 100MB 的容量放置快取 coredump_dir /var/spool/squid # 底下的四個參數得要自己加上來喔!舊版才有這樣的默認值! minimum_object_size 0 KB &lt;==小于多少 KB 的數據不要放快取,0 為不限制 maximum_object_size 4096 KB &lt;==與上頭相反,大于 4 MB 的數據就不快取到磁盤 cache_swap_low 90 &lt;==與下一行有關,減低到剩下 90% 的磁盤高速緩存為止 cache_swap_high 95 &lt;==當磁盤使用量超過 95% 就開始刪除磁盤中的舊快取 # 8\. 其他可能會用到的默認值!參考參考即可,并不會出現在配置文件中。 access_log /var/log/squid/access.log squid &lt;==曾經使用過 squid 的用戶記錄 ftp_user Squid@ &lt;==當以 Proxy 進行 FTP 代理匿名登錄時,使用的賬號名稱 ftp_passive on &lt;==若有代理 FTP 服務,使用被動式聯機 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/&#124;\?) 0 0% 0 refresh_pattern . 0 20% 4320 # 上面這四行與快取的存在時間有關,底下內文會予以說明 cache_mgr root &lt;==預設的 proxy 管理員的 email cache_effective_user squid &lt;==啟動 squid PID 的擁有者 cache_effective_group squid &lt;==啟動 squid PID 的群組 # visible_hostname &lt;==有時由于 DNS 的問題,找不到主機名會出錯,就得加上此設定 ipcache_size 1024 &lt;==以下三個為指定 IP 進行快取的設定值 ipcache_low 90 ipcache_high 95 ``` 光是了解上述的一些基礎設定值,可能就要頭昏昏了,更別說 squid.conf 里面的其他設定值,看到頭好昏... 無論如何,上述這些設定已經是很基礎的設定了,你最好了解一下!除了 cache_dir 那一行取消批注,其他的保持不動! 讓我們以默認值來直接啟動 squid 看看有什么特別的地方再說。 * 使用默認值來啟動 squid 并觀察相關信息 要啟動 squid 真是簡單,讓我們來啟動 squid 并且觀察有沒有相關的埠口吧! ``` [root@www ~]# /etc/init.d/squid start init_cache_dir /var/spool/squid... 正在激活 squid: . [ 確定 ] # 第一次啟動會初始化快取目錄,因此會出現上述左邊的數據,未來這個訊息不會再出現 [root@www ~]# netstat -tulnp &#124; grep squid Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 :::3128 :::* LISTEN 2370/(squid) udp 0 0 :::45470 :::* 2370/(squid) [root@www ~]# chkconfig squid on ``` 如果你有設定 icp_port 時,squid 預設會啟動 3128 及 3130 兩個埠口,其中要注意的是, 實際幫用戶進行監聽與傳送數據的是 port 3128 (TCP),3130 (UDP) 僅是負責與鄰近 Proxy 互相溝通彼此的快取數據庫的功能,與實際的用戶要求無關。因此,如果你的 proxy 是單純的單一主機,或者是單純的作為防火墻功能,那么這個 port 3130 是可以關閉的。就因如此,所以 CentOS 6.x 預設將這個設定值批注不使用啰! 例題:由于我的 Proxy 僅是部簡單的單一代理服務器,并沒有架設成為公開的鄰近代理服務器 (peer proxy 或 neighbor proxy), 因此想要關閉 port 3130 ,該如何處理?答:舊版的 CentOS 5.x 以前的版本才需要進行,很簡單,直接修改 icp_port 即可!方法為: ``` [root@www ~]# vim /etc/squid/squid.conf #Default: VBird 2011/04/06 modified,將下列數據從 3130 改為 0 即可 icp_port 0 [root@www ~]# /etc/init.d/squid restart ``` 事實上,如果你的客戶端與 proxy 之間的溝通想要使用加密機制的 SSL 功能,以保障客戶端的信息避免被竊取時, 那么還有個 https_port 可以取代 http_port !不過,充其量我們的 proxy 并非公開也僅是架設在內部區網, 因此還不需要使用到這個 https_port 啦! * 觀察與修改快取目錄 (cache_dir):權限與 SELinux 從前面的說明我們知道磁盤高速緩存是影響 proxy 效能的一個相當重要的參數,那么 squid 是如何將快取存進磁盤的呢? squid 是將數據分成一小塊一小塊,然后分別放置到個別的目錄中。由于較多的目錄可以節省在同一個目錄內找好多檔案的時間 (想一想,分門別類的放置書籍在不同的書柜內,總比將所有書籍雜亂無章的放置到一個大書柜要好的多吧!), 因此,在默認的 /var/spool/squid/ 目錄下, squid 又會將它分成兩層子目錄來存放相關的快取數據,所以觀察該目錄就會是: ``` [root@www ~]# ls /var/spool/squid 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F swap.state # 算一下,你會發現共有 16 個子目錄!那么我們來看看第一個子目錄的內容: [root@www ~]# ls /var/spool/squid/00 00 08 10 18 20 28 ... 98 A0 A8 B0 B8 C0 C8 D0 D8 E0 E8 F0 F8 01 09 11 19 21 29 ... 99 A1 A9 B1 B9 C1 C9 D1 D9 E1 E9 F1 F9 ....(中間省略).... 06 0E 16 1E 26 2E ... 9E A6 AE B6 BE C6 CE D6 DE E6 EE F6 FE 07 0F 17 1F 27 2F ... 9F A7 AF B7 BF C7 CF D7 DF E7 EF F7 FF # 看見了嗎?總共有 256 個子目錄出現啰! ``` 現在我們知道了較多的目錄是為了將數據分門別類放置,但是第一層 16 個與第二層 256 個是怎么來的? 讓我們來瞧一瞧 cache_dir 這個重要參數的設定是怎樣: * cache_dir ufs /var/spool/squid 100 16 256 在 /var/spool/squid/ 后面的參數意義是: * 第一個 100 代表的是磁盤使用量僅用掉該文件系統的 100MB * 第二個 16 代表第一層次目錄共有 16 個 * 第三個 256 代表每層次目錄內部再分為 256 個次目錄 根據 squid 的說法與其他文獻的說明,這兩層快取目錄較佳的配置就是 16 256 以及 64 64 這兩種配置, 所以我們也不需要修改相關的數據啦!重點時還得要注意這個目錄的檔案擁有者與 SELinux 類型才成呦! 例題:看起來預設的 proxy 的磁盤高速緩存應該是不夠用,而之前的磁盤規劃又沒有做好,因此 /var/ 最多還有 500MB 可以讓我們做為磁盤高速緩存。 那么如果想要將預設的磁盤高速緩存改為 500MB 而且再加上 /srv/squid/ 目錄給予 2GB 的容量做為磁盤高速緩存,該如何進行設定?答:這里都與 cache_dir 有關!這個設定值可以重復出現多次!因此,我們可以這樣進行的,特別注意底下的目錄權限與 SELinux 類型呦! ``` [root@www ~]# vim /etc/squid/squid.conf #Default: VBird 2011/04/06 modified,底下的設定除了拿掉 # 之外還得修改! cache_dir ufs /var/spool/squid 500 16 256 cache_dir ufs /srv/squid 2000 16 256 [root@www ~]# mkdir /srv/squid [root@www ~]# chmod 750 /srv/squid [root@www ~]# chown squid:squid /srv/squid [root@www ~]# chcon --reference /var/spool/squid /srv/squid [root@www ~]# ll -Zd /srv/squid drwxr-x---. squid squid system_u:object_r:squid_cache_t:s0 /srv/squid/ [root@www ~]# /etc/init.d/squid restart ``` 之所以要改成 squid 擁有,是因為上頭的 squid.conf 中,預設的啟動 PID 的賬號就是 squid 這個人物嘛!所以當然要變更!至于 SELinux 的類型方面,參考預設的 /var/spool/squid 就能夠知道了。不過要注意,某些特定的目錄 (例如 /home) 是不允許建立快取目錄的, 因此我們使用服務資料可以放置的 /srv 作為測試范例啰! 想一想,既然快取是放在磁盤上面的,那么快取的數據會不會塞滿整個快取磁盤呢?當然會啊!而且當塞滿磁盤之后, 你的 proxy 恐怕就無法繼續運作了!所以,我們當然得要好好的注意磁盤使用量是否已經飽和了。在上述的例題中, 若 /var/spool/squid 塞滿 500MB 而 /srv/squid 塞滿 2GB 那么你的 proxy 就掛了。為了避免這個問題,因此 squid 有底下兩個重要設定: * cache_swap_low 90 * cache_swap_high 95 代表當磁盤使用量達 95% 時,比較舊的快取數據將會被刪除,當刪除到剩下磁盤使用量達 90% 時,就停止持續刪除的動作。 以本案例中,總共 2.5GB 的容量,當用到 2.5*0.95=2.375G 時,舊的數據會開始被刪除,刪到剩下 2.5*0.9=2.25GB 時,就停止刪除的意思。所以會被刪除掉 125MB 的舊數據就是了。通常這個設定值已經足夠了,不需要變動他, 除了你的快取太大或太小時,才會調整這個設定值。 * squid 使用的內存計算方式 事實上,除了磁盤容量之外,內存可能是另一個相當重要的影響 proxy 效能的因子!怎么說呢?因為 proxy 會將數據存一份在磁盤高速緩存中,但是同時也會將數據暫存在內存當中啊,以加快未來使用者存取同一份數據的速度! 但是這個內存快取是需要花費額外的服務器物理內存的量,所以就得要以額外的設定值來指定啰。那就是 cache_mem 這個設定值的功能了。 很多人 (包括鳥哥) 都會誤會 cache_mem 的用途!其實 cache_mem 是額外的指定一些內存來進行比較『熱門』的數據存取! cache_mem 并不是指我要使用多少內存給 squid 使用,而是指 "我還要額外提供多少內存給 squid 使用" 的意思』!由于預設 1GB 的磁盤高速緩存會占用約 10M 的內存,而 squid 本身也會占用約 15MB 的內存, 因此,上個例題中 squid 使用掉的內存就有: * 2.5 * 10 + 15 + "cache_mem 設定值 (8)" squid 官方網站建議你的物理內存最好是上面數值的兩倍,也就是說,上述的內存使用量已經是 48MB, 則我的物理內存最好至少要有 100 MB 以上,才會有比較好的效能!當然,這個單指 Proxy 部分而已,如果你的該部主機還有負責其他的工作,呵呵!那么內存就得在累加上去啦!一般來說,如果你的 Proxy 很多人使用時,這個值越大越好,但是最好也要符合上面的需求喔! 例題:由于我的內存夠大,而 proxy 確實是我重要的服務,因此想要增加額外的 32MB 作為熱門數據快取,該如何修改?答:直接做了啦!就是修改 cache_mem 而已! ``` [root@www ~]# vim /etc/squid/squid.conf #Default: VBird 2011/04/06 modified,將原本的 8 改為 32 啰! cache_mem 32 MB [root@www ~]# /etc/init.d/squid restart ``` * * * ### 17.2.3 管控信任來源 (如區網) 與目標 (如惡意網站): acl 與 http_access 的使用 在上面的基礎設定中,其實僅有 proxy 服務器本身可以向自己的 proxy 要求網頁代理~那有個屁用啊? 我們的重點是想要開放給區網來使用這個 proxy 的嘛!所以當然得要修改信任用戶的管控參數啰。 此時,那個重要到不行的 acl 就得要來瞧一瞧啦!這個 acl 的基本語法為: ``` acl &lt;自定義的 acl 名稱&gt; &lt;要控制的 acl 類型&gt; &lt;設定的內容&gt; ``` 由于 squid 并不會直接使用 IP 或網域來管控信任目標,而是透過 acl 名稱來管理,這個 &lt;acl 名稱&gt; 就必須要設定管理的是來源還是目標 (acl 類型) ,以及實際的 IP 或網域 (設定的內容) 啦!這個 acl 名稱可以想成是一個昵稱就是了。那么有哪些重要的 acl 類型呢?基本上有這些: * 管理是否能使用 proxy 的信任客戶端方式: 由于因特網主要有使用 IP 或主機名來作為聯機方式的,因此信任用戶的來源至少就有底下幾種: * src ip-address/netmask: 主要控制『來源的 IP 地址』。舉例來說,鳥哥的內網有兩個,分別是 192.168.1.0/24 以及 192.168.100.0/24 , 那么假設我想要制訂一個 vbirdlan 的 acl 名稱,那就可以在配置文件內寫成: acl vbirdlan src 192.168.1.0/24 192.168.100.0/24 * src addr1-addr2/netmask: 主要控制『一段范圍來源的 IP 地址』。假設我只想要讓 192.168.1.100-192.168.1.200 使用這部 proxy ,那么就用: acl vbirdlan2 src 192.168.1.100-192.168.1.200/24 * srcdomain .domain.name: 如果來源用戶的 IP 一直變,所以使用的是 DDNS 的方式來更新主機名與 IP 的對應,此時我們可以使用主機名來開放! 例如來源是 .ksu.edu.tw 的來源用戶就開放使用權,那就是: acl vbirdksu srcdomain .ksu.edu.tw * 管理是否讓 proxy 幫忙代理到該目標去獲取數據: 除了管理來源用戶之外,我們還能夠管理是否讓 proxy 服務器到某些目標去獲取數據喔!在預設的設定中, 我們的 proxy 僅管理可以向外取得 port 21, 80, 440... 等端口的目標網站,不是這些端口就無法幫忙代理取得。 至于 IP 或網域則沒有管理。基本的管理有這些方式: * dst ip-addr/netmask: 控制不能去的目標網站的 IP ,舉例來說,我們不許 proxy 去捉取 120.114.150.21 這部主機的 IP 時,可以寫成是: acl dropip dst 120.114.150.21/32 * dstdomain .domain.name: 控制不能去的目標網站的主機名。舉例來說,如果你在上課時不允許學生跑去種田還是小小戰爭,那就得要把 .facebook.com 給關閉!那就需要寫成: acl dropfb dstdomain .facebook.com * url_regex [-i] ^http://url: 使用正規表示法來處理網址列的一種方式!這種方式的網址列必須要完整的輸入正規表示法的開始到結尾才行。 舉例來說,昆山科大的中文網頁寫法為 (并非部分比對,所以最結尾的 .* 記得要加上去!): acl ksuurl url_regex ^http://www.ksu.edu.tw/cht/.* * urlpath_regex [-i] \.gif$: 與上一個 acl 非常類似,只是上一個需要填寫完整的網址數據,這里則是根據網址列的部分比對來處置。以上述的預設案例來說, 只要網址列結尾是 gif (圖片文件) 就符合這個項目了。萬一我要找出有問題的色情網站,有出現 /sexy 名稱并以 jpg 結尾的, 就予以抵擋,那就是使用: acl sexurl urlpath_regex /sexy.*\.jpg$ 除了上述的功能之外,我們還能夠使用外部的檔案來提供相對應的 acl 內容設定值喔! 舉例來說,假設我們想要抵擋的外部主機名常常會變動,那么我們可以使用 /etc/squid/dropdomain.txt 來設定主機名, 然后透過底下的方式來處理 ``` acl dropdomain dstdomain "/etc/squid/dropdomain.txt" ``` 然后在 dropdomain.txt 當中,一行一個待管理的主機名,這樣也能夠減少持續修改 squid.conf 的困擾! 好了!了解了 acl 之后,接下來得要談談 http_access 這個實際放行或拒絕的參數了! * 以 http_access 調整管理信任來源與管控目標的『順序』: 設定好 acl 之后,接下來就是要看看到底要不要放行喔~放行與否跟 http_access 這個項目有關。基本上, http_access 就是拒絕 (deny) 與允許 (allow) 兩個控件目,然后再加上 acl 名稱就能夠達到這樣的功能了! 只是你得要特別注意的是:http_access 后面接的數據,是有順序的!這個觀念很重要喔! 我們用底下的案例來說明好了: 假設我要放行內部網絡 192.168.1.0/24, 192.168.100.0/24 這兩段網域,然后拒絕對外的色情相關圖片, 以及 facebook.com 網站,那么就應該要這樣做: ``` [root@www ~]# vim /etc/squid/squid.conf # http_access 是有順序的,因此建議你找到底下這個關鍵詞行后,將你的資料加在后面 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS acl vbirdlan src 192.168.1.0/24 192.168.100.0/24 acl dropdomain dstdomain .facebook.com acl dropsex urlpath_regex /sexy.*jpg$ http_access deny dropdomain &lt;==這三行的『順序』很重要! http_access deny dropsex http_access allow vbirdlan [root@www ~]# /etc/init.d/squid restart ``` 你得要注意,如果先放行了 vbirdlan 才抵擋 dropdomain 時,你的設定可能會失敗!因為內網已經先放行, 因此后面的規則不會比對,那么 facebook.com 就無法被抵擋了!這點得要很注意才行! 通常的作法是,先將要拒絕的寫上去,然后才寫要放行的數據就好了。 * * * ### 17.2.4 其他額外的功能項目 * 不要進行某些網頁的快取動作 從前面的說明我們知道 Proxy 的快取通常在記錄比較少變動的數據,如果是討論區或者是程控類的數據庫型態網頁, 那么恐怕就沒有快取的需要,因為數據一直變動嘛!你總不希望你發了一帖留言,結果等一下再去瀏覽時,看到的還是舊留言吧! 所以啰,在預設的情況下,squid 已經拒絕某些數據的快取了,那就是底下的幾個設定值: ``` acl QUERY urlpath_regex cgi-bin \? cache deny QUERY &lt;==重點就是這一行!可以拒絕,不要讓后面的 URL 被快取! ``` 我們知道通常 .php 結尾的網頁大部分就是討論區之類的變動性數據,那么能不能出現 .php 結尾的網頁就不要快取呢? 當然可以啊!那該如何進行?我們以上面的數據來照樣造句一下吧! 例題:只要網址列出現 .php 結尾的,就不予以快取!答:透過 acl 配合 cache 這兩個參數來處理即可! ``` [root@www ~]# vim /etc/squid/squid.conf acl denyphp urlpath_regex \.php$ cache deny denyphp # 在此檔案的最后新增這兩行即可! [root@www ~]# /etc/init.d/squid restart ``` * 磁盤中快取的存在時間 還記得底下的設定值嗎?這個設定值的參數是這樣設定的: ``` # refresh_pattern &lt;regex&gt; &lt;最小時間&gt; &lt;百分比&gt; &lt;最大時間&gt; refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/&#124;\?) 0 0% 0 refresh_pattern . 0 20% 4320 ``` * regex:使用的是正規表示法來分析網址列的資料,如上面第一行設定為網址列開頭是 ftp 的意思。 * 最小時間:單位是分鐘,當取得這個數據的時間超過這個設定值,則該數據會被判定為舊資料。如上面第一行, 表示當取得的資料超過 1440 分鐘時,該資料會被判定為舊數據,若有人嘗試讀取同樣的網址列,那么 squid 會重新抓取該數據,不會使用快取內的舊數據。至于第三行,則表示除了上述的兩個開頭數據外,其他的數據都是被定義為新的, 因此 squid 只會從快取內抓數據給客戶端。 * 百分比:這個項目與『最大時間』有關,當該資料被抓取到快取后,經過最大時間的多少百分比時,該數據就會被重抓。 * 最大時間:與上一個設定有關,就是這個數據存在快取內的最長時間。如上面第一行,最大時間為 10080 分鐘,但是當超過此時間的 20% (2016分鐘) 時,這個數據也會被判定為舊資料。 例題:在網址列出現 .vbird. 字樣時,該數據為暫時使用的,因此 2 小時后就算舊數據。而最長保留在快取給她一天的時間, 且經過 50% 的時間后,就被判定為舊數據吧!答: ``` [root@www ~]# vim /etc/squid/squid.conf refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/&#124;\?) 0 0% 0 refresh_pattern \.vbird\. 120 50% 1440 refresh_pattern . 0 20% 4320 [root@www ~]# /etc/init.d/squid restart ``` * 主機名與管理員的 email 指定 如果你的服務器主機名尚未決定,因此使用的主機名在因特網上面是找不到對應的 IP 的 (因為 DNS 未設定), 那么在預設的 squid 設定中,恐怕會無法順利的啟動。此時你可以手動的加入一個主機名,就是透過 visible_hostname 來指定。 同時,如果客戶端使用 squid 出現任何錯誤時,屏幕上都會出現管理員的 email 讓用戶可以回報。現在假設主機名為 www.centos.vbird 且管理員的 email 為 dmtsai@www.centos.vbird ,此時我們可以這樣修改: ``` [root@www ~]# vim /etc/squid/squid.conf cache_mgr dmtsai@www.centos.vbird &lt;==管理員的 email 呦! visible_hostname www.centos.vbird &lt;==直接設定主機名喔! [root@www ~]# /etc/init.d/squid restart ``` * * * ### 17.2.5 安全性設定:防火墻, SELinux 與黑名單檔案 * 防火墻得要放行 tcp 的 port 3128 現在我們已經設定了讓 192.168.100.0/24 及 192.168.1.0/24 這兩段來源使用我們的 proxy server , 那么想當然爾,防火墻的設定就得要開放這兩段使用 port 3128 才行啊!不過你得要特別注意,并不是開放防火墻就能使用 proxy server 的資源,還得要使用 acl 配合 http_access 才行呦!注意注意!假設你已經使用了 iptables.rule , 那么修改的方法就是這樣: ``` [root@www ~]# vim /usr/local/virus/iptables/iptables.allow iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 --dport 3128 -j ACCEPT # 因為內網 192.168.100.0/24 本來就是全部都接受放行的! [root@www ~]# /usr/local/virus/iptables/iptables.rule ``` * SELinux 的注意事項 針對 proxy 來說,CentOS 6.x 倒是沒有給予太多的規則限制,因此似乎不太需要修訂規則。不過,SELinux 的安全本文在類型部分得注意。這包括配置文件 (/etc/squid/ 內的數據) 類型是 squid_conf_t 的樣式, 而快取目錄的類型則是 squid_cache_t 的類型,且上層類型 (/var/spool/) 應該是要成為 var_t 之類的才行。 修改的方法就是透過 chcon 來處理即可。 * 建立黑名單配置文件 我們在 [17.2.3](#http_access) 小節里面談到,可以透過『 dstdomain .domain.name 』來抵擋不想聯機的網站。 不過每次都得使用 root 身份來設定 squid.conf 才行。那有沒有辦法額外處理出一個檔案,讓想要拒絕聯機的數據寫入, 這樣比較容易管理,不需要一直去修改 squid.conf 嘛!有沒有辦法可以達成呢?有的,就透過特定檔案來處置即可。 看看底下這個例題來修訂一下吧: 例題:建立一個名為 /etc/squid/dropdomain.txt 的檔案,內容為拒絕聯機的目標網站。答:我們之前設定過相關的網站,處理的方法是直接將主機名寫入 squid.conf 中,現在我們可以這樣修訂: ``` [root@www ~]# vim /etc/squid/squid.conf # 找到底下的數據,就是 dropdomain 那行,約在 629 行左右,并且修改一下 acl dropdomain dstdomain "/etc/squid/dropdomain.txt" # 注意一下,如果是檔名,請寫絕對路徑,且使用雙引號或單引號圈起來! [root@www ~]# vim /etc/squid/dropdomain.txt .facebook.com .yahoo.com # 一行一個 domain 名稱即可 [root@www ~]# /etc/init.d/squid reload ``` 這個方法的好處是,你可以使用額外的控制方式去修改 /etc/squid/dropdomain.txt 這個檔案的內容, 并且修改完畢后再使用 reload 去加載配置文件,不必要重新啟動 (restart),因為 reload 的速度比較快速。 舉例來說,鳥哥的專題生就用 PHP 寫了一支控制該檔案的網頁接口,可以讓老師在上課時直接透過網頁輸入要被控制的目標網站, 這樣學生就無法在上課時聯機到外面的某些網站去玩游戲啰~ * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看