星期四, 5月 24, 2007

[linux]squid精選文章03

原文:http://blog.csdn.net/techmylife/archive/2006/04/27/694139.aspx



Squid安裝





#獲得最新stable源碼

http://www.squid-cache.org



bunzip2 squid-2.5.STABLE1.tar.bz2

tar xvf squid-2.5.STABLE1.tar

cd squid-2.5.STABLE1

vi config.sh

#!/bin/sh

./configure

--prefix=/usr/local/squid \

--sysconfdir=/etc/squid \

--enable-default-err-language=Simplify_Chinese \

--enable-ipf-transparent \ \\ipf防火牆

--disable-hostname-checks \

--disable-internal-dns \

--enable-storeio=ufs,null

#使用的文件系統通常是默認的ufs,不過如果想要做一個不緩存任何文件的代理服

務器,就需要加上null文件系統。

--enable-arp-acl

#這樣可以在規則設置中直接通過客戶端的MAC地址進行管理,防止客戶使用IP欺騙。

--enable-underscore

#允許解析的URL中出現下劃線,因為默認情況下Squid會認為帶下劃線的URL是

非法的,並拒絕訪問該地址。

#--enable-linux-netfilter

#允許使用Linux的透明代理功能。

##用戶/密碼認證為Squid管理提供了更多便利,最常用的認證方式是NCSA。從Squid 2.5版本開始,NCSA認證包含在了basic中,

##而非以前單獨的認證模塊。下面來看看實現認證的具體操作。

##首先在編譯時配置選項應包括以下配置:

##--enable-auth="basic" --enable-basic-auth-helpers="NCSA"

##「make install」以後,需要將「helpers/basic_auth/NCSA/ncsa_auth」拷貝到用戶可執行目錄中,

##如/usr/bin(如果在該目錄中找不到這個執行文件,在編譯時請使用make all而不是make,或者直接在該目錄中執行make),

##然後需要借助Apache的密碼管理程序htpasswd來生成用戶名/密碼對應的文件,就像下面這行代碼:

##htpasswd -c /var/squid/etc/password guest





  在輸入兩遍guest用戶的密碼後,一個guest用戶就生成了。如果以後需要添加用戶,把上面的命令去掉-c參數再運行即可。





make

make install

#首先,配置好你的網絡,保證安裝squid的主機能正常上網;

cp /etc/nsswitch.dns /etc/nsswitch.conf



vi /etc/resolv.conf

nameserver 219.141.136.10

nameserver 202.99.8.1

nameserver mail.zcomadmin.com



ping www.sina.com //表示能夠通過DNS解析



cd /usr/local/squid/etc

vi squid.conf

# vi /usr/local/squid/etc/squid.conf

===================== squid.conf ====================

1 在這個例子中,代理服務器同時也是網關,內部網絡接口eth0的IP地址為192.168.0.1,

外部網絡接口eth1的IP地址為202.103.x.x。下面是一個基本的代理所需要配置選項:





http_port 192.168.0.1:3128 //默認端口是3128,當然也可以是任何其它端口

只要不與其它服務發生衝突即可。為了安全起見,在前面加上IP地址,Squid就不會監聽外部的網絡接口

2 //下面的配置選項是服務器管理者的電子郵件,

當錯誤發生時,該地址會顯示在錯誤頁面上,便於用戶聯繫:

cache_mgr test@zcomadmin.com



error_directory /usr/local/squid/share/errors/Simplify_Chinese

dns_nameservers 202.99.160.68 202.99.168.8

3 //下面這行配置是在較新版本中出現的參數,告訴Squid在錯誤頁面中顯示的服務器名稱:

visible_hostname mail.zcomadmin.com

4 //如果是普通代理服務器,以上的配置已經足夠。但是很多Squid都被用來做透明代理。所謂透明代理,

就是客戶端不知道有代理服務器的存在,當然也不需要進行任何與代理有關的設置,從而大大方便了系統管理員。

相關的選項有以下幾個:

httpd_accel_uses_host_header on

httpd_accel_host virtual

httpd_accel_port 80

httpd_accel_single_host off

httpd_accel_with_proxy on

##在Linux上,可以用iptables/ipchains直接將對Web端口80的請求直接轉發到Squid端口3128,

##由Squid接手,而用戶瀏覽器仍然認為它訪問的是對方的80端口。例如以下這條命令:

##iptables -t nat -A PREROUTING -s 192.168.0.200/32 -p tcp --dport 80 -j REDIRECT 3128

5 //以下這些參數告訴Squid緩存的文件系統、位置和緩存策略:

cache_mem 48 MB

maximum_object_size 4096 KB

minimum_object_size 0 KB

maximum_object_size_in_memory 30 KB

minimum_object_size_in_memory 0 KB

cache_swap_low 85

cache_swap_high 90

##//Squid會將/var/squid目錄作為保存緩存數據的目錄,每次處理的緩存大小是32兆字節,當緩存空間使用達到95%時,

##新的內容將取代舊的而不直接添加到目錄中,直到空間又下降到90%才停止這一活動。如果不想Squid緩存任何文件,

##如某些存儲空間有限的專有系統,可以使用null文件系統(這樣不需要那些緩存策略):

##cache_dir null /tmp

cache_dir ufs /var/squid

cache_effective_user squid

cache_effective_group squid

cache_access_log /var/squid/access.log

cache_log /var/squid/cache.log

cache_store_log /var/squid/store.log





6 //以下配置告訴Squid如何處理用戶,對每個請求的IP地址作為單獨地址處理:

client_mask 255.255.255.255



7 //或者為了保證高級用戶的帶寬,希望每個用戶的並發連接不能太多,以免影響他人,也可以通過Squid控制,代碼如下:

acl conncount maxconn 3

http_access deny conncount normal

http_access allow normal



8 //還有一種比較廣泛的控制是文件類型。如果不希望普通用戶通過代理服務器下載MP3、AVI等文件,

完全可以對他們進行限制,代碼如下:

acl mmxfile urlpath_regex \.mp3$ \.avi$ \.exe$

http_access deny mmxfile



9 //設置不代理的url,一些動態網頁,比如江湖、聊天室。

# TAG: no_cache

# A list of ACL elements which, if matched, cause the request to

# not be satisfied from the cache and the reply to not be cached.

# In other words, use this to force certain objects to never be cached.

#

# You must use the word 'DENY' to indicate the ACL names which should

# NOT be cached.

#

#We recommend you to use the following two lines.

acl QUERY urlpath_regex cgi-bin \? asp php shtml php3 cgi

no_cache deny QUERY

10 //Squid可以通過IP地址、主機名、MAC地址、用戶/密碼認證等識別用戶,

也可以通過域名、域後綴、文件類型、IP地址、端口、URL匹配等控制用戶的訪問,

還可以使用時間區間對用戶進行管理,所以訪問控制是Squid配置中的重點。

Squid用ACL(Access Control List,訪問控制列表)對訪問類型進行劃分,用http_access deny 或allow進行控制。

根據需求首先定義兩組用戶advance和normal,還有代表所有未指明的用戶組all及不允許上網的baduser,

##配置代碼如下:

##acl advance 192.168.0.2-192.168.0.10/32

##acl normal src 192.168.0.11-192.168.0.200/32

##acl baduser src 192.168.0.100/32

##acl baddst dst www.soocol.com

##acl all src 0.0.0.0/0



##http_access deny baduser

##http_access allow advance

##http_access allow normal



//ACCESS CONTROLS

# -----------------------------------------------------------------------------



# TAG: acl

# Defining an Access List

#

# acl aclname acltype string1 ...

# acl aclname acltype "file" ...

#

# when using "file", the file should contain one item per line

#定義內網(假設有172.16.0.0/16;192.168.0.0/16;10.0.0.0/8);

acl lan-a src 172.16.0.0/16

acl lan-b src 192.168.0.0/16

acl lan-c src 10.0.0.0/8



#squid的默認配置是拒絕所有連接;

#Default:

# http_access deny all

#

#對上述內網地址開放

http_access allow lan-a

http_access allow lan-b

http_access allow lan-c



#Recommended minimum configuration:

#

11 ##//如果想讓普通用戶只在上班時間可以上網,而且是每週的工作日,用Squid應當如何處理呢?看看下面的ACL定義:



##acl worktime time MTWHF 8:30-12:00 14:00-18:00

##http_access deny !worktime

12 //##該選項指出了認證方式(basic)、需要的程序(ncsa_auth)和

##對應的密碼文件(password)

##auth_param basic program /usr/bin/ncsa_auth /var/squid/etc/password

## 指定認證程序的進程數

##auth_param basic children 5

## 瀏覽器顯示輸入用戶/密碼對話框時的領域內容

##auth_param basic realm My Proxy Caching Domain

## 基本的認證有效時間

##auth_param basic credentialsttl 2 hours

## 普通用戶需要通過認證才能訪問Internet

##acl normal proxy_auth REQUIRED

##http_access allow normal





##通過以上的配置即可完成認證工作。有的讀者可能要問:認證只針對普通用戶,而高級用戶是直接上網的,

##該怎麼處理呢?其實,這兩種用戶是可以共存的。如前所述,Squid是順序處理http_access的,所以在http_access處理過程中,

##如果先處理normal用戶,那麼當前用戶無論是否屬於高級用戶,都會被要求進行認證;相反如果先處理高級用戶,

##剩下的就只有需要認證的普通用戶了。例如以下配置代碼:



##...

##http_access allow normal (需要認證)

##http_access allow advance (不需要認證)

##...

##不管是否為noauth用戶,都要求進行用戶名/密碼驗證。正確的方法是將二者位置交換,代碼如下:



##...

##http_access allow advance

##http_access allow normal

##...





===================== squid.conf ====================

exp:

# 服務器配置

http_port 192.168.1.238:3128

cache_mgr test@zcomadmin.com

#cache_dir ufs /usr/local/squid/var/cache/

cache_access_log /var/squid/access.log

cache_log /var/squid/cache.log

cache_store_log /var/squid/store.log

visible_hostname No1.proxy

#client_mask 255.255.255.255

httpd_accel_host virtual

httpd_accel_port 80

httpd_accel_with_proxy on

#httpd_accel_user_host_header on



# 用戶分類

#acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...

#acl normal proxy_auth REQUIED

#acl all src 0.0.0.0



# 行為分類

acl mmxfile urlpath_regex \.mp3$ \.avi$ \.exe$

acl conncount maxconn 3

acl worktime time MTWHF 8:30-12:00 14:00-18:00

acl sinapage dstdomain ok.sina.com.cn

acl qq dstdomain .tcccent.com.cn



# 處理

http_access allow advance

http_access deny conncount normal

http_access deny !worktime

http_access deny mmxfile

http_access deny sinapage

http_access deny qq

http_access allow normal



mkdir /usr/local/squid/var/cache



chown –R squid:squid /usr/local/squid/var/



chmod -R /usr/local/squid/var/cache



mkdir /var/squid



cd /var/squid



chown -R squid:squid .



chmod -R 777 .



//該命令會產生Squid所有的緩存目錄。

/usr/local/squid/sbin/squid -z

//如果你想前台執行Squid,接著執行命令:

/usr/local/squid/bin/squid -NCd1

##該命令正式啟動Squid。如果一切正常,你會看到一行輸出

##Ready to serve requests.

/usr/local/squid/sbin/squid -k check



//輸出會告訴你Squid的當前狀態。





4. SQUID啟動腳本



# vi /etc/rc3.d/S78squid

====================== S78squid =====================

#!/sbin/sh

#

# Copyright (c) 2005 by llzqq Inc

# All rights reserved.

#

#ident "@(#)squid 1.1 04/05/24 SMI"



case "$1" in

start)

/usr/local/squid/sbin/squid -D

;;

stop)

/usr/local/squid/sbin/squid -k shutdown

pkill squid

;;

restart)

/usr/local/squid/sbin/squid –k reconfigure

;;

*)

echo "Usage: $0 { start | stop | restart }"

exit 1

;;

esac

exit 0

====================== S78squid =====================



# chown root:sys /etc/rc3.d/S78squid

# chmod 744 /etc/rc3.d/S78squid

# ln -s /etc/rc3.d/S78squid /etc/rc2.d/K78squid





1.1安裝防火牆IPF(FOR X86):



# wget http://archive.cert.uni-stuttgar ... il3.4.33pre2.tar.gz

# gzip -d ip-fil3.4.33pre2.tar.gz

# tar vxf ip-fil3.4.33pre2.tar

# cd ip_fil3.4.33pre2

# /usr/ccs/bin/make solaris

# cd SunOS5

# /usr/ccs/bin/make package

# cd i386-5.9

# pkgadd -d ipf.pkg









1.2安裝防火牆IPF(FOR SPARC):



# wget http://anders.fix.no/solaris/pkg/ipf-3.4.33pre2-sol9-sparc.gz

# gzip –d ipf-3.4.33pre2-sol9-sparc.gz

# pkgadd –d ipf-3.4.33pre2-sol9-sparc





安裝SQUID出錯可以是沒有安裝必要的系統編譯環境



GCC工具:

# gzip -d libiconv-1.8-sol9-sparc-local.gz

# gzip -d gcc-3.4.1-sol9-sparc-local.gz

# gzip -d libgcc-3.4.1-sol9-sparc-local.gz

# pkgadd -d gcc-3.4.1-sol9-sparc-local

# pkgadd -d libiconv-1.8-sol9-sparc-local

# pkgadd -d libgcc-3.4.1-sol9-sparc-local

# ln –s /usr/local/bin/gcc /usr/bin/cc



OTHERS:

# pkgadd -d expat-1.95.5-sol9-sparc-local

# pkgadd -d gdbm-1.8.3-sol9-sparc-local

# pkgadd -d openssl-0.9.7e-sol9-sparc-local

# pkgadd -d bison-1.875d-sol9-sparc-local

# pkgadd -d autoconf-2.59-sol9-sparc-local

# pkgadd -d lsof-4.68-sol9-intel-local



MAKE工具:

# gzip -d make-3.80-sol9-sparc-local.gz

# gzip -d automake-1.9-sol9-sparc-local.gz

# pkgadd -d make-3.80-sol9-sparc-local

# pkgadd -d automake-1.9-sol9-sparc-local

配置IPF防火牆



# vi /etc/opt/ipf/ipf.conf



===============================ipf.conf============================

#

# +------------------+ +---------------------+ +------------------+

# | Internet Network |---| hme0 NAT+IPF rf0 |---| Internal Network |

# +------------------+ +---------------------+ +------------------+

#

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Interface: all

# Block all incoming and outgoing packets unless they're allowed later.

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# block all frist

block in all

block out all



# packets with ip-options, short and fragmented packets

block in quick all with short

block in quick all with ipopts

block in quick all with frag

block in quick all with opt lsrr

block in quick all with opt ssrr



# disable nmap scan

block in quick on hme0 proto tcp from any to any flags FUP

block in quick on hme0 proto tcp from any to any flags SF/SFRA

block in quick on hme0 proto tcp from any to any flags /SFRA



# Local network traffic is allowed

pass out quick on lo0

pass in quick on lo0

pass in quick on rf0

pass out quick on rf0



# The pass rules to enable Services

pass in on hme0 proto icmp from any to any icmp-type echo

pass in on hme0 proto tcp from any to any port = 20 flags S keep state

pass in on hme0 proto tcp from any to any port = 21 flags S keep state

pass in on hme0 proto tcp from any to any port = 22 flags S keep state

pass in on hme0 proto tcp from any to any port = 80 flags S keep state

pass in on hme0 proto tcp from any to any port = 443 flags S keep state

pass in on hme0 proto tcp from any to any port 55000 > 192.168.10.14/32 proxy port ftp ftp/tcp

map hme0 192.168.100.0/24 -> 192.168.10.14/32 portmap tcp/udp auto

map hme0 192.168.100.0/24 -> 192.168.10.14/32



rdr rf0 0.0.0.0/0 port 80 -> 192.168.100.1 port 3128

==============================ipnat.conf===========================



6. 打開IP轉發:



# touch /etc/gateways

沒有留言: