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_address爲ICP套接字指定接收來自其餘squid代理服務器的包的ip地址 udp_outgoing_address爲ICP套接字指定向其餘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還得進行客戶ip的DNS查詢。缺省值爲: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
說明:有時候因爲用戶的不正常操做,可能會使與squid的TCP鏈接處於半關閉狀態,
這時候,該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啓動squid,squid將變成這兩條語句指定的用戶和用戶組。缺省變爲squid用戶和squid用戶組。注意這裏指定
的用戶和用戶組必須真是存在於/etc/passwd中。若是用非root賬號啓動squid,則squid將保持改用戶及用戶組運行,這時候,你不能指
定小於1024地http_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認證:能夠實現基於NT和samba的用戶認證。更多的信息請訪問如下資源。
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實現的基於NT和samba的用戶認證。下面咱們就來說這兩種認證方法的具體實現。
5.2.1 ncsa用戶認證的實現
ncsa是squid源代碼包自帶的認證程序之一,下面咱們以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_auth和samba實現基於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中的SAMBAPREFIX和INSTALLBIN參數。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
在本例中,咱們假設squid的HTTP監聽端口爲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地址做爲索引。這一點在你想創建代理服務器陣列時顯得尤其重要。