第五天 應用代理SQUID

squid 高級的選項html


http_port192.168.1.1:3128 transparentmysql


[root@localhost ~]# iptables -t nat -APREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128linux

[root@localhost ~]# iptables -t nat -APREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128web



網絡選項算法

1.tcp_incoming_address sql

tcp_outgoing_address apache

udp_incoming_address 緩存

udp_outgoing_address 安全

說明:服務器

tcp_incoming_address指定監聽來自客戶或其餘squid代理服務器的綁定ip地址;

tcp_outgoing_address指定向遠程服務器或其餘squid代理服務器發起鏈接的ip地址

udp_incoming_addressICP套接字指定接收來自其餘squid代理服務器的包的ip地址 udp_outgoing_addressICP套接字指定向其餘squid代理服務器發送包的ip地址;

缺省爲沒有綁定任何ip地址。該綁定地址能夠用ip指定,也能夠用完整的域名指定。

5.1.2交換空間設定選項

1.cache_swap_low (percent, 0-100)

cache_swap_high (percent, 0-100)

說明:squid使用大量的交換空間來存儲對象。那麼,過了必定的時間之後,該交換空間就會用完,因此還必須按期的按照某種指標來將低於某個水平

線的對象清除。squid使用所謂的最近最少使用算法LRU)來作這一工做。當已使用的交換空間達到cache_swap_high時,squid

就根據LRU所計算的獲得每一個對象的值將低於某個水平線的對象清除。這種清除工做一直進行直到已用空間達到cache_swap_low。這兩個值用百分

比表示,若是你所使用的交換空間很大的話,建議你減小這兩個值得差距,由於這時一個百分點就多是幾百兆空間,這勢必影響squid的性能。缺省爲:

cache_swap_low 90

cache_swap_high 95

2.maximum_object_size

說明:大於該值得對象將不被存儲。若是你想要提升訪問速度,就請下降該值;若是你想最大限度地節約帶寬,下降成本,請增長該值。單位爲K,缺省值爲:

maximum_object_size 4096 KB

5.1.3有關日誌的選項

1.cache_access_log

說明:指定客戶請求記錄日誌的完整路徑(包括文件的名稱及所在的目錄),該請求能夠是來自通常用戶的HTTP請求或來自鄰居的ICP請求。缺省值爲:

cache_access_log /var/log/squid/access.log

若是你不須要該日誌,能夠用如下語句取消:cache_access_log none

2.cache_store_log

說明:指定對象存儲記錄日誌的完整路徑(包括文件的名稱及所在的目錄)。該記錄代表哪些對象被寫到交換空間,哪些對象被從交換空間清除。缺省路徑爲:

cache_log /var/log/squid/cache.log

若是你不須要該日誌,能夠用如下語句取消:cache_store_log none

3.cache_log

說明:指定squid通常信息日誌的完整路徑(包括文件的名稱及所在的目錄)。

缺省路徑爲:cache_log /var/log/squid/cache.log

4.cache_swap_log

說明:該選項指明每一個交換空間的「swap.log」日誌的完整路徑(包括文件的名稱及所在的目錄)。該日誌文件包含了存儲在交換空間裏的對象的

元數據(metadata)。一般,系統將該文件自動保存在第一個「cache_dir」說定義的頂級目錄裏,可是你也能夠指定其餘的路徑。若是你定義了

多個「cache_dir」,則相應的日誌文件多是這樣的:

cache_swap_log.00

cache_swap_log.01

cache_swap_log.02

後面的數字擴展名與指定的多個「cache_dir」一一對應。

須要注意的是,最好不要刪除這類日誌文件,不然squid將不能正常工做。

5.pid_filename

說明:指定記錄squid進程號的日誌的完整路徑(包括文件的名稱及所在的目錄)。缺省路徑爲

pid_filename /var/run/squid.pid

若是你不須要該文件,能夠用如下語句取消:pid_filename none

6.debug_options

說明:控制做日誌時記錄信息的多寡。能夠從兩個方面控制:section控制從幾個方面做記錄;level控制每一個方面的記錄的詳細程度。推薦的方式(也是缺省方式)是:debug_options ALL,1

即,對每一個方面都做記錄,但詳細程度爲1(最低)

7.log_fqdn on|off

說明:控制在 access.log 中對用戶地址的記錄方式。打開該選項時,squid記錄客戶的完整域名,取消該選項時,squid記錄客戶

ip地址。注意,若是打開該選項會增長系統的負擔,由於squid還得進行客戶ipDNS查詢。缺省值爲:log_fqdn off

5.1.4有關外部支持程序的選項

1.ftp_user

說明:設置登陸匿名ftp服務器時的提供的電子郵件地址,登陸匿名ftp服務器時要求用你的電子郵件地址做爲登陸口令(更多的信息請參看本書的相

關章節)。須要注意的是,有的匿名ftp服務器對這一點要求很苛刻,有的甚至會檢查你的電子郵件的有效性。缺省值爲:ftp_user Squid@

2.ftp_list_width

說明:設置ftp列表的寬度,若是設得過小將不能的瀏覽到長文件名。缺省值爲: ftp_list_width 32

3.cache_dns_program

說明:指定DNS查詢程序的完整路徑(包括文件的名稱及所在的目錄)。缺省路徑爲:

cache_dns_program /usr/lib/squid/dnsserver

4.dns_children

說明:設置DNS查詢程序的進程數。對於大型的登陸服務器系統,建議該值至少爲10。最大值能夠是32,缺省設置爲5個。注意,若是你任意的下降

該值,可能會使系統性能急劇下降,由於squid主進程要等待域名查詢的結果。沒有必要減小該值,由於DNS查詢進程並不會消耗太多的系統的資源。

5.dns_nameservers

說明:指定一個DNS服務器列表,強制squid使用該列表中的DNS服務器而非使用/etc/resolv.conf文件中定義的DNS服務器。你能夠這樣指定多個DNS服務器:dns_nameservers 172.20.80.2 172.16.0.4

缺省設置爲:dns_nameservers none

6.unlinkd_program

說明:指定文件刪除進程的完整路徑。

缺省設置爲:

unlinkd_program /usr/lib/squid/unlinkd

7.pinger_program

說明:指定ping進程的完整路徑。該進程被squid利用來測量與其餘鄰居的路由距離。該選項只在你啓用了該功能時有用。缺省爲:

pinger_program /usr/lib/squid/pinger

8.authenticate_program

說明:指定用來進行用戶認證的外部程序的完整路徑。squid的用戶認證功能咱們將在後面的章節講述。缺省設置爲不認證。

5.1.5用戶訪問控制選項

1.request_size (KB)

說明:設置用戶請求通信量的最大容許值(單位爲KB)。若是用戶用POST方法請求時,應該設一個較大的值。缺省設置爲:

request_size 100 KB

2.reference_age

說明:squid根據對象的LRU(最近最少使用算法)來清除對象,squid依據使用磁盤空間的總量動態地計算對象的LRU年齡。咱們用

reference_age定義對象的最大LRU年齡。若是一個對象在指定的reference_age內沒有被訪問,squid將刪除該對象。缺省值爲

一個月。你可使用以下所示的時間表示方法。

1 week

3.5 days

4 months

2.2 hours

3.quick_abort_min (KB)

quick_abort_max (KB)

quick_abort_pct (percent)

說明:控制squid是否繼續傳輸被用戶中斷的請求。當用戶中斷請求時,squid將檢測

quick_abort 的值。若是剩餘部分小於「quick_abort_min」指定的值,squid 將繼續完成剩餘部分的傳輸;若是剩餘

部分大於「quick_abort_max」指定的值,squid 將終止剩餘部分的傳輸;若是已完成「quick_abort_pct」指定的百分比,

squid將繼續完成剩餘部分的傳輸。缺省的設置爲:

quick_abort_min 16 KB

quick_abort_max 16 KB

quick_abort_pct 95

5.1.6各種超時設置選項

1.negative_ttl time-units

說明:設置消極存儲對象的生存時間。所謂的消極存儲對象,就是諸如鏈接失敗"404 Not Found"等一類錯誤信息。缺省設置爲:negative_ttl 5 minutes

2.positive_dns_ttl time-units

說明:設置緩存成功的DNS查詢結果的生存時間。缺省爲6小時。

positive_dns_ttl 6 hours

3.negative_dns_ttl time-units

說明:設置緩存失敗的DNS查詢結果的生存時間。缺省爲5分鐘。

negative_dns_ttl 5 minutes

4.connect_timeout time-units

說明:設置squid等待鏈接完成的超時值。缺省值爲2分鐘。

connect_timeout 120 seconds

5.read_timeout time-units

說明:若是在指定的時間內squid還沒有從被請求的服務器讀入任何數據,則squid將終止該客戶請求。缺省值爲15分鐘。

read_timeout 15 minutes

6.request_timeout

說明:設置在創建與客戶的鏈接後,squid將花多長時間等待客戶發出HTTP請求。缺省值爲30秒。

request_timeout 30 seconds

7.client_lifetime time-units

說明:設置客戶在與squid創建鏈接後,能夠將該鏈接保持多長時間。

注意,由於客戶創建的每一個鏈接都會消耗必定的系統資源,因此若是你是爲一個大型網絡提供代理服務的話,必定要正確地修改該值。由於若是同一時間的

鏈接數量太大的話,可能會消耗大量的系統資源,從而致使服務器宕機。缺省值爲1天,該值太大了,建議根據你本身的狀況適當減少該值。

client_lifetime 1 day

8.half_closed_clients on/off

說明:有時候因爲用戶的不正常操做,可能會使與squidTCP鏈接處於半關閉狀態,

這時候,該TCP鏈接的發送端已經關閉,而接收端正常工做。缺省地,squid將一直保持這種處於半關閉狀態的TCP鏈接,直到返回套接字的讀寫

錯誤纔將其關閉。若是將該值設爲off,則一旦從客戶端返回「no more data to read」的信息,squid就當即關閉該鏈接。

half_closed_clients on

9.pconn_timeout

說明:設置squid在與其餘服務器和代理創建鏈接後,該鏈接閒置多長時間後被關閉。缺省值爲120秒。

pconn_timeout 120 seconds

10.ident_timeout

說明:設置squid等待用戶認證請求的時間。缺省值爲10秒。

ident_timeout 10 seconds

11.shutdown_lifetime time-units

說明:當收到SIGTERM 或者 SIGHUP 信號後, squid將進入一種shutdown pending的模式,等待全部活動的套接字關閉。在過了shutdown_lifetime所定義的時間後,全部活動的用戶都將收到一個超時信息。缺省值爲30秒。

shutdown_lifetime 30 seconds

5.1.7管理參數選項

1.cache_mgr

說明:設置管理員郵件地址。缺省爲:

cache_mgr root

2. cache_effective_user

cache_effective_group

說明:若是用root啓動squidsquid將變成這兩條語句指定的用戶和用戶組。缺省變爲squid用戶和squid用戶組。注意這裏指定

的用戶和用戶組必須真是存在於/etc/passwd中。若是用非root賬號啓動squid,則squid將保持改用戶及用戶組運行,這時候,你不能指

定小於1024http_port

cache_effective_user squid

cache_effective_group squid

3.visible_hostname

說明:定義在返回給用戶的出錯信息中的主機名。

: visible_hostname cache.linux-oracle.com

4.unique_hostname

說明:若是你有一個代理服務器陣列,而且你爲每一個代理服務器指定了一樣的「visible_hostname」,同時你必須爲它們指定不一樣的「unique_hostname」來避免「forwarding loops 」(傳輸循環)發生。

5.1.8其它雜項

1. dns_testnames

說明:設置進行DNS查詢測試,若是第一個站點解析成功則當即結束DNS查詢測試。若是你不肯意進行DNS查詢測試,就不要去掉缺省的設置。

#dns_testnames netscape.com internic.net nlanr.net microsoft.com

2.logfile_rotate

說明:一般,squid會按期的將日誌文件改名並打包。好比正在使用的日誌文件爲access.log,squid會將其改名並打包爲access.log.1.gz;過了必定時間後,squid又會將

access.log.1.gz改名爲access.log.2.gz並將當前的日誌文件改名並打包爲access.log.1.gz,以此循

環。logfile_rotate所指定的數字即爲打包並備份的文件的數量,當達到這一數目時,squid將刪除最老的備份文件。缺省值爲10。若是你想

手動來進行這些操做,你能夠用logfile_rotate 0來取消自動操做。

3.err_html_text

說明:用該語句定義一個字符串變量,能夠用%L在返回給用戶的錯誤信息文件中引用。錯誤信息文件一般在/etc/squid/errors目錄中,這是一些用HTML寫成的腳本文件,你能夠本身修改它。

4.deny_info

說明:你能夠定製自定義的拒絕訪問信息文件,而且能夠和不一樣的用戶列表相關聯。當用戶被http_access相關規則拒絕時,squid能夠向用戶顯示你自定義的相應的拒絕訪問信息文件。語法爲:

Usage: deny_info err_page_name acl

好比:

deny_info ERR_CUSTOM_ACCESS_DENIED bad_guys

5.memory_pools on|off

說明:若是你將該項設爲on,則squid將保留全部已經分配(可是未使用)的內存池以便在未來使用。缺省爲on.

memory_pools on

6.log_icp_queries on|off

說明:設置是否對ICP請求做日誌。若是你的系統負載很大,你能夠用off來取消該功能。缺省爲:

log_icp_queries on

7.always_direct

說明:該選項容許你指定某些用戶類,squid將這些用戶類的請求直接轉發給被請求的服務器。語法爲:

always_direct allow|deny [!]aclname ...

如:直接轉發FTP請求能夠這樣設置:

acl FTP proto FTP

always_direct allow FTP

8.never_direct

說明:與always_direct相反。語法爲:

Usage: never_direct allow|deny [!]aclname ...

好比,爲了強制除了本地域的其餘用戶使用代理服務器,你能夠這樣設置:

acl local-servers dstdomain linux-oracle.com

acl all src 0.0.0.0/0.0.0.0

never_direct deny local-servers

never_direct allow all

9.icon_directory

說明:指明向用戶傳送錯誤信息時所用到的圖標文件的目錄。缺省路徑爲: icon_directory /usr/lib/squid/icons

10.error_directory

說明:指明向用戶傳送錯誤信息所用到的錯誤描述文件的目錄。缺省路徑爲:

error_directory /etc/squid/errors

5.2 用戶認證設置

缺省的,squid自己不帶任何認證程序,可是咱們能夠經過外部認證程序來實現用戶認證。通常說來有如下的認證程序:

1.LDAP認證:你能夠訪問如下資源來獲取更多的有用信息。

http://www.geocities.com/ResearchTriangle/Thinktank/5292/projects/ldap/

http://home.iae.nl/users/devet/squid/proxy_auth/contrib/ldap_auth.tar.gz

2.SMB認證:能夠實現基於NTsamba的用戶認證。更多的信息請訪問如下資源。

http://www.hacom.nl/~richard/software/smb_auth.html

3.基於mysql的用戶認證。

http://home.iae.nl/users/devet/squid/proxy_auth/contrib/mysql_auth.c

4.基於sock5密碼用戶認證。

http://nucleo.freeservers.com/

5.基於Radius 的用戶認證。

http://home.iae.nl/users/devet/squid/proxy_auth/contrib/auth.pl

可是咱們通常經常使用的是用ncsa實現的認證和用smb_auth實現的基於NTsamba的用戶認證。下面咱們就來說這兩種認證方法的具體實現。

5.2.1 ncsa用戶認證的實現

ncsasquid源代碼包自帶的認證程序之一,下面咱們以squid-2.3.STABLE2版本爲例講述ncsa的安裝和配置。

1.www.squid-cache.org下載squid源代碼包squid-2.3.STABLE2-src.tar.gz並放到/tmp目錄下。

2.tar解開:

tar xvzf squid-2.3.STABLE2-src.tar.gz

%make

%make install

3.而後,進入/tmp/squid-2.3.STABLE2/auth_modules/NCSA目錄。

% make

% make install

編譯成功後,會生成ncsa_auth的可執行文件。

4.拷貝生成的執行文件ncsa_auth/usr/bin目錄

cp ncsa_auth /usr/bin/bin

5.修改squid.conf中的相關選項以下所示:

authenticate_program /usr/local/squid/bin/ncsa_auth /usr/bin/passwd

6.定義相關的用戶類

acl auth_user proxy_auth REQUIRED

注意,REQUIRED關鍵字指明瞭接收全部合法用戶的訪問。

7.設置http_access

http_access allow auth_user

注意,若是你在改行中指定了多個容許訪問的用戶類的話,應該把要認證的用戶類放在第一個。以下所示:

錯誤的配置:http_access allow auth_user all manager

正確的配置:http_access allow auth_user manager all

8.利用apache攜帶的工具軟件htpasswd/usr/local/squid/etc下生成密碼文件並添加相應的用戶信息。通常說來,該密碼文件每行包含一個用戶的用戶信息,即用戶名和密碼。

htpasswd生成密碼文件passwd並添加用戶bye

htpasswd -c /usr/local/squid/etc/passwd bye

而後從新啓動squid,密碼認證已經生效。

5.2.2 smb用戶認證的實現

國內介紹並使用ncsa實現用戶認證的文章很少,而使用smb_authsamba實現基於NT的用戶認證我尚未看到過,下面咱們就來看一看在squid中實現基於NT的用戶認證。

當前smb_auth的最高版本是smb_auth-0.05,你能夠在如下地址下載。固然,squid的源代碼包中也包含smb_auth,可是是0.02版的。

http://www.hacom.nl/~richard/software/smb_auth-0.05.tar.gz

smb_auth的主頁地址是http://www.hacom.nl/~richard/software/smb_auth.html

1.系統需求:

squid2.0以上版本。

安裝samba2.0.4以上版本。你並不須要運行samba服務,由於smb_auth只用到了 samba的客戶端軟件。

2.下載smb_auth-0.05.tar.gz並複製到/tmp.

3.tar xvzf smb_auth-0.05.tar.gz

4.根據你的要求修改Makefile中的SAMBAPREFIXINSTALLBIN參數。SAMBAPREFIX指定了你的samba安裝路徑,INSTALLBIN指明瞭smb_auth的安裝路徑。咱們指定:

SAMBAPREFIX=/usr,INSTALLBIN=/usr/bin.

5.make

6.make install,成功後會在INSTALLBIN指定路徑中生成可執行文件smb_auth.

7.按下列步驟設置你要用於認證的主域控制器:

首先在NETLOG共享目錄中創建一個「proxy」文件,該文件只包含一個「allow」的字符串,通常說來,該NETLOG目錄位於

winntsystem32Replimportscripts目錄中;而後,設置全部你想讓其訪問squid的用戶和用戶組擁有對該文件的讀的權力。

8.修改squid.conf中的相關選項以下所示:

authenticate_program /usr/local/squid/bin/smb_auth your_domain_name

9.定義相關的用戶類

acl auth_user proxy_auth REQUIRED

注意,REQUIRED關鍵字指明瞭接收全部合法用戶的訪問。

10.設置http_access

http_access allow auth_user

注意,若是你在改行中指定了多個容許訪問的用戶類的話,應該把要認證的用戶類放在第一個。以下所示:

錯誤的配置:http_access allow auth_user all manager

正確的配置:http_access allow auth_user manager all

若是一切正確的話,而後從新啓動squid,密碼認證已經生效。

說明:smb_auth的調用方法:

1.smb_auth -W your_domain_name

your_domain_name指定你的域名。smb_auth將進行廣播尋找該主域控制器。

2.smb_auth -W your_domain_name -B

若是你有多個網絡接口,能夠用-B 指定用於廣播的網絡接口的ip地址。

3.smb_auth -W your_domain_name -U

也能夠用-U直接指定該主域控制器的ip地址。

4.smb_auth -W your_domain_name -S share

能夠用-S指定一個不一樣於NETLOG的共享目錄。

5.2.3 squid.conf中關於認證的其餘設置

1.authenticate_children

說明:設置認證子進程的數目。缺省爲5個。若是你處於一個繁忙的網絡環境中,你能夠適當增大該值。

2.authenticate_ttl

說明:設置一次認證的有效期,缺省是3600秒。

3.proxy_auth_realm

說明:設置用戶登陸認證時向用戶顯示的域名。

5.3透明代理的設置

關於透明代理的概念咱們已經在第一節將過了,下面咱們看一下怎麼樣在squid中實現透明代理。

透明代理的實現須要在Linux 2.0.29以上,可是Linux 2.0.30並不支持該功能,好在咱們如今使用的一般是2.2.X以上的版

本,因此沒必要擔憂這個問題。下面咱們就用ipchains+squid來實現透明代理。在開始以前須要說明的是,目前咱們只能實現支持HTTP的透明代

理,可是也沒必要太擔憂,由於咱們之因此使用代理,目的是利用squid的緩存來提升Web的訪問速度,至於提供內部非法ip地址的訪問及提升網絡安全性,

咱們能夠用ipchains來解決。

實現環境:RedHat6.x+squid2.2.x+ipchains

5.3.1 linux的相關配置

肯定你的內核已經配置瞭如下特性:

·Network firewalls

[ ] Socket Filtering

·Unix domain sockets

·TCP/IP networking

[ ] IP: multicasting

[ ] IP: advanced router

[ ] IP: kernel level autoconfiguration

·IP: firewalling

[ ] IP: firewall packet netlink device

·IP: always defragment (required for masquerading)

·IP: transparent proxy support

若是沒有,請你從新編譯內核。通常在RedHat6.x以上,系統已經缺省配置了這些特性。

5.3.2squid的相關配置選項

設置squid.conf中的相關選項,以下所示:

http_port 3218

httpd_accel_host virtual

httpd_accel_port 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

說明:

1.http_port 3128

在本例中,咱們假設squidHTTP監聽端口爲3128,squid缺省設置值。而後,把全部來自於客戶端web請求的包(即目標端口爲80)重定向到3128端口。

2.httpd_accel_host virtual

httpd_accel_port 80

這兩個選項原本是用來定義squid加速模式的。在這裏咱們用virtual來指定爲虛擬主機模式。80端口爲要加速的請求端口。採用這種模式時,squid就取消了緩存及ICP功能,假如你須要這些功能,這必須設置httpd_accel_with_proxy選項。

3.httpd_accel_with_proxy on

該選項在透明代理模式下是必須設置成on的。在該模式下,squid既是web請求的加速器,又是緩存代理服務器。

4.httpd_accel_uses_host_header on

在透明代理模式下,若是你想讓你代理服務器的緩存功能正確工做的話,你必須將該選項設爲on。設爲on時,squid會把存儲的對象加上主機名而不是ip地址做爲索引。這一點在你想創建代理服務器陣列時顯得尤其重要。

相關文章
相關標籤/搜索