原文: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
沒有留言:
張貼留言