LPI Linux 認證/實施代理伺服器
(LPIC-2 版本 4.5)
權重 2
描述: 候選人應該能夠安裝和配置代理伺服器,包括訪問策略、身份驗證和資源使用。
關鍵知識領域
- Squid 3.x 配置檔案、術語和實用程式
- 訪問限制方法
- 客戶端使用者身份驗證方法
- Squid 配置檔案中 ACL 的佈局和內容
術語和實用程式
squid.confaclhttp_access
- 實施代理伺服器
我們將使用 squid web 代理伺服器版本 2.4 和 Linux 核心版本 2.4。
代理可以透過兩種方式進行:正常代理 和 透明代理
- 在正常代理中,客戶端在他的網頁瀏覽軟體中指定代理的主機名和埠號。然後瀏覽器向代理發出請求,代理將這些請求轉發到原始伺服器。
- 在透明代理中,...
如果使用透明代理:您想強制網路上的客戶端使用代理,無論他們是否願意。您想讓客戶端使用代理,但不想讓他們知道他們正在被代理。您想讓客戶端被代理,但不想費心更新數百或數千個網頁瀏覽器的設定。
有兩種型別的透明代理
- Squid 在閘道器上
- Squid 在與閘道器不同的盒子上
設定 squid 用於普通代理非常簡單:在安裝 squid 後,編輯預設配置檔案 squid.conf 找到以下指令,取消註釋並將其更改為適當的值
- httpd_accel_host virtual
- httpd_accel_port 80
- httpd_accel_with_proxy on
- httpd_accel_uses_host_header on
接下來,檢視 cache_effective_user 和 cache_effective_group 指令,並使用專用使用者和組(即 squid/squid)設定它們
最後,檢視 http_access 指令。預設值通常為 ``http_access deny all。這將阻止任何人訪問 squid。目前,您可以將其更改為 ``http_access allow all,但一旦它開始工作,您可能需要閱讀 ACL(訪問控制列表)的說明,並設定快取,以便只有您本地網路上的人員(或任何其他人員)可以訪問快取。
squid 中的 ACL 將使您能夠限制對代理的訪問。
ACL 規則的一般格式為
acl aclname acltype string1 ...
然後可以在 http_access 指令中使用 ACL 規則
ACL 型別為
- Src:acl aclname src ip-address/netmask
acl aclname src 172.16.1.0/24
- Dst:acl aclname dst ip-address/netmask
acl aclname dst 172.16.1.0/24
- Time:acl aclname time [day-abbreviations: M,T,W,H,F,A,S] [h1:m1-h2:m2]
acl ACLTIME time M 9:00-17:00
- Port:acl aclname port port-no
acl acceleratedport port 80
- Proto:acl aclname proto protocol
acl aclname proto HTTP FTP
- Method:acl aclname method method-type
acl aclname method GET POST
- Maxconn:acl aclname maxconn integer
acl twoconn maxconn 5
接下來,使用 squid -z 初始化快取目錄(如果這不是 squid 的新安裝,則應跳過此步驟)。接下來,透過 /etc/init.d/squid 指令碼啟動 squid,您應該能夠將網頁瀏覽器的代理設定設定為盒子的 IP 和埠 3128(除非您更改了預設埠號),並將 squid 作為普通代理訪問。實施代理伺服器 透明代理可以透過兩種不同的方式設定:在路由器上或在另一個(遠端)主機上 在路由器上進行透明代理將涉及在“正常”情況下設定 squid,並將配置資料包過濾子系統以將客戶端的連線重定向到 squid
所需的核心網路選項為
- 在“常規設定”下
- 網路支援
- Sysctl 支援
- 在“網路選項”下
- 網路資料包過濾
- TCP/IP 網路
- 在“網路選項”->“IP:Netfilter 配置”下
- 連線跟蹤
- IP 表支援
- 完整 NAT
- REDIRECT 目標支援
- 在“檔案系統”下
- /proc 檔案系統支援
您必須在網路選項下對 快速切換 說不!
一旦您啟動了新的核心,請確保您啟用了 IP 轉發。接下來,要配置 iptables 以啟用透明代理,您只需
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128
假設我們有兩個名為 squid-box 和 iptables-box 的盒子,它們都在 local-network 網路上。首先,在 squid 將在其上執行的機器 squid-box 上,您不需要 iptables 或任何特殊的核心選項,只需要 squid。但是,您將需要上述“http_accel”選項。現在,在 iptables 將在其上執行的機器 iptables-box 上,您需要按上述配置核心,但您不需要 REDIRECT 目標支援。您將需要 2 條 iptables 規則
iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box
第一個將資料包從 iptables-box 傳送到 squid-box。第二個確保回覆透過 iptables-box 傳送回客戶端,而不是直接傳送給客戶端。這非常重要,因為否則 squid 永遠不會收到來自目標 Web 伺服器的答案(因此,無法進行快取!)。
關鍵詞、檔案和實用程式
- squid.conf
- Acl
- http_access
- 練習