高效配置Linux代理伺服器――Squid

高效配置Linux代理伺服器――Squid作為一種免費的網路操作系統,Linux越來越受到廣大網路愛好者的歡迎,目前Internet上運行的主機有相當一部分採用的就是Linux,而且中國已經把Linux作為政府上網的指定網路操作系統。種種跡象表明,Linux正在逐漸走向成熟。為了解決Internet發展迅速和IP地址資源緊張的矛盾,代理伺服器的使用越來越廣泛。Squid是一種在Linux系統下使用的比較優秀的代理伺服器軟體。 代理服務 代理服務是指由一台擁有標準IP地址的機器代替若干沒有標準IP地址的機器和Internet上的其它主機打交道,提供代理服務的這台機器稱為代理伺服器。擁有內部地址的機器想連接到Internet上時,先把這個請求發給擁有標準IP地址的代理伺服器,由代理伺服器把這個請求通過它的標準IP地址發到請求的目的地址。然後目標地址的伺服器把返回的結果發回給代理伺服器,代理伺服器再原封不動的把資料發給內部主機。若干擁有內部地址的機器就組成了內部網,代理伺服器的作用就是溝通內部網和Internet,解決內部網訪問Internet的問題。這種代理事不可逆的,Internet上的主機不能訪問任何一台擁有內部地址的機器,這樣又可以保障內部資料的安全性。 代理軟體的一個優點是它能夠檢驗除了數據包之外的許多東西。Squid對數據包的有效載荷進行檢驗,也就是穿越防火牆的數據包中TCP(或者UDP)部分所佔地份量。根據數據包報頭(數據包中的IP部分)和數據包有效載荷(TCP部分)的信息,代理防火牆能夠決定數據包將發往何處,數據包請求什麼,以及根據數據包所必須提供的這些信息決定採取什麼樣的行動。 對於Web用戶來說,Squid是一個高性能的代理緩存伺服器,可以加快內部網瀏覽Internet的速度,提高客戶機的訪問命中率。Squid不僅支持 HTTP協議,還支持FTP、gopher、SSL和WAIS等協議。和一般的代理緩存軟體不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。 Squid將數據元緩存在內存中,同時也緩存DNS查尋的結果,除此之外,它還支持非模塊化的DNS查詢,對失敗的請求進行消極緩存。Squid支持SSL,支持訪問控制。由於使用了ICP,Squid能夠實現重疊的代理陣列,從而最大限度的節約帶寬。 Squid由一個主要的服務程序Squid,一個DNS查詢程序dnsserver,幾個重寫請求和執行認證的程序,以及幾個管理工具組成。當Squid 啟動以後,它可以派生出指定數目的dnsserver進程,而每一個dnsserver進程都可以執行單獨的DNS查詢,這樣一來就大大減少了伺服器等待 DNS查詢的時間。 Squid的另一個優越性在於它使用訪問控制清單(ACL)和訪問許可權清單(ARL)。訪問控制清單和訪問許可權清單通過阻止特定的網路連接來減少潛在的Internet非法連接,可以使用這些清單來確保內部網的主機無法訪問有威脅的或不適宜的站點。 編譯安裝Squid squid軟體包有兩種:一種是RedHat所使用的rpm包,另一種是源代碼包。 rpm包的安裝: 1.進入/mnt/cdrom/RedHat/RPMS。 2.執行rpm -ivh squid-2.2.STABLE4-8.I386.rpm。 源代碼包的安裝: 1.從http://www.squid-cache.org下載squid-2.2.STABLE4-src.tar.gz。 2.將該文件拷貝到/usr/local目錄。 3.解開該文件tar xvzf squid-2.2.STABLE4-src.tar.gz,在/usr/local目錄下生成一個新的目錄squid-2.2.STABLE4,為了方便使用mv squid-2.2.STABLE4 squid將目錄更名為squid。。 4.進入squid目錄。 5.執行./configure,可以用./configure -prefix=/directory/you/want指定安裝目錄。系統默認安裝目錄為/usr/local/squid。 6.執行make all。 7.執行make install。 8.安裝結束後,Squid的可執行文件在安裝目錄的bin子目錄下,配置文件在etc子目錄下。 配置squid 配置文件squid.conf Squid有一個主要的配置文件squid.conf,位於/etc/squid目錄下,用戶僅僅需要修改該配置文件即可。 squid.conf配置文件分為13個部分,分別是: 1.NETWORK OPTIONS(有關的網路選項) 2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用於鄰居選擇演算法的有關選項) 3.OPTIONS WHICH AFFECT THE CACHE SIZE(定義cache大小選項) 4.LOGFILE PATHNAMES AND CACHE DIRECTORIES(定義日誌文件的路徑及cache的目錄) 5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序選項) 6.OPTIONS FOE TUNING THE CACHE(調整cache選項) 7.TIMEOUTS(超時) 8.ACCESS CONTROLS(訪問控制) 9.ADMINISTRATIVE PARAMETERS(管理參數) 10.OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache註冊服務選項) 11.HTTPD-ACCELERATOE OPTIONS(HTTPD加速選項) 12.MISCELLANEOUS(雜項) 13.DELAY POOL PARAMETERS(延時池選項) 雖然squid的配置文件很龐大,但是用戶可以根據自己的實際情況修改相應的選項,並不需要配置所有的選項。下面介紹幾個常用的選項。 1.http_port 定義squid監聽HTTP客戶連接請求的埠。預設是3128,如果使用HTTPD加速模式則為80。可以指定多個埠,但是所有指定的埠都必須在一條命令行上。 2.cache_mem 指定squid可以使用的內存理想值,建議設為內存的1/3. 3.cache_dir Directory-Name Mbytes Level1 Level2 指定squid用來存儲對象的交換空間的大小及其目錄結構。可以用下面的公式來估算系統所需要的子目錄數目。 已知量: DS = 可用交換空間總量(單位KB)/ 交換空間數目 OS = 平均每個對象的大小= 20k NO = 平均每個二級子目錄所存儲的對象數目 = 256 未知量: L1 = 一級子目錄的數量 L2 = 二級子目錄的數量 計算公式: L1 x L2 = DS / OS / NO 注意這是個不定方程,可以有多個解。 4.maximum_object_size大於該值得對象將不被存儲。如果要提高訪問速度,就降低該值;如果想最大限度的節約帶寬,降低成本,就增加該值。 5.dns_nameservers定義Squid進行域名解析時使用的域名伺服器。 6.acl 定義訪問控制列表。定義語法為: acl aclname acltype string ... acl aclname acltype "file" ... 7.http_access 根據某個訪問控制列表允許或禁止某一類用戶訪問。 運行Squid 配置並保存好squid.conf後,就可以啟動、停止和重新啟動Squid: /etc/rc.d/init.d/squid start /etc/rc.d/init.d/squid stop /etc/rc.d/init.d/squid restart 可以通過ps命令查看Squid服務是否已經正常啟動: ps -A |grep squid 如果出現以下信息: 6573 ? 00:00:00 squid 6574 ? 00:00:00 squid 則表明Squid服務已經正常啟動。 客戶端的配置 將某台終端設置成內部地址,並將該終端的DNS伺服器設置為代理伺服器的DNS服務,在內部地址和標準地址之間作一個路由。在瀏覽器里設置代理伺服器地址為Squid代理伺服器的地址,就可以通過代理伺服器上網了。 一個實例 假設有這樣的應用環境,網路中有一台撥號伺服器為用戶提供撥號接入服務,且運行有Squid實現的代理伺服器,其IP地址為192.168.2.32。撥號用戶得到一個內部IP,地址範圍為192.168.2.1-192.168.2.30。 1.配置squid.conf http_port 80 cache_mem 32 MB cache_swap_low 90 cache_swap_high 95 maximum_object_size 4096 KBcache_dir /var/spool/squid 100 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 cache_dns_program /usr/lib/squid/dnsserver dns_nameservers 192.168.2.32 unlinkd_program /usr/lib/squid/unlinkd acl all src 0.0.0.0/0.0.0.0 acl allow_ip src 192.168.2.1/255.255.255.0 acl manager proto cache_object acl localhost src 192.168.2.32/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 21 443 563 70 210 1025-65535 acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow allow_ip cache_effective_user squid cache_effective_group squid 下面兩個選項是用來定義squid加速模式的。用virtual來指定為虛擬主機模式。80埠為要加速的請求埠。採用這種模式時,Squid就取消了緩存及ICP功能,假如需要這些功能,必須設置httpd_accel_with_proxy選項。 httpd_accel_host virtual httpd_accel_port 80 下面兩個選項在透明代理模式下是必須設置成on的。在該模式下,Squid既是web請求的加速器,又是緩存代理伺服器。 httpd_accel_with_proxy on httpd_accel_uses_host_header on 設置透明代理時,必須打開包轉發功能,還要結合ipchains: echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/ipchains -A input -j ACCEPT -i lo /sbin/ipchains -A forward -s 192.168.2.1/24 -d 0/0 -j MASQ 2.用戶認證設置 默認時,Squid本身不帶任何認證程序,但是可以通過外部認證程序來實現用戶認證。一般有以下的認證程序:LDAP認證、SMB認證、基於mysql的認證、基於sock5的密碼認證和基於Radius的認證。下面介紹常用的ncsa實現的認證,ncsa是Squid源代碼包自帶的認證程序之一,實現步驟如下: * 進入/usr/local/squid/auth_modules/NCSA目錄,執行: make make install * 編譯成功後,會生成ncsa_auth的可執行文件,拷貝生成的可執行文件到/usr/bin目錄下。 * 修改squid.conf文件的相關選項。 acl auth_user proxy_auth REQUIRED http_access allow auth_user authenticate_program /usr/local/squid/bin/ncsa_auth/usr/local/squid/etc/passwd * 利用Apache攜帶的工具軟體htpasswd在/usr/locad/squid/etc下生成密碼文件,並添加相應的用戶信息。該密碼文件每行包含一個用戶的信息,即用戶名和密碼。例如,用htpasswd生成密碼文件passwd並添加用戶me: htpasswd -c /usr/local/squid/etc/passwd me * 重新啟動Squid,密碼認證生效。 3.客戶端的設置 在客戶端瀏覽器的選項中將代理伺服器的IP地址設為192.168.2.32,http埠為80。若要設置透明代理,則客戶端不需要在瀏覽器中指定代理伺服器,而將網關設為192.168.2.32,並且客戶端要配置好DNS。 現在,內部網的主機就可以通過代理訪問Internet了。 結束語 Squid與Linux下其它的代理軟體如Apache、Socks、TIS FWTK和delegate相比,下載安裝簡單,配置簡單靈活,支持緩存和多種協議。用ipchains+Squid的解決方案,就可以獲得通過緩存高性能的同時能夠無縫的訪問Internet。最後說明一點,squid不僅可用在Linux系統上,還可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系統上。
推薦閱讀:

嚴肅八卦論太子妃張天愛:一半火山一半溫泉惹人愛
樅陽縣留守兒童有了「代理媽媽」
她們代理「第一夫人」
9萬個醫療器械代理商將被淘汰出局……
外匯IB代理商的九大經營模式解析

TAG:Linux | 伺服器 | 高效 | 配置 | 代理 | 代理伺服器 |