squid 安裝 配置 2009年05月11日 星期一 08:34
http://home.arcor.de/jeffpang/squid/ 摘要 該文讨論了如何在Linux2.4環境下如何通過iptables和squid實作透明代理。(2002-06-24 12:55:35) By 處處 摘要:該文讨論了如何在Linux2.4環境下如何通過iptables和squid實作透明代理。 硬體環境:聯想奔月 雙網卡 軟體環境:kernel 2.4.7 squid-2.4.STABLE1 1.什麼是代理伺服器? 所謂代理伺服器是指代表内部私有網中的客戶連接配接網際網路www資源的外部伺服器的程式。客戶與代理伺服器對話,它們接收客戶請求,然後連接配接真實的伺服器,請求得到資料并将響應資料傳回給客戶。代理伺服器發揮了中間轉接作用。 在代理方式下,私有網絡的資料包從來不能直接進入網際網路,而是需要經過代理的處理。同樣,外部網的資料也不能直接進入私有網,而是要經過代理處理以後 才能到達私有網,是以在代理上就可以進行通路控制,位址轉換等功能。目前,代理伺服器軟體有很多,如Netscape Suit Proxy,MS Proxy,Wingate,squid等。這些代理伺服器不僅能起到防火牆的作用,而且還可以加速區域網路使用者對INTERNET的通路,因為代理伺服器 有一個大的緩沖器,将每次浏覽的網頁都儲存起來,在下一次通路該頁時就直接從緩沖器裡調出,而無需再次通路原始伺服器。 2.什麼是透明代理? 透明代理技術中的透明是指用戶端感覺不到代理的存在,不需要在浏覽器中設定任何代理,客戶隻需要設定預設網關,客戶的通路外部網絡的資料包被發送到缺 省網關,而這時預設網關運作有一個代理伺服器,資料實際上被被重定向到代理伺服器的代理端口(如8080),即由本地代理伺服器向外請求所需資料然後拷貝 給用戶端。理論上透明代理可以對任何協定通用。 但是在這種情況下用戶端必須正确設定DNS伺服器。因為現在浏覽器不設定任何代理。則DNS查詢必須由browser來解析,也就是要由用戶端必須在TCP/IP中設定的正确的DNS伺服器,其完成dns解析。 例如: 從私有網絡上通路網際網路上的 web 站點。 私有網位址為192.168.1.*, 其中客戶機是192.168.1.100,防火牆機器網卡是192.168.1.1。透明web代理被安裝在防火牆機器上并配置端口為8080。核心使用 iptables把與防火牆端口80的連接配接重定向到代理服務。私有網上的Netscape被配置為直接連接配接方式。私有網絡的客戶機需要設定DNS伺服器。 私有網絡上機器的預設路由(别名網關)指向防火牆機器。客戶機機器上的 Netscape 通路 http://slashdot.org。 1.Netscape通過查找"slashdot.org", 得到它的位址為207.218.152.131. 然後它使用端口1050與此位址建立一個連接配接,并向web站點送出請求。 2.當包由客戶機 (port 1050)通過防火牆送往slashdot.org(port 80)時, 它們重定向到代理服務重定的8080端口。透明代理使用端口1025與207.218.152.131的端口80(這是原始包的目的位址)建立一個連接配接。 3. 當代理服務收到從 web 站點傳來的頁面後, 通過已經建立的連接配接把它複制給 Netscape。 4. Netscape 顯示此頁面。 5. 從slashdot.org 的角度來看,連接配接是由1.2.3.4(防火牆的撥接上網IP位址)的端口1025到 207.218.152.131的端口80。從客戶機的角度來看,連接配接是從192.168.1.100(客戶機)端口1050連接配接到 207.218.152.131(slashdot.org)的端口80, 但是, 它實際是在與透明代理伺服器對話。 這就是透明代理的操作流程。 3.核心編譯 一般來講,透明代理所在機器往往是帶動整個區域網路聯入網際網路的入口,是以該機器往往需要配置防火牆規則以對内部網絡進行防護。是以在編譯核心時也許要考慮将防火牆支援選項編譯進去。一般來說需要在使用make menuconfig指令配置時打開如下選項: [*]Networking support [*]Sysctl support [*]Network packet filtering [*]TCP/IP networking [*]/proc filesystem support [*] Kernel/User netlink socket [*] Netlink device emulation [*] Connection tracking (required for masq/NAT) [*] FTP protocol support [*] IP tables support (required for filtering/masq/NAT) <*> limit match support [*] MAC address match support [*] Netfilter MARK match support [*] Multiple port match support [*] TOS match support [*] Connection state match support [*] Packet filtering [*] REJECT target support [*] Full NAT [*] MASQUERADE target support [*] REDIRECT target support [*] Packet mangling [*] TOS target support [*] MARK target support [*] LOG target support 然後make dep ; make clean ;make bzImage指令來編譯核心。如果使用到了子產品,還需要使用下面指令生成和安裝子產品make modules;make modules-install。 将System.map複制到/boot目錄中,将 /usr/src/linux/arch/i386/boot/bzImage複制到 /boot目錄中并改名為 vmlinuz-2.4.7。最後安裝新核心并重新起動:lilo;shutdown -r now即可。 4.squid的安裝配置 下載下傳: 可以從squid主網站下載下傳: http://www.squid-cache.org/Versions/v2/2.4/squid-2.4.STABLE1-src.tar.gz 也可以從本地下載下傳: http://www.linuxaid.com.cn/download/solution/squid-2.4.STABLE1-src.tar.gz 編輯安裝: [[email protected] src]# tar xvfz squid-2.4.STABLE1-src.tar.gz [[email protected] src]# cd squid-2.4.STABLE1 [[email protected] src]# ./configure [[email protected] src]# make all [[email protected] src]# make install 配置: 編輯/usr/local/squid/etc/squid.conf,修改以下内容,確定以下配置: httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on cache_effective_user nobody cache_effective_group nobody http_access allow all (所有的http_access指令都注釋掉,隻留下這條,其實嚴格上來說應該限制隻允許區域網路使用者使用代理,具體可以參考squid手冊中關于Access Control Lists的内容來限制通路代理) cache_dir ufs /usr/local/squid/cache 100 16 256 cache_dir type Directory-Name Mbytes Level-1 Level2 (說明:指定squid用來存儲對象的交換空間的大小及其目錄結構。可以用多個cache_dir指令來定義多個這樣的交換空間,并且這些交換空間可 以分布不同的磁盤分區。"directory "指明了該交換空間的頂級目錄。如果你想用整個磁盤來作為交換空間,那麼你可以将該目錄作為裝載點将整個磁盤mount上去。預設值為 /var/spool/squid。"Mbytes"定義了可用的空間總量。需要注意的是,squid程序必須擁有對該目錄的讀寫權力。"Level- 1"是可以在該頂級目錄下建立的第一級子目錄的數目,預設值為16。同理,"Level-2"是可以建立的第二級子目錄的數目,預設值為256。為什麼要 定義這麼多子目錄呢?這是因為如果子目錄太少,則存儲在一個子目錄下的檔案數目将大大增加,這也會導緻系統尋找某一個檔案的時間大大增加,進而使系統的整 體性能急劇降低。是以,為了減少每個目錄下的檔案數量,我們必須增加所使用的目錄的數量。如果僅僅使用一級子目錄則頂級目錄下的子目錄數目太大了,是以我 們使用兩級子目錄結構。 那麼,怎麼來确定你的系統所需要的子目錄數目呢?我們可以用下面的公式來估算。 已知量: DS = 可用交換空間總量(機關KB)/ 交換空間數目 OS = 平均每個對象的大小= 20k NO = 平均每個二級子目錄所存儲的對象數目 = 256 未知量: L1 = 一級子目錄的數量 L2 = 二級子目錄的數量 計算公式: L1 x L2 = DS / OS / NO (注意這是個不定方程,可以有多個解) 然後建立cache子目錄,并修改該目錄所有者為nobody: [[email protected] squid]# /usr/local/squid/cache [[email protected] squid]# chown nobody:nobody /usr/local/squid/cache 修改squid記錄目錄的所有者以允許squid通路: [[email protected] squid]# chown nobody:nobody /usr/local/squid/logs 最後啟動squid: [[email protected] logs]# /usr/local/squid/bin/RunCache & 檢視程序清單: [[email protected] logs]# ps ax 應該出現如下幾個程序: 1372 pts/0 S 0:00 /bin/sh /usr/local/squid/bin/RunCache 1375 pts/0 S 0:00 squid -NsY 1376 ? S 0:00 (unlinkd) 并且系統中應該有如下幾個端口被監聽: [[email protected] logs]# netstat -ln tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:3130 0.0.0.0:* 這些說明squid已經正常啟動了。 然後/etc/rc.d/rc.local檔案最後添加 /usr/local/squid/bin/RunCache & 以使得系統啟動時自動啟動squid伺服器。 5.iptables的設定 在/etc/rc.d/目錄下用touch指令建立firewall檔案,執行chmod u+x firewll以更改檔案屬性,編輯/etc/rc.d/rc.local檔案,在末尾加上/etc/rc.d/firewall以確定開機時能自動執行該腳本。 firewall檔案内容為: #!/bin/sh echo "Enabling IP Forwarding..." echo 1 > /proc/sys/net/ipv4/ip_forward echo "Starting iptables rules..." #Refresh all chains /sbin/iptables -F -t nat iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to-source 200.200.200.200 如果需要還可以添加一些防火牆規則以增強安全性,具體參考: http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables1.htm http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables2.htm 一、代理伺服器簡介 代理伺服器能夠讓多台沒有IP位址的電腦使用其代理功能高速、安全地通路網際網路資源。當代理伺服器用戶端發出一個對外的資源通路請求,該請求先 被代理伺服器識别并由代理伺服器代為向外請求資源。由于一般代理伺服器擁有較大的帶寬,較高的性能,并且能夠智能地緩存已浏覽或未浏覽的網站内容,是以, 在一定情況下,用戶端通過代理伺服器能更快速地通路網絡資源。代理伺服器應用的常見例子:擁有上百台電腦的區域網路通過一台能夠通路外部網絡資源的代理服務 器而也能通路外部網際網路。 二、SQUID軟體簡介 能夠讓普通電腦成為 代理伺服器的軟體就稱為代理伺服器軟體,著名的有微軟的MS PROXY2.0(現在已經更名為ISA.NET了),WINGATE,SYGATE, NETSCAPE的PROXY SERVER,以及我們要介紹的LINUX下免費的SQUID。 SQUID是Linux環境下最為流行的代理伺服器軟體,它功能強大:支援對HTTP,FTP,GOPHER,SSL和WAIS等協定的代理;設定簡單:隻要改動配置檔案中的一項就可使得代理伺服器運轉起來。 三、SQUID代理伺服器的設定 設定目标:配置一台RedHat Linux7.0的電腦成為所有網段的代理伺服器。說明:考慮到是初次接觸SQUID軟體,出于友善,下面的安裝過程都是以root身份進行的。 第一步:下載下傳、編譯和安裝SQUID軟體 從www.squid-cache.org下載下傳SQUID軟體,這裡以穩定的squid-2.4.STABLE1-src.tar.gz為例。 運作“tar zxf squid-2.4.STABLE1-src.tar.gz”,産生“squid-2.4.STABLE1”目錄。由于SQUID的運作需要nobody 使用者和nobody組,是以你先運作Linuxconf指令檢視是否有這個使用者群組;沒有的話,建立。進入“squid-2.4.STABLE1”目錄, 運作“./configure --prefix=/usr/local/squid”;完成後,再運作“make all”;完成後,接着運作“make install”安裝軟體。至此,squid已經成功安裝到/usr/local/squid目錄下了。 第二步:配置SQUID軟體 1、“chmod 777 /usr/local/squid/logs”,設定logs為可寫。這樣,不特定的SQUID代理客戶才能正常通路代理伺服器,才能在logs目錄才産生access.log、cache.log等檔案。 2、“/usr/local/squid/bin/squid -z”,手工建立squid的緩存目錄/usr/local/squid/cache。 3、修改SQUID的配置檔案squid.conf。SQUID的配置檔案共有125個配置項,但是對于一般的web cache proxy server來說,隻要修改幾個配置項即可。編輯/usr/local/squid/etc/squid.conf檔案,找到“http_access deny all”并改為“http_access allow all”令所有的電腦都能透過代理服務通路網際網路資源。其實隻要該一項,SQUID服務就可以啟動了。 4、“/usr/local/bin/RunCache”,啟動squid代理服務。 如果沒有1和2,運作RunCache腳本後,檢視/usr/local/squid/cache/cache.log檔案,可以看到相關的錯誤資訊。 第三步、設定用戶端,測試代理服務 在另一台win98的電腦上,(以Internet Explore5.0為例)運作IE,單擊“工具”,接着單擊“Internet選項”,再單擊“連接配接”頁籤,單擊“區域網路設定”;在“區域網路設定”窗 口中,在“位址”處填上SQUID伺服器的IP位址,在“端口”處填上“3218”(SQUID軟體預設代理用端口号),确定後退出。接下來,通過浏覽一 些網站,也可以檢視logs下的access.log和cache.log,看看是否代理運作正常。 四、其它 1、cache_mem:設定代理服務使用的記憶體大小,一般推薦為實體記憶體的三分之一。 2、cache_dir:指定cache目錄的路徑,預設為/usr/local/squid/cache。 3、http_port:代理服務使用的端口号,預設為3128,你可以使用其他的端口,不過注意兩點:一、使用端口不能和其他的服務重複;二、使用1024以下的端口,SQUID必須以root身份運作。 4、/usr/local/libexec下有個腳本cachemgr.cgi,把它拷貝到你的Web的cgi-bin目錄下(Apache安裝後預設的web根是/var/www),通過浏覽器運作,可以進入web方式的一些管理。 五、結語 要想完全發揮SQUID的功能,僅僅了解以上那些是遠遠不夠的;你應該常常去SQUID的老家www.squid-cache.org看看,才能更上層樓 http://www.abcdown.net/InfoView/Article_154813_3.html http://tech.sina.com.cn/roll/2007-06-26/1126347163.shtml |