• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux環境下透明代理完全解決方案

    發表于:2007-05-25來源:作者:點擊數: 標簽:
    Linux 環境下透明代理完全 解決方案 -------------------------------------------------------------------------------- IdealatLinuxaid 摘要:該文討論了如何在Linux環境下如何通過Ipchains和squid實現透明代理。 硬件環境:3ComRAS1500IBMPcServer320

    Linux環境下透明代理完全解決方案

    --------------------------------------------------------------------------------

    Ideal at Linuxaid

    摘要:該文討論了如何在Linux環境下如何通過Ipchains和squid實現透明代理。

    硬件環境:3Com RAS1500 IBM Pc Server 320

    軟件環境:Redhat6.2 Squid 2.3.STABLE4



    本文假設有這樣的應用環境,網絡中有一臺撥號服務器為用戶提供撥號接入服務,其IP地址為192.168.2.32,該服務器共有30條線,可供分配的IP地址為192.168.2.1-192.168.2.30。也就是說撥號用戶得到的是一個內部IP,范圍為1-31,在網絡中專門為撥號用戶設置一臺Linux服務器,該服務器運行有Squid實現的代理服務器,并且配置了IPChains規則。Squid代理為客戶的www訪問提供了代理緩沖以增加其上網速度,而IPChains的運用卻可以實現代理對于客戶的透明化,同時對于非www訪問提供互聯網接入。

    網絡拓撲結構如下:

    [img:3fcdf44174]http://oldsite.linuxaid.com.cn/engineer/ideal/article/image002.jpg[/img:3fcdf44174]

    當然,如果希望使用透明代理加快局域網上網速度的話,原理是一樣的,只有允許通過的ip范圍不同,在這里我只允許撥號用戶的IP地址通過該透明代理。

    一、Squid的安裝配置
    1、什么是Squid

    Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher和HTTP協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。

    Squid將數據元緩存在內存中,同時也緩存DNS查詢的結果,除此之外,它還支持非模塊化的DNS查詢,對失敗的請求進行消極緩存。Squid支持SSL,支持訪問控制。由于使用了ICP(輕量Internet緩存協議),Squid能夠實現層疊的代理陣列,從而最大限度地節約帶寬。

    Squid由一個主要的服務程序squid,一個DNS查詢程序dnsserver,幾個重寫請求和執行認證的程序,以及幾個管理工具組成。當Squid啟動以后,它可以派生出預先指定數目的dnsserver進程,而每一個dnsserver進程都可以執行單獨的DNS查詢,這樣一來就大大減少了服務器等待DNS查詢的時間。

    2、Squid的下載安裝

    從Squid的官方站點http://www.squid-cache.org下載該軟件;

    1) 將該文件拷貝到/usr/local目錄。

    2) 解開該文件 tar xvzf squid-2.3.STABLE4-src.tar.gz。

    3) 解開后,在/usr/local生成一個新的目錄squid-2.3.STABLE4

    4) 進入squid
    cd squid-2.3.STABLE4

    5) 執行./configure 可以用./confgure --prefix=/directory/you/want指定安裝目錄。系統缺省安裝目錄為/usr/local/squid。

    6) 執行 make all

    7) 執行 make install

     安裝結束后,squid的可執行文件在安裝目錄的bin子目錄下,配置文件在etc子目錄下。

    3、Squid的配置

    Squid配置文件為:/usr/local/squid/etc/squid.conf。安裝成功以后,系統已經有了一個缺省的配置文件,用戶僅僅需要修改該配置文件即可。首先我將Squid用在透明代理時的配置文件中必須打開的選項的內容列舉如下:


    http_port 8080
    cache_mem 32 MB
    cache_swap_low 90
    cache_swap_high 95
    maximum_object_size 4096 KB
    cache_dir ufs /usr/local/squid/cache 1200 16 256
    cache_aclearcase/" target="_blank" >ccess_log /usr/local/squid/logs/access.log
    cache_log /usr/local/squid/logs/cache.log
    dns_nameservers 210.12.114.130
    unlinkd_program /usr/local/squid/bin/unlinkd
    acl all src 0.0.0.0/0.0.0.0
    http_access allow all
    cache_effective_user nobody
    cache_effective_group nobody
    httpd_accel_host virtual
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on 

    * http_port 
    說明:定義squid監聽HTTP客戶連接請求的端口。缺省是3128,如果使用HTTPD加速模式 則為80。你可以指定多個端口,但是所有指定的端口都必須在一條命令行上。

    *cache_mem (bytes)

    說明:該選項用于指定squid可以使用的內存的理想值。這部分內存被用來存儲以下對象:In-Transit objects (傳入的對象)
    Hot Objects (熱對象,即用戶常訪問的對象)
    Negative-Cached objects (消極存儲的對象)
    需要注意的是,這并沒有指明squid所使用的內存一定不能超過該值,其實,該選項只定義了squid所使用的內存的一個方面,squid還在其他方面使用內存。所以squid實際使用的內存可能超過該值。缺省值為8MB。

    *cache_dir Directory-Name Mbytes Level-1 Level2

    說明:指定squid用來存儲對象的交換空間的大小及其目錄結構??梢杂枚鄠€cache_dir命令來定義多個這樣的交換空間,并且這些交換空間可以分布不同的磁盤分區。"directory "指明了該交換空間的頂級目錄。如果你想用整個磁盤來作為交換空間,那么你可以將該目錄作為裝載點將整個磁盤mount上去。缺省值為/var/spool/squid?!癕bytes”定義了可用的空間總量。需要注意的是,squid進程必須擁有對該目錄的讀寫權力?!癓evel-1”是可以在該頂級目錄下建立的第一級子目錄的數目,缺省值為16。同理,“Level-2”是可以建立的第二級子目錄的數目,缺省值為256。為什么要定義這么多子目錄呢?這是因為如果子目錄太少,則存儲在一個子目錄下的文件數目將大大增加,這也會導致系統尋找某一個文件的時間大大增加,從而使系統的整體性能急劇降低。所以,為了減少每個目錄下的文件數量,我們必須增加所使用的目錄的數量。如果僅僅使用一級子目錄則頂級目錄下的子目錄數目太大了,所以我們使用兩級子目錄結構。

    那么,怎么來確定你的系統所需要的子目錄數目呢?我們可以用下面的公式來估算。

    已知量:

    DS = 可用交換空間總量(單位KB)/ 交換空間數目

    OS = 平均每個對象的大小= 20k

    NO = 平均每個二級子目錄所存儲的對象數目 = 256

    未知量:

    L1 = 一級子目錄的數量

    L2 = 二級子目錄的數量

    計算公式:

    L1 x L2 = DS / OS / NO

    注意這是個不定方程,可以有多個解。



    * 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_dir Directory-Name Mbytes Level-1 Level2

    說明:指定squid用來存儲對象的交換空間的大小及其目錄結構??梢杂枚鄠€cache_dir命令來定義多個這樣的交換空間,并且這些交換空間可以分布不同的磁盤分區。"directory "指明了該交換空間的頂級目錄。如果你想用整個磁盤來作為交換空間,那么你可以將該目錄作為裝載點將整個磁盤mount上去。缺省值為/var/spool/squid?!癕bytes”定義了可用的空間總量。需要注意的是,squid進程必須擁有對該目錄的讀寫權力?!癓evel-1”是可以在該頂級目錄下建立的第一級子目錄的數目,缺省值為16。同理,“Level-2”是可以建立的第二級子目錄的數目,缺省值為256。為什么要定義這么多子目錄呢?這是因為如果子目錄太少,則存儲在一個子目錄下的文件數目將大大增加,這也會導致系統尋找某一個文件的時間大大增加,從而使系統的整體性能急劇降低。所以,為了減少每個目錄下的文件數量,我們必須增加所使用的目錄的數量。如果僅僅使用一級子目錄則頂級目錄下的子目錄數目太大了,所以我們使用兩級子目錄結構。

    那么,怎么來確定你的系統所需要的子目錄數目呢?我們可以用下面的公式來估算。

    已知量:

    DS = 可用交換空間總量(單位KB)/ 交換空間數目

    OS = 平均每個對象的大小= 20k

    NO = 平均每個二級子目錄所存儲的對象數目 = 256

    未知量:

    L1 = 一級子目錄的數量

    L2 = 二級子目錄的數量

    計算公式:

    L1 x L2 = DS / OS / NO

    注意這是個不定方程,可以有多個解。

    * cache_access_log

    說明:指定客戶請求記錄日志的完整路徑(包括文件的名稱及所在的目錄),該請求可以是來自一般用戶的HTTP請求或來自鄰居的ICP請求。缺省值為:

    cache_access_log /var/log/squid/access.log

    如果你不需要該日志,可以用以下語句取消:

    cache_access_log none

    * cache_log

    說明:指定squid一般信息日志的完整路徑(包括文件的名稱及所在的目錄)。缺省路徑為:

    cache_log /var/log/squid/cache.log

    * dns_nameservers 100.100.100.101

    該選項用來定義Squid進行域名解析時使用的域名服務器的,因為在使用代理協議時,客戶端并不進行域名查詢,而是通過代理進行的,因此需要為代理服務器指定域名服務器來進行域名解析。

    * unlinkd_program

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

    缺省設置為:unlinkd_program /usr/lib/squid/unlinkd

    * 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:m2][hh:mm-hh:mm]

    day-abbrevs:

    S - Sunday
    M - Monday
    T - Tuesday
    W - Wednesday
    H - Thursday
    F - Friday
    A - Saturday

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

    port 指定訪問端口??梢灾付ǘ鄠€端口,比如:

    acl aclname port 80 70 21 ...
    acl aclname port 0-1024 ... (指定一個端口范圍)

    proto 指定使用協議??梢灾付ǘ鄠€協議: 

    acl aclname proto HTTP FTP ...

    method 指定請求方法。比如:

    acl aclname method GET POST ...

    這里定義了一個名為all的組,包括所有的主機。

    *http_access

    說明:根據訪問控制列表允許或禁止某一類用戶訪問。

    如果某個訪問沒有相符合的項目,則缺省為應用最后一條項目的“非”。比如最后一條為允許,則缺省就是禁止。所以,通常應該把最后的條目設為"deny all" 或 "allow all" 來避免安全性隱患。

    這里我們允許所有的地址訪問代理服務,但是在下面我們使用Ipchains來限制只允許撥號用戶來訪問該透明代理服務器。

    * cache_effective_user

    cache_effective_group

    說明:如果用root啟動squid,squid將變成這兩條語句指定的用戶和用戶組。缺省變為squid用戶和squid用戶組。注意這里指定的用戶和用戶組必須真是存在于/etc/passwd中。如果用非root帳號啟動squid,則squid將保持改用戶及用戶組運行,這時候,你不能指定小于1024地http_port。

    cache_effective_user nobody

    cache_effective_group nobody

    *httpd_accel_host virtual

    httpd_accel_port 80

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

    * httpd_accel_with_proxy on

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

    * httpd_accel_uses_host_header on

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

    4、Squid的啟動

    首先確定你的內核已經配置了以下特性:

    [*] 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以上,系統已經缺省配置了這些特性。

    下來,需要為Squid創建 Cache目錄,使用如下命令來創建:

    [root@squid bin]# /usr/local/squid/bin/squid –z

    下來需要指定Log目錄為nobody用戶具有寫權限:

    [root@squid squid]# chmod 777 /usr/local/squid/etc

    然后就可以使用命令:

    [root@dserv bin]# /usr/local/squid/bin/squid

    來啟動該服務器。啟動以后察看啟動進程,一般應該有如下的進程:

    root 558 0.0 0.0 3300 0 ? SW 2000 0:00 [squid]

    nobody 559 0.6 53.6 53600 51284 ? S 2000 74:29 (squid)

    nobody 560 0.0 0.0 1088 84 ? S 2000 0:11 (unlinkd)

    二、IPChains過濾規則的設立
    首先應該打開包轉發功能:

    echo 1 > /proc/sys/net/ipv4/ip_forward

    為了讓啟動時能自動打開包轉發功能,可以將上一行的內容添加到/etc/rc.d/rc.local文件的末尾。

    這里我只允許撥號用戶使用該透明代理,因此我的過濾規則數據文件內容如下:

    :input ACCEPT

    :forward DENY

    utput ACCEPT

    -A input -i lo -j ACCEPT

    -A input -p tcp -s 192.168.2.0/27 -d 0.0.0.0/0 80 -i eth0 -j REDIRECT 8080

    -A input -s ! 192.168.2.0/27 -d 0.0.0.0/0 -i eth0 -j DENY

    -A forward -s 192.168.2.0/27 -d 0.0.0.0/0.0.0.0 -i eth1 -j MASQ


    其中-A input -i lo -j ACCEPT表示接收所有的回送包;

    -A input -p tcp -s 192.168.2.0/27 -d 0.0.0.0/0 80 -i eth0 -j REDIRECT 8080表示將撥號用戶所在IP地址的目標端口為80的TCP包重定向到8080端口;

    -A input -s ! 192.168.2.0/27 -d 0.0.0.0/0 -i eth0 -j DENY指示其他所有源地址不是撥號用戶的數據都統統被丟棄;

    -A forward -s 192.168.2.0/27 -d 0.0.0.0/0.0.0.0 -i eth1 -j MASQ轉發并偽裝撥號用戶的其他數據。

    最后,使用客戶機進行測試,只需要設置默認網關為透明代理就可以上網,同時享受代理帶來的快速。

    三、參考文獻
    IPCHAINS-HOWTO

    Squid Manual

     roby19 回復于:2003-05-06 15:45:18
    好,又是一篇好文章,是不是ipchains是iptables的舊版本呢?

     qiqigaogao 回復于:2003-05-06 16:36:45
    iptables,它是ipchains的替代品,功能也更為強大。

     qiqigaogao 回復于:2003-05-06 16:38:11
    iptables,它是ipchains的替代品,功能也更為強大。

     段譽 回復于:2003-05-06 22:45:01
    不錯,尤其是對squid中的一些常用參數進行了說明,會對許多實用squid的用戶有很大幫助的。
    感謝!

     roby19 回復于:2003-05-07 10:12:41
    能在solaris 8 for x86 下使用squid+iptables 嗎?
    有什么不同嗎?

     清茶淡淡 回復于:2003-05-07 11:52:02
    文章太老了

     wangzhao 回復于:2003-05-08 20:20:36
    [quote:124b3140b8="roby19"]能在solaris 8 for x86 下使用squid+iptables 嗎?
    有什么不同嗎?[/quote:124b3140b8]
    不能,iptables基于netfilter框架,而netfilter是linux獨有的

     shaotao27 回復于:2003-05-08 21:58:42
    還行吧  也不算老啊

     shaotao27 回復于:2003-05-08 21:59:04
    我說真的啊 有淀用

     muzx 回復于:2003-05-08 22:40:39
    長見識。

     roby19 回復于:2003-05-08 23:06:03
    [quote:869fd57759="wangzhao"]
    不能,iptables基于netfilter框架,而netfilter是linux獨有的[/quote:869fd57759]

    那在solaris下用squid+ipchains呢?能實現透明代理嗎??

     IPphone 回復于:2003-05-15 13:49:42
    是有點老了,不過對 squid 的一些參數的解釋還是不錯的。頂??!

     redhat_bluebird 回復于:2003-05-19 16:39:46
    用squid做的傳統代理可以用,可透明代理不能用,用什么方法可以看我的80端口是不是指向了3128端口。

     race 回復于:2003-05-19 20:05:53
    樓頂的,硬件需要哪些配置,比如內存最小多少?

     liangxinf 回復于:2003-05-26 13:18:12
    定。

     neeman 回復于:2003-05-26 15:26:34
    我想知道這樣做透明代理后,ipchains的使用情況如何查詢呀?
    我現在對使用該透明代理的內部IP上網情況一無所知了,而使用SQUID的日志都沒有這樣的記錄。

     dasen 回復于:2003-06-09 13:10:44
    好!收下了。

     a212481 回復于:2003-06-20 11:29:04
    ok

     JohnBull 回復于:2003-06-22 08:58:58
    真正的透明代理應該是把Linux配置成7層交換機,與squid配合.連IP都沒有,真正透明.
    當然,那就不是代理服務器的話題了.

     Ghost_Vale 回復于:2003-06-27 17:09:58
    不知道這位大哥有沒有Squid的配置手冊呢?如果有中文的配置手冊那就再好不過了!小弟現在正在為Squid的配置煩勞呢?因為局域網的及其數量比較多在用連接共享的方法好像行不通了要用兩三個網段才能裝得下呢!
    哈哈!不知道斑竹是否愿意告訴我那里可以下載呢?     

    因為要配置很多規折所以不好發帖子所以一希望給為打蝦告訴我那里有能夠下載到Squid的中文配置手冊小弟先在這里向各位大蝦說聲謝謝了

     hoge 回復于:2003-06-30 23:50:25
    不錯

     staric 回復于:2003-07-05 14:52:06


     lable1018 回復于:2003-08-31 09:45:25
    4、Squid的啟動 

    首先確定你的內核已經配置了以下特性: 

    [*] 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 

    我是一個新手,請問怎么樣才能出現上面的一些選項呀?使用什么命令,命令在什么地方?我用的是redhat 8.0,謝謝!

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>