歡迎您光臨本站 註冊首頁

用Linux的iptables做代理伺服器和防火牆配置(2)

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

 

5.緩存代理squid

  1) 安裝包

  squid-2.5.STABLE1-2

  2) 主要配置文件

  /etc/squid/squid.conf

  內容:

  http_port:指定了squid監聽客戶請求的埠,默認值是3128。要使用代理,建議這個埠值和運行squid的機器ip地址一起使用;

  舉例:http_port 192.168.0.2:3128

  說明:squid綁定在ip地址192.168.0.2上,埠為3128。

  cache_mgr:當代理頁面發生錯誤時,代理伺服器將向這個配置項登記的用戶發送郵件消息,將它配置為管理員的實際郵件地址;

  舉例:cache_mgr shuke@shuke.com

  說明:當代理頁面發生錯誤,給shuke@shuke.com發送消息。

  http_access:允許HTTP訪問,這個是主要的訪問控制列表。默認拒絕所有的訪問。

  舉例:http_access allow all

  說明:接受所有訪問。

  cache_dir:定義磁碟緩存空間,以存儲訪問過的頁面或其他資源的拷貝。

  格式:cache_dir Type Directory-Name Fs-specific-data [options]

  說明:

  Type:存儲類型,一般設置為ufs;

  Directory-Name:代表緩存的位置,默認的設置是cache_dir ufs /var/spool/squid 100 16 256,其中,100代表緩存空間最大為100M;16到256代表緩存目錄下的一級和二級目錄數目。

  啟動命令:/etc/rc.d/init.d/squid start

  客戶端需要進行的設置:

  IE瀏覽器選項-區域網設置-選中代理伺服器和對本地地址不使用代理伺服器,填寫代理的IP地址和埠號。

  3) squid.conf的13個配置選項:

  NETWORK OPTIONS (有關的網路選項) :

  OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用於鄰居選擇演算法的有關選項) :

  OPTIONS WHICH AFFECT THE CACHE SIZE (定義cache大小的有關選項):

  LOGFILE PATHNAMES AND CACHE DIRECTORIES (定義日誌文件的路徑及cache的目錄)

  OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序選項)

  OPTIONS FOR TUNING THE CACHE (調整cache的選項)

  TIMEOUTS (超時)

  ACCESS CONTROLS (訪問控制)

  ADMINISTRATIVE PARAMETERS (管理參數)

  OPTIONS FOR THE CACHE REGISTRATION SERVICE (cache註冊服務選項)

  HTTPD-ACCELERATOR OPTIONS (HTTPD加速選項)

  MISCELLANEOUS (雜項)

  DELAY POOL PARAMETERS (延時池參數)

  網路選項:

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

  tcp_outgoing_address指定向遠程伺服器或其他squid代理伺服器發起連接的ip地址

  udp_incoming_address為ICP套接字指定接收來自其他squid代理伺服器的包的ip地址 udp_outgoing_address為ICP套接字指定向其他squid代理伺服器發送包的ip地址;

  預設為沒有綁定任何ip地址。該綁定地址可以用ip指定,也可以用完整的域名指定。

  交換空間設定選項:

  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

  maximum_object_size

  說明:大於該值得對象將不被存儲。如果你想要提高訪問速度,就請降低該值;如果你想最大限度地節約帶寬,降低成本,請增加該值。單位為K,預設值為:

  maximum_object_size 4096 KB

  有關日誌的選項:

  cache_access_log:

  說明:指定客戶請求記錄日誌的完整路徑(包括文件的名稱及所在的目錄),該請求可以是來自一般用戶的HTTP請求或來自鄰居的ICP請求。預設值為:cache_access_log /var/log/squid/access.log,如果你不需要該日誌,可以用以下語句取消:cache_access_log none;

  cache_store_log

  說明:指定對象存儲記錄日誌的完整路徑(包括文件的名稱及所在的目錄)。該記錄表明哪些對象被寫到交換空間,哪些對象被從交換空間清除。預設路徑為:cache_log /var/log/squid/cache.log,如果你不需要該日誌,可以用以下語句取消:cache_store_log none;

  cache_log:

  說明:指定squid一般信息日誌的完整路徑(包括文件的名稱及所在的目錄)。預設路徑為:cache_log /var/log/squid/cache.log;

  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將不能正常工作;

  pid_filename:

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

  pid_filename /var/run/squid.pid,如果你不需要該文件,可以用以下語句取消:pid_filename none;

  debug_options:

  說明:控制作日誌時記錄信息的多寡。可以從兩個方面控制:section控制從幾個方面作記錄;level控制每個方面的記錄的詳細程度。推薦的方式(也是預設方式)是:debug_options ALL,1,即,對每個方面都作記錄,但詳細程度為1(最低);

  log_fqdn on|off:

  說明:控制在 access.log 中對用戶地址的記錄方式。打開該選項時,squid記錄客戶的完整域名,取消該選項時,squid記錄客戶的ip地址。注意,如果打開該選項會增加系統的負擔,因為squid還得進行客戶ip的DNS查詢。預設值為:log_fqdn off。

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

  ftp_user:

  說明:設置登錄匿名ftp伺服器時的提供的電子郵件地址,登錄匿名ftp伺服器時要求用你的電子郵件地址作為登錄口令(更多的信息請參看本書的相關章節)。需要注意的是,有的匿名ftp伺服器對這一點要求很苛刻,有的甚至會檢查你的電子郵件的有效性。預設值為:ftp_user Squid@;

  ftp_list_width:

  說明:設置ftp列表的寬度,如果設得太小將不能的瀏覽到長文件名。預設值為:ftp_list_width 32;

  cache_dns_program:

  說明:指定DNS查詢程序的完整路徑(包括文件的名稱及所在的目錄)。預設路徑為:cache_dns_program /usr/lib/squid/dnsserver;

  dns_children:

  說明:設置DNS查詢程序的進程數。對於大型的登錄伺服器系統,建議該值至少為 10。最大值可以是32,預設設置為5個。注意,如果你任意的降低該值,可能會使系統性能急劇降低,因為squid主進程要等待域名查詢的結果。沒有必要減少該值,因為DNS查詢進程並不會消耗太多的系統的資源;

  dns_nameservers:

  說明:指定一個DNS伺服器列表,強制squid使用該列表中的DNS伺服器而非使用/etc/resolv.conf文件中定義的DNS伺服器。你可以這樣指定多個DNS伺服器:dns_nameservers 10.0.0.1 192.172.0.4

  預設設置為:dns_nameservers none;

  unlinkd_program:

  說明:指定文件刪除進程的完整路徑。預設設置為:unlinkd_program /usr/lib/squid/unlinkd;

  pinger_program:

  說明:指定ping進程的完整路徑。該進程被squid利用來測量與其他鄰居的路由距離。該選項只在你啟用了該功能時有用。預設為:pinger_program /usr/lib/squid/pinger;

  authenticate_program:

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

  用戶訪問控制選項:

  acl:

  說明:定義訪問控制列表。

  定義語法為:

  acl aclname acltype string1 ...

  acl aclname acltype "file" ...

  當使用文件時,該文件的格式為每行包含一個條目。

  acltype 可以是 src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method browser user 中的一種。

  分別說明如下:

  src 指明源地址。可以用以下的方法指定:

  acl aclname src ip-address/netmask ... (客戶ip地址)

  acl aclname src addr1-addr2/netmask ... (地址範圍)

  dst 指明目標地址。語法為:

  acl aclname dst ip-address/netmask ... (即客戶請求的伺服器的ip地址)

  srcdomain 指明客戶所屬的域。語法為:

  acl aclname srcdomain foo.com ... squid將根據客戶ip反向查詢DNS。

  dstdomain 指明請求伺服器所屬的域。語法為:

  acl aclname dstdomain foo.com ... 由客戶請求的URL決定。

  注意,如果用戶使用伺服器ip而非完整的域名時,squid將進行反向的DNS解析來確 定其完整域名,如果失敗就記錄為“none”。

  time 指明訪問時間。語法如下:

  acl aclname time [day-abbrevs] [h1:m1-h2][hh:mm-hh]

  day-abbrevs:

  S - Sunday

  M - Monday

  T - Tuesday

  W - Wednesday

  H - Thursday

  F - Friday

  A - Saturday

  h1:m1 必須小於 h2:m2,表達示為[hh:mm-hh]。

  port 指定訪問埠。可以指定多個埠,比如:

  acl aclname port 80 70 21 ...

  acl aclname port 0-1024 ... (指定一個埠範圍)

  proto 指定使用協議。可以指定多個協議:

  acl aclname proto HTTP FTP ...

  method 指定請求方法。比如:

  acl aclname method GET POST ...

  各類超時設置選項:

  negative_ttl time-units:

  說明:設置消極存儲對象的生存時間。所謂的消極存儲對象,就是諸如“連接失敗”及"404 Not Found"等一類錯誤信息。預設設置為5分鐘;

  舉例:negative_ttl 5 minutes

  positive_dns_ttl time-units:

  說明:設置緩存成功的DNS查詢結果的生存時間。預設為6小時;

  舉例:positive_dns_ttl 6 hours

  negative_dns_ttl time-units:

  說明:設置緩存失敗的DNS查詢結果的生存時間。預設為5分鐘;

  舉例:negative_dns_ttl 5 minutes

  connect_timeout time-units:

  說明:設置squid等待連接完成的超時值。預設值為2分鐘;

  舉例:connect_timeout 120 seconds

  read_timeout time-units:

  說明:如果在指定的時間內squid尚未從被請求的伺服器讀入任何數據,則squid將終止該客戶請求。預設值為15分鐘;

  舉例:read_timeout 15 minutes

  request_timeout:

  說明:設置在建立與客戶的連接后,squid將花多長時間等待客戶發出HTTP請求。預設值為30秒。

  舉例:request_timeout 30 seconds;

  clIEnt_lifetime time-units:

  說明:設置客戶在與squid建立連接后,可以將該連接保持多長時間;

  注意,因為客戶建立的每個連接都會消耗一定的系統資源,所以如果你是為一個大型網路 提供代理服務的話,一定要正確地修改該值。因為如果同一時間的連接數量太大的話,可能會消耗大量的系統資源,從而導致伺服器宕機。預設值為1天,該值太大了,建議根據你自己的情況適當減小該值。

  舉例:clIEnt_lifetime 1 day

  half_closed_clIEnts on/off:

  說明:有時候由於用戶的不正常操作,可能會使與squid的TCP連接處於半關閉狀態,這時候,該TCP連接的發送端已經關閉,而接收端正常工作。預設地,squid將一直保持這種處於半關閉狀態的TCP連接,直到返回套接字的讀寫錯誤才將其關閉。如果將該值設為off,則一旦從客戶端返回“no more data to read”的信息,squid就立即關閉該連接;

  舉例:half_closed_clIEnts on

  pconn_timeout:

  說明:設置squid在與其他伺服器和代理建立連接后,該連接閑置多長時間后被關閉。預設值為120秒;

  舉例:pconn_timeout 120 seconds

  ident_timeout:

  說明:設置squid等待用戶認證請求的時間。預設值為10秒;

  舉例:ident_timeout 10 seconds

shutdown_lifetime time-units:

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

  舉例:shutdown_lifetime 30 seconds

  管理參數選項:

  cache_mgr:

  說明:設置管理員郵件地址。預設為管理員;

  舉例:cache_mgr root

  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

  visible_hostname:

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

  舉例:visible_hostname www-cache.foo.org

  unique_hostname:

  說明:如果你有一個代理伺服器陣列,並且你為每個代理伺服器指定了同樣的“visible_hostname”,同時你必須為它們指定不同的“unique_hostname”來避免“forwarding loops ”(傳輸循環)發生。

  其它雜項:

  1. dns_testnames

  說明:設置進行DNS查詢測試,如果第一個站點解析成功則立即結束DNS查詢測試。如果你不願意進行DNS查詢測試,就不要去掉預設的設置;

  舉例:#dns_testnames netscape.com internic.net nlanr.net microsoft.com

  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來取消自動操作;

  err_html_text:

  說明:用該語句定義一個字元串變數,可以用%L在返回給用戶的錯誤信息文件中引用。錯誤信息文件通常在/etc/squid/errors目錄中,這是一些用HTML寫成的腳本文件,你可以自己修改它;

  deny_info:

  說明:你可以定製自定義的拒絕訪問信息文件,並且可以和不同的用戶列表相關聯。當用戶被http_access相關規則拒絕時,squid可以向用戶顯示你自定義的相應的拒絕訪問信息文件;

  舉例:

  Usage: deny_info err_page_name acl

  比如:

  deny_info ERR_CUSTOM_ACCESS_DENIED bad_guys

  memory_pools on|off:

  說明:如果你將該項設為on,則squid將保留所有已經分配(但是未使用)的內存池以便在將來使用。預設為on;

  舉例:memory_pools on

  log_icp_querIEs on|off:

  說明:設置是否對ICP請求作日誌。如果你的系統負載很大,你可以用off來取消該功能;

  舉例:log_icp_querIEs on

  always_direct:

  說明:該選項允許你指定某些用戶類,squid將這些用戶類的請求直接轉發給被請求的伺服器;

  舉例:

  always_direct allow|deny [!]aclname ...

  如:直接轉發FTP請求可以這樣設置:

  acl FTP proto FTP

  always_direct allow FTP

  never_direct

  說明:與always_direct相反;

  舉例:

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

  比如,為了強制除了本地域的其他用戶使用代理伺服器,你可以這樣設置:

  acl local-servers dstdomain foo.net

  acl all src 0.0.0.0/0.0.0.0

  never_direct deny local-servers

  never_direct allow all

  icon_directory:

  說明:指明向用戶傳送錯誤信息時所用到的圖標文件的目錄;

  舉例:icon_directory /usr/lib/squid/icons

  error_directory:

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

  舉例:error_directory /etc/squid/errors

  5.透明代理的設置

  編輯/etc/squid/squid.conf,修改參數如下:

  httpd_accel_host virtual

  httpd_accel_port 80

  httpd_accel_with_proxy on

  httpd_accel_uses_host_header on

  運行/etc/rc.d/init.d/squid reload使設置生效,然後,使用iptables工具添加兩條埠轉向和網路地址轉換規則:

  iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

  這條命令將把所有區域網用戶通過linux接入伺服器訪問WWW服務的訪問請求,重定向到工作在3128埠的squid處理;

  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 166.32.129.10

  這條命令是把所有來自192.168.1.0網段,並且將要從eth0網路介面(即internet連接)發出的數據包的源地址,更改為這個代理伺服器所設置的外部IP地址166.32.129.10。

  設置完畢,在區域網內的用戶,將計算機的網關更改為192.168.1.2,則可以獲得透明代理的服務了。



[火星人 ] 用Linux的iptables做代理伺服器和防火牆配置(2)已經有580次圍觀

http://coctec.com/docs/linux/show-post-65757.html