GZICP.com   
 
    返回首页
    联系我们
 
 
     

REDHAT AS 3.0上的SQUID透明代理

www.gzicp.com   2004年8月22日 23:18:59
 

前些时在网上看到了张微波的《用squid再次疯狂加速你的web》一文后,我按原文在我的rhas 3.0上安装了一遍发现不能访问本地web服务器加之这篇文章缺少了相应的操作细节,因此我就在原文的基础上进行了补充和完善,希望大家都来关心squid的应用。 

 

一、安装squid-2.5 

groupadd squid 
useradd –g squid squid 

rpm –ivh  squid-2.5.STABLE3-3.3E.i386.rpm 

二、设置squid.conf文档: 

#设定SQUID的代理端口 (加上IP地址,Squid就不会监听外部的网络接口) 
  
http_port 192.168.0.1:3128  

#配置选项是服务器管理者的电子邮件 
   
cache_mgr llzqq@nero.3322.org 

#设定错误文档 
   
error_directory /usr/share/squid/errors/Simplify_Chinese 

#设定电信公用DNS: 

dns_nameservers 202.99.160.68 202.99.168.8 

#设定标志主机名 

visible_hostname nero.3322.org 

#设定http1.1协议支持 

httpd_accel_uses_host_header on 
httpd_accel_host virtual 

#是否让squid代理本地的web服务 

httpd_accel_with_proxy on 

#允许所有主机通过代理服务器上网 
http_access allow all 

#指定Squid可以使用的RAM 

cache_mem 20 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 

#设定squid的磁盘缓存目录(我们就是要在这个目录上做些手脚) 

cache_dir ufs /tmp 100 16 256 

#指定进行空间交换的空占比(缓存数值超过或低于某个百分比时和交换空间进行数据交换) 

cache_swap_low 85 
cache_swap_high 90  

#被缓存服务器的port 

httpd_accel_port 80  

三、建立squid的高速缓存目录 

大家知道通常情况下squid的缓存目录是建立在磁盘上的,这时磁盘的I/O就限制了squid性能的发挥,同时我们知道RAM是计算机中最快的存储单元,我们现在就关注一下怎样把squid的缓存目录放到系统RAM中去。我们注意到在linux的文件系统中/dev/shm是驻留在RAM 中的一个特殊的文件系统。好了我们的思路有了:把/dev/shm绑定到squid的缓存目录上。下面是操作的过程。 

mkdir /dev/shm/tmp 
chmod 1777 /dev/shm/tmp 
mount --bind /dev/shm/tmp /tmp 

上面的三个命令完成了目录的建立和绑定,但是我们reboot后就得重复上面的过程重新建立和绑定目录并且必须是在squid启动以前进行。为了解决这个问题我是这样作的,把三个命令加到squid的启动脚本中。 

Vi /etc/init.d/squid 
====================== squid ===================== 
PATH=/usr/bin:/sbin:/bin:/usr/sbin 
export PATH 

mkdir /dev/shm/tmp 
chmod 1777 /dev/shm/tmp 
mount --bind /dev/shm/tmp /tmp 
squid –z 

# Source function library. 


====================== squid ===================== 

chkconfig squid on 

这样就能在我们每次开机的时候就能自动完成任务了。同时这样的设置对PHP的性能也有一定的提高 

四、我的防火墙FOR ADSL 

#!/bin/bash  
# Do iptables based masquerading and firewalling.  
# lllzqq. 02/28/2004 

export PATH=/sbin:/usr/sbin:/bin:/usr/bin 

modprobe iptable_nat  
modprobe ip_nat_ftp  
modprobe ip_nat_irc  
modprobe ip_conntrack  
modprobe ip_conntrack_ftp  
modprobe ip_conntrack_irc 

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts  
echo 0 >/proc/sys/net/ipv4/conf/all/accept_source_route  
echo 0 >/proc/sys/net/ipv4/conf/all/accept_redirects  
echo 1 >/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses  
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians 
echo 1 >/proc/sys/net/ipv4/ip_forward 
/sbin/iptables -F INPUT 
/sbin/iptables -F FORWARD 
/sbin/iptables -X 
/sbin/iptables -Z 

## Allow forwarding through the internal interface  
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 

## Do masquerading through ppp0 
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 

## Loopback - Allow unlimited traffic  
/sbin/iptables -A INPUT -i lo -j ACCEPT  
/sbin/iptables -A OUTPUT -o lo -j ACCEPT  

## SYN-Flooding Protection  
iptables -N syn-flood  
iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood  
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN  
iptables -A syn-flood -j DROP 

## Make sure that new TCP connections are SYN packets  
/sbin/iptables -A INPUT -i ppp0 -p tcp ! --syn -m state --state NEW -j DROP 

## SQUID 
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 0/0 --dport 80 -j REDIRECT --to-ports 3128 

## HTTP 
/sbin/iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT  
/sbin/iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT  
/sbin/iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 80 -j ACCEPT  
/sbin/iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 443 -j ACCEPT 

## DNS 
/sbin/iptables -A INPUT -i ppp0 -p udp -s 0/0 --sport 53 -m state --state ESTABLISHED -j ACCEPT 
/sbin/iptables -A INPUT -i ppp0 -p udp -d 0/0 --dport 53 -j ACCEPT 

## IP packets limit 
/sbin/iptables -A FORWARD -f -m limit --limit 10/s --limit-burst 10 -j ACCEPT 
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 3 -j ACCEPT 
/sbin/iptables -A INPUT -i ppp0 -p icmp -j DROP 

## FTP 
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 21 -j ACCEPT 
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 20 -j ACCEPT 
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 30000:40000 -j ACCEPT 

## SSH 
/sbin/iptables -A INPUT -i eth0 -m mac --mac-source 00:F0:4B:92:B7:87 -p tcp --dport 22 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP 

## MAIL 
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 25 -j ACCEPT 
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 110 -j ACCEPT 

## Anything else not allowed 
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
/sbin/iptables -A INPUT -i ppp0 -j DROP 


五、附录:squid的一些常用功能的配置说明 

# 允许某一特定网段通过代理服务器上网: 
acl one_clients src 192.168.0.0/255.255.255.0    
http_access allow one_clients 

# 利用ARP地址标示客户:  
acl OK arp 00:20:ed:39:48:b3 00:01:02:98:87:88 00:10:60:73:CE:BD  
http_access allow OK 

# cache_dir ufs /var/spool/Squid 100 16 256  指定Squid用来存储对象的交换空间的大小及其目录结构。100是交换空间大小,指100MB,16、256分别是一级目录、二级目录数量。 

# 限制外网电脑使用代理,只允许IP为192.168.0.2~192.168.0.255的机器访问。 
  acl our_clients src 192.168.0.0/255.255.255.0 
  acl other_clients src 0.0.0.0/0.0.0.0 
  http_access allow our_clines 
  http_access deny other_clients   (禁止其他用户通过本机上网) 

# 限制使用时间。只允许IP为192.168.1.1~192.168.1.255的机器在每周一到周五的7∶00到17∶00使用。如果不限制周一到周五,把下面第二行“MTWHF”去掉。“!”表示逻辑非。 
  acl allow_time time MTWHF 8:30-12:00 14:00-17:30 
  http_access allow work_clients allow_time  
  http_access deny !work_clients 

# 限制用户下载文件的类型如:.avi .mp3 
  acl mmxfile urlpath_regex –i .mp3$ .avi$      (-i参数忽略大小写如:mp3=MP3) 
  http_access deny mmxfile 

# 屏蔽某些含有特定关键词的站点: 
  acl refused_sites url_regex sex 
也可把要禁止的站点写到文档中方便管理如下 
acl refused_sites url_regex “/etc/squid/refused_sites.txt” 
  http_access deny fefused_sites 
  http_access allow all 
  注意:这些规则按照它们的排列顺序进行匹配检测,列表中的规则总是遵循由上而下的顺序。因为deny在前,将屏蔽所有电脑的访问,包括内网在内。我们可以定义多个ACL规则,但名字不能相同。 

注意事项: 

    如果SQUID在启动时出错,在排错过程中可查看它的日志文件/VAR/LOG/SQUID,里面有SQUID出错的详细记录。我的squid配置文件ftp://test:123456@nero.3322.org/squid

chinaunix.net llzqq

相关文章
·用squid再次疯狂加速你的web(2004年08月22日)
最新文章
·如何关闭Squid的记录  (2005年04月14日)
·基于Linux2.4内核的透明代理配置方案  (2005年04月14日)
·解决squid代理服务器泄露客户ip和服务器信息  (2005年04月14日)
·如何设置代理服务器软件Squid  (2005年04月14日)
·建立一个带用户认证功能的SQUID代理服务器  (2005年04月13日)
·Squid Linux下的使用详解  (2005年04月13日)





 
 
Copyright © 1999-2005 GZICP.com All Rights Reserved