Posted in WWW

apache + proxy + squid + transparent

apache + proxy + squid + transparent Posted on 2006 年 11 月 11 日1 Comment

1. apt-get install squid

2. vi squid.conf

http_port 3128       # daemon 的 port
icp_prot 3130        # 被查詢封包觀察3130
 
cache_dir ufs /var/spool/squid 100 16 256
# <cache_dir> <aufs|ufs> <目錄所在> <MBytes大小> <dir1> <dir2>
# 這個暫存目錄下有 16 個目錄,而每個目錄中又有 256 個目錄

cache_access_log /var/log/squid/access.log

cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
 
# 關閉認證機制
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
 
http_access allow all                   #使用squid的權限
 
cache_effective_user squid
cache_effective_group squid
cache_mgr youraccount@your.e.mail          # 管理者Email 帳號

3. service squid start
 
4. 測試
『工具』-> 『Internet 選項』-> 『連線』-> 『區域網路設定』中,點選 『使用 Proxy 伺服器』
 

cache_dir 重新建置的步驟

1. vi squid.conf

cache_dir ufs /var/spool/squid 1000 16 256

2.
rm -rf /var/spool/squid
mkdir /var/spool/squid
chown squid:squid /var/spool/squid
squid -z

註: 使用tarball編譯過程中有加–enable-async-io這參數,可使用aufs的資料存取格式,可以將你的硬碟發揮到最極限的速度
cache_dir aufs /var/spool/squid 1000 16 25
 

記憶體的需求數量

Proxy 會將資料存在Cache 硬碟中 及記憶體當中
 
約每 1GBytes 的 cache_dir 空間就消耗 10MB 的實體記憶體容量
squid 程式佔用掉的實體記憶體約為 10-20 MB
 
squid.conf設定檔裡的參數cache_mem
指的並不是指我要使用多少記憶體給 squid 使用,而是指 "我還要額外提供多少記憶體給 squid 使用" 的意思
 
假設我有 X GB 的磁碟快取空間,而且 squid 程式使用掉 15 MB 的記憶體,那麼我 squid 使用掉的記憶體就有:
X * 10 + 15 + "cache_mem 設定值"
 
squid 官方網站建議
假如我的快取容量為 3 GB,cache_mem 設定為 16MB,則squid 至少會消耗掉 3*10+15+16 = 61MB
所以squid 至少會消耗掉 3*10+15+16 = 61MB,才會有比較好的效能

# 與記憶體有關的設定:因為我的系統很小,所以只給 8 MB!如果您的實體記憶體
# 很大的情況下,例如 512 MB,可以考慮加大到 64 或 128 MB。
cache_mem 8 MB
# 與磁碟容量有關的設定(註:下列的 90 與 95 是百分比 )
# 如果您的 cache_dir 所在磁碟很大時,可以考慮將 4096 改成 32768 KB
cache_swap_low 90
cache_swap_high        95
maximum_object_size        4096 KB
# 與記憶體保存資料有關的設定
maximum_object_size_in_memory 8 KB
# 我們經由 dns 正反解以及 IP 的結果,記錄在暫存區啊!
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024

磁碟容量的設定
如果磁碟快取空間額滿了,那麼 squid 也就會『掛點』了
可設定這兩個參數cache_swap_low, cache_swap_high

cache_swap_low 90
cache_swap_high 95

當我的快取目錄所佔容量為總快取量的 95% 時,那麼我的 squid 將會自動的將快取目錄內的容量
減低至剩下 90% 的容量!』假如cache_dir 總共有 3GB ,那麼當快取空間被
使用了 3*0.95=2.85GB 時,squid 會自動的將 2.85GB 裡面較舊的資料刪
除,使快取目錄內剩下 3*0.9=2.7GB 的空間

如果 proxy 容易很多人同時上線時,就降低 cache_swap_high,
否則容易使cache目錄瞬間超過額度,以致cache掛點
 
是否需要記錄捉到的資料

maximum_object_size [ 4096 KB | 32768 KB ]

限制一下需要記錄的『最大檔案』超過 4MB 的檔案是不記錄的(就是不放入 cache 的意思)

 

ACCESS CONTROLS

# <acl> <acl名稱> <acl類型> <設定的內容>
acl nckuip src 140.116.0.0/16
# 在 squid.conf 裡面,任何使用到 nckuip 這個代名詞時,
# 就表示他是『來源為 140.116.0.0/16 的位址』
 
acl nckuevoffice src 140.116.44.120-140.116.44.130/24
# 來自 140.116.44.120 到 140.116.44.130 之間這 11 個 IP 的要求
 
acl sy srcdomain .sy.com.tw
 
acl urlname url_regex ^http://www.sy.com.tw.*
# 示 urlname 代表的就是來自 http://www.sy.com.tw 這個網站的『任何資料』
 
acl gifname urlpath_regex .gif$
# 對單一檔名
# 代表 gifname 代表的是 url 後面是 .gif 的網址,
# http://www.sy.com.tw/xxx.gif

上層 Proxy cache_peer

# cache_peer> <主機名稱> <類別> <http_port> <icp_port> <其他參數>
 
cache_peer gate.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
cache_peer gate2.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
cache_peer gate3.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange
cache_peer proxy.ncku.edu.tw parent 3128 3130 no-digest no-netdb-exchange

其他參數:
proxy-only     :只取出上層 Proxy 的 cache 給 client ,並不會將上層 Proxy 的資料存在自己的 cache 硬碟中;
weight=n     :權重的意思,因為我們可以指定多部上層 Proxy 主機,哪一部最重要?就可以利用這個 weight 來設定,
                                     n 越大表示這部 Proxy 越重要
no-query        :一般來說,如果要向 sibling 要求資料時,會向 sibling 送出 icp 的要求封包,使用 no-query 就可以取消。
                                    一般來說,如果向上層 Proxy 要求資料時,可以不需要發送 icp 封包,以降低主機的負擔
default      :表示該部主機為預設的 Proxy 主機的意思;
no-netdb-exchange :表示不向附近的 Proxy 主機送出 imcp 的封包要求
no-digest              :表示不向附近主機要求建立 digest 紀錄表格。

有了上層 Proxy ,而且每一部所負責的網域並不相同
例如成大:
gate.ncku.edu.tw 主要服務 .com 的網域
gate3.ncku.edu.tw 主要服務 .net .edu 的網域
gate2.ncku.edu.tw 主要服務非 .com .net 與 .edu 的網域
proxy.ncku.edu.tw 主要服務任何網址
 
所以需要先利用acl 將網域分門別類

# 自己想要,直接使用自己的 Proxy 捉取的資料
acl directip dst 140.116.44.0/24
acl directdn dstdomain .vbird.org tw.yaoo.com tw.news.yahoo.com
 
# 台灣的網域
acl twdn dstdomain .tw .twnic.net .hinet.net .acer.net  .wownet.net .seeder.net .silkera.net .neto.net timenet.net tw.aunet.net .adsldns.org
 
 # 台灣的 IP
acl twip dst 163.28.0.0/16 140.96.0.0/11 140.128.0.0/12  140.92.0.0/16 139.175.0.0/16 139.223.0.0/16 163.12.0.0/14 163.16.0.0/14 168.95.0.0/16
192.72.0.0/16 192.83.160.0/19 192.83.192.0/22 192.192.0.0/16 202.39.0.0/16 202.132.128.0/17
202.145.224.0/19 203.64.0.0/12 210.64.0.0/13 210.60.0.0/14
 
# 一些商業、網域、教育、以及其他的網域
acl comdn dstdomain .com
acl netdn dstdomain .net
acl edudn dstdomain .edu
 
 
# 開始來設定『各個主要的網域要透過哪一個上層
# Proxy 來進行資料的取得
# 假設
# gate.ncku.edu.tw 僅負責 .com 的網域;
# gate3.ncku.edu.tw 僅負責 .net 與 .edu 的網域
# gate2.ncku.edu.tw 不負責上面的三個網域
# proxy.ncku.edu.tw 不負責上面三個網域
 
# <cache_peer_access> <上層 Proxy > <allow|deny> <acl名稱>
cache_peer_access gate.ncku.edu.tw allow comdn
cache_peer_access gate.ncku.edu.tw deny !comdn
cache_peer_access gate3.ncku.edu.tw allow netdn
cache_peer_access gate3.ncku.edu.tw allow edudn
cache_peer_access gate3.ncku.edu.tw deny !netdn
cache_peer_access gate3.ncku.edu.tw deny !edudn
cache_peer_access gate2.ncku.edu.tw deny comdn
cache_peer_access gate2.ncku.edu.tw deny netdn
cache_peer_access gate2.ncku.edu.tw deny edudn
cache_peer_access gate2.ncku.edu.tw deny directdn
cache_peer_access gate2.ncku.edu.tw deny directip
cache_peer_access gate2.ncku.edu.tw deny twdn
cache_peer_access gate2.ncku.edu.tw deny twip
cache_peer_access gate2.ncku.edu.tw deny nckudn
cache_peer_access gate2.ncku.edu.tw deny nckuip
cache_peer_access proxy.ncku.edu.tw deny comdn
cache_peer_access proxy.ncku.edu.tw deny netdn
cache_peer_access proxy.ncku.edu.tw deny edudn
cache_peer_access proxy.ncku.edu.tw deny directdn
cache_peer_access proxy.ncku.edu.tw deny directip
cache_peer_access proxy.ncku.edu.tw deny twdn
cache_peer_access proxy.ncku.edu.tw deny twip
cache_peer_access proxy.ncku.edu.tw deny nckudn
cache_peer_access proxy.ncku.edu.tw deny nckuip

不要進行 cache 的設定值
有些網站的資料事實上並沒有做為 cache 的需要,例如 CGI 檔案就是一個很鮮明的案例
#只要在網址列出現了 cgi-bin 的字樣時,該網頁資料就不進行 cache 的動作

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY

時間相關的設定值
<refresh_pattern> <regex> <最小時間> <百分比> <最大時間>

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher:     1440 0% 1440
refresh_pattern . 0 20% 4320

###目標(網址)##最小時間內檔案有更動就更新##目標檔案上次更新的時間到現在已經經過最大時間的『百分比』時,就更新
 
# 網址裂開頭是 ftp 的話,那麼在一天(1440分鐘)後,如果 proxy 再次取用這個檔案時,則 cache 內的資料會被更新
 
connect_timeout 30 seconds                 # 指的是連接到其他主機的時間多久之後算失敗

peer_connect_timeout 10 seconds        # 指的是連接到上層 Proxy 多久不成功就算失敗

request_timeout 1 minutes                      # 指的是,連線上了,但是要求的時間會多長

persistent_request_timeout 20 seconds   # 指的是連續要求時間會有多

有些資料讓 Proxy 自已去捉取,不透過上層 Proxy

# 使用 acl 先定義出要直接或者不要直接去的網址或 IP 直接要 Proxy 出去捉資料,可以使用 always_direct
always_direct allow directip directdn
# ————–acl名稱(後面空格接第二個)
 
# 拒絕經由上層 Proxy 出去,可以使用 never_direct
never_direct deny twdn twip

管制連線
 
讓內部 192.168.0.0/24 這個網域的使用者可以使用我的 proxy

# 1. 先設定這個內部網域的 acl 名稱
acl inside src 192.168.0.0/24
 
# 2. 設定 http_access 讓他可以使用
http_access allow inside
http_access deny all

進行 FTP 的服務取得資料
透過瀏覽器,經由 proxy 提供的 FTP 功能來匿名登入對方主機

# 針對被動式連線方式來設定
ftp_user Squid@
ftp_passive on
# 與 DNS 的設定值有關,如果在高負載的 Proxy環境下,可以考慮將
# dns_children 提高到 20 左右,這個值最大為 32
dns_timeout 1 minutes
hosts_file /etc/hosts

 防火牆
iptables -A INPUT -p TCP -i eth0 –dport 3128:3130 -j ACCEPT

 

NAT + Proxy + transparent proxy

當使用者經過 NAT 伺服器來連線進入 Internet 時,
假如使用的 Internet 協定為 80 (也就是 WWW) ,
那麼就將這個要求交給 Proxy 來工作,以達到代理伺服器的功能
 
vi squid.conf

# Proxy 主機名稱 與 port !
httpd_accel_host dev2.sy.com
 
# 因為我們是要進行 WWW 的資料快取,所以 port 當然就是 80
httpd_accel_port 80
 
# 這個很重要!因為設定 httpd_accel_host 之後, cache 的設定
# 會自動被終止, 必須要加上這個設定為 on 之後,才能提供 cache 的功能!
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

此時squid 就有 transparent proxy 的功能
 
設定MAPPing
 
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 10.0.0.0/8 –dport 80 -j REDIRECT –to-ports 3128
 
[Q1.] 如何得知squid執行中的狀態
[A1.] 最簡單的方式便是透過瀏覽器來觀察。
squid本身提供一隻cgi程式,檔名為cachemgr.cgi,
squid安裝完後將它複製到Apache下的cgi-bin這個目錄下即可使用。
要察看Cache Manager提供的資訊時,請在瀏覽器的位址列中鍵入
http://伺服器的名稱或IP位址/cgi-bin/cachemgr.cgi

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *