<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[七小木东]]></title> 
<link>http://www.qixiaomudong.cn/index.php</link> 
<description><![CDATA[七小木东]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[七小木东]]></copyright>
<item>
<link>http://www.qixiaomudong.cn/read.php?197</link>
<title><![CDATA[Squid的一些技巧整理]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:29:36 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?197</guid> 
<description>
<![CDATA[ 
	1、SQUID怎么设置某ip不能访问某网站<br/><br/>&nbsp;&nbsp; SQUID：<br/><br/>acl DenyUser src 10.3.73.228/32<br/>acl denysite dstdomain .sina.com.cn<br/>http_access deny DenyUser denysite<br/><br/>&nbsp;&nbsp;IPTABLES：<br/><br/>&nbsp;&nbsp; IPTABLES -A FORWARD&nbsp;&nbsp;&nbsp;&nbsp;-s 10.3.73.228 -d *.*.*.* -j REJECT&nbsp;&nbsp; --reject-with icmp-host-unreachable<br/><br/><br/>2、如何禁止特定文件如avi rmvb等的下载<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acl file urlpath_regex .avi$ .rm$<br/><br/>http_access deny file<br/><br/><br/>3、只允许访问某几个网站<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acl allowsitesdstdomain sohu.com&nbsp;&nbsp; china.com<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_access deny !allowsites<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (deny 要放在allow前)<br/><br/><br/>4、acl详解<br/><br/><br/>说明：定义访问控制列表。<br/>定义语法为：<br/>acl aclname acltype string1 ...<br/>acl aclname acltype &quot;file&quot; ...<br/>当使用文件时，该文件的格式为每行包含一个条目。<br/>acltype可以是src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method browser user中的一种。<br/>分别说明如下：<br/>src指明源地址。可以用以下的方法指定：<br/>acl aclname src ip-address/netmask ... (客户ip地址)<br/>acl aclname src addr1-addr2/netmask ... (地址范围)<br/>dst指明目标地址。语法为：<br/>acl aclname dst ip-address/netmask ... (即客户请求的服务器的ip地址)<br/>srcdomain指明客户所属的域。语法为：<br/>acl aclname srcdomain foo.com ... squid将根据客户ip反向查询DNS。<br/>dstdomain指明请求服务器所属的域。语法为：<br/>acl aclname dstdomain foo.com ...由客户请求的URL决定。<br/>注意，如果用户使用服务器ip而非完整的域名时，squid将进行反向的DNS解析来确定其完整域名，如果失败就记录为“none”。<br/>time指明访问时间。语法如下：<br/>acl aclname time [day-abbrevs] [h1:m1-h2][hh:mm-hh]<br/>day-abbrevs:<br/>S - Sunday<br/>M - Monday<br/>T - Tuesday<br/>W - Wednesday<br/>H - Thursday<br/>F - Friday<br/>A - Saturday<br/>h1:m1必须小于h2:m2，表达示为[hh:mm-hh]。<br/>port指定访问端口。可以指定多个端口，比如：<br/>acl aclname port 80 70 21 ...<br/>acl aclname port 0-1024 ...（指定一个端口范围）<br/>proto指定使用协议。可以指定多个协议：<br/>acl aclname proto HTTP FTP ...<br/>method指定请求方法。比如：<br/>acl aclname method GET POST ...<br/>5.http_access<br/>说明：根据访问控制列表允许或禁止某一类用户访问。<br/>如果某个访问没有相符合的项目,则缺省为应用最后一条项目的“非”。比如最后一条为允许，则缺省就是禁止。所以，通常应该把最后的条目设为&quot;deny all&quot;或&quot;allow all&quot;来避免安全性隐患。<br/><br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?196</link>
<title><![CDATA[加速Linux上的Squid透明代理]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:29:07 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?196</guid> 
<description>
<![CDATA[ 
	一、安装squid-2.5<br/><br/>groupadd squid<br/>useradd ?g squid squid<br/><br/>rpm ?ivh squid-2.5.STABLE3-3.3E.i386.rpm<br/><br/>二、设置squid.conf文档：<br/><br/>#设定SQUID的代理端口 (加上IP地址，Squid就不会监听外部的网络接口)<br/><br/>http_port 192.168.0.1:3128<br/><br/>#配置选项是服务器管理者的电子邮件<br/><br/>cache_mgr llzqq@nero.3322.org<br/><br/>#设定错误文档<br/><br/>error_directory /usr/share/squid/errors/Simplify_Chinese<br/><br/>#设定电信公用DNS：<br/><br/>dns_nameservers 202.99.160.68 202.99.168.8<br/><br/>#设定标志主机名<br/><br/>visible_hostname nero.3322.org<br/><br/>#设定http1.1协议支持<br/><br/>httpd_accel_uses_host_header on<br/>httpd_accel_host virtual<br/><br/>#是否让squid代理本地的web服务<br/><br/>httpd_accel_with_proxy on<br/><br/>#允许所有主机通过代理服务器上网<br/>http_access allow all<br/><br/>#指定Squid可以使用的RAM<br/><br/>cache_mem 20 MB<br/><br/>#缓存文件的最大和最小值<br/><br/>maximum_object_size 4096 KB<br/>minimum_object_size 0 KB<br/><br/>maximum_object_size_in_memory 30 KB<br/>minimum_object_size_in_memory 0 KB<br/><br/>#设定squid的磁盘缓存目录（我们就是要在这个目录上做些手脚）<br/><br/>cache_dir ufs /tmp 100 16 256<br/><br/>#指定进行空间交换的空占比（缓存数值超过或低于某个百分比时和交换空间进行数据交换）<br/><br/>cache_swap_low 85<br/>cache_swap_high 90<br/><br/>#被缓存服务器的port<br/><br/>httpd_accel_port 80<br/><br/>三、建立squid的高速缓存目录<br/><br/>大家知道通常情况下squid的缓存目录是建立在磁盘上的，这时磁盘的I/O就限制了squid性能的发挥，同时我们知道RAM是计算机中最快的存储单元，我们现在就关注一下怎样把squid的缓存目录放到系统RAM中去。我们注意到在linux的文件系统中/dev/shm是驻留在RAM 中的一个特殊的文件系统。好了我们的思路有了：把/dev/shm绑定到squid的缓存目录上。下面是操作的过程。<br/><br/>mkdir /dev/shm/tmp<br/>chmod 1777 /dev/shm/tmp<br/>mount --bind /dev/shm/tmp /tmp<br/><br/>上面的三个命令完成了目录的建立和绑定，但是我们reboot后就得重复上面的过程重新建立和绑定目录并且必须是在squid启动以前进行。为了解决这个问题我是这样作的，把三个命令加到squid的启动脚本中。<br/><br/>Vi /etc/init.d/squid<br/>====================== squid =====================<br/>PATH=/usr/bin:/sbin:/bin:/usr/sbin<br/>export PATH<br/>#<br/>mkdir /dev/shm/tmp<br/>chmod 1777 /dev/shm/tmp<br/>mount --bind /dev/shm/tmp /tmp<br/>squid ?z<br/>#<br/># Source function library.<br/><br/><br/>====================== squid =====================<br/><br/>chkconfig squid on<br/><br/>这样就能在我们每次开机的时候就能自动完成任务了。同时这样的设置对PHP的性能也有一定的提高<br/><br/>四、我的防火墙FOR ADSL<br/><br/>#!/bin/bash<br/># Do iptables based masquerading and firewalling.<br/># lllzqq. 02/28/2004<br/><br/>export PATH=/sbin:/usr/sbin:/bin:/usr/bin<br/><br/>modprobe iptable_nat<br/>modprobe ip_nat_ftp<br/>modprobe ip_nat_irc<br/>modprobe ip_conntrack<br/>modprobe ip_conntrack_ftp<br/>modprobe ip_conntrack_irc<br/><br/>echo 1 &gt;/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br/>echo 0 &gt;/proc/sys/net/ipv4/conf/all/accept_source_route<br/>echo 0 &gt;/proc/sys/net/ipv4/conf/all/accept_redirects<br/>echo 1 &gt;/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br/>echo 1 &gt;/proc/sys/net/ipv4/conf/all/log_martians<br/>echo 1 &gt;/proc/sys/net/ipv4/ip_forward<br/>/sbin/iptables -F INPUT<br/>/sbin/iptables -F FORWARD<br/>/sbin/iptables -X<br/>/sbin/iptables -Z<br/><br/>## Allow forwarding through the internal interface<br/>/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT<br/><br/>## Do masquerading through ppp0<br/>/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE<br/><br/>## Loopback - Allow unlimited traffic<br/>/sbin/iptables -A INPUT -i lo -j ACCEPT<br/>/sbin/iptables -A OUTPUT -o lo -j ACCEPT<br/><br/>## SYN-Flooding Protection<br/>iptables -N syn-flood<br/>iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood<br/>iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN<br/>iptables -A syn-flood -j DROP<br/><br/>## Make sure that new TCP connections are SYN packets<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp ! --syn -m state --state NEW -j DROP<br/><br/>## SQUID<br/>iptables -t nat -A PREROUTING -i eth0 -p tcp -s 0/0 --dport 80 -j REDIRECT --to-ports 3128<br/><br/>## HTTP<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 80 -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 443 -j ACCEPT<br/><br/>## DNS<br/>/sbin/iptables -A INPUT -i ppp0 -p udp -s 0/0 --sport 53 -m state --state ESTABLISHED -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p udp -d 0/0 --dport 53 -j ACCEPT<br/><br/>## IP packets limit<br/>/sbin/iptables -A FORWARD -f -m limit --limit 10/s --limit-burst 10 -j ACCEPT<br/>/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 3 -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p icmp -j DROP<br/><br/>## FTP<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 21 -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 20 -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 30000:40000 -j ACCEPT<br/><br/>## SSH<br/>/sbin/iptables -A INPUT -i eth0 -m mac --mac-source 00:F0:4B:92:B7:87 -p tcp --dport 22 -j ACCEPT<br/>/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP<br/><br/>## MAIL<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 25 -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 110 -j ACCEPT<br/><br/>## Anything else not allowed<br/>/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br/>/sbin/iptables -A INPUT -i ppp0 -j DROP<br/><br/><br/>五、附录：squid的一些常用功能的配置说明<br/><br/># 允许某一特定网段通过代理服务器上网：<br/>acl one_clients src 192.168.0.0/255.255.255.0<br/>http_access allow one_clients<br/><br/># 利用ARP地址标示客户：<br/>acl OK arp 00:20:ed:39:48:b3 00:01:02:98:87:88 00:10:60:73:CE:BD<br/>http_access allow OK<br/><br/># cache_dir ufs /var/spool/Squid 100 16 256 指定Squid用来存储对象的交换空间的大小及其目录结构。100是交换空间大小，指100MB，16、256分别是一级目录、二级目录数量。<br/><br/># 限制外网电脑使用代理，只允许IP为192.168.0.2~192.168.0.255的机器访问。<br/>acl our_clients src 192.168.0.0/255.255.255.0<br/>acl other_clients src 0.0.0.0/0.0.0.0<br/>http_access allow our_clines<br/>http_access deny other_clients （禁止其他用户通过本机上网）<br/><br/># 限制使用时间。只允许IP为192.168.1.1~192.168.1.255的机器在每周一到周五的7∶00到17∶00使用。如果不限制周一到周五，把下面第二行“MTWHF”去掉。“!”表示逻辑非。<br/>acl allow_time time MTWHF 8:30-12:00 14:00-17:30<br/>http_access allow work_clients allow_time<br/>http_access deny !work_clients<br/><br/># 限制用户下载文件的类型如：.avi .mp3<br/>acl mmxfile urlpath_regex ?i &#92;.mp3$ &#92;.avi$ (-i参数忽略大小写如：mp3=MP3)<br/>http_access deny mmxfile<br/><br/># 屏蔽某些含有特定关键词的站点：<br/>acl refused_sites url_regex sex<br/>也可把要禁止的站点写到文档中方便管理如下<br/>acl refused_sites url_regex “/etc/squid/refused_sites.txt”<br/>http_access deny fefused_sites<br/>http_access allow all<br/>注意：这些规则按照它们的排列顺序进行匹配检测，列表中的规则总是遵循由上而下的顺序。因为deny在前，将屏蔽所有电脑的访问，包括内网在内。我们可以定义多个ACL规则，但名字不能相同。<br/><br/>注意事项：<br/><br/>如果SQUID在启动时出错，在排错过程中可查看它的日志文件/VAR/LOG/SQUID，里面有SQUID出错的详细记录。我的squid配置文件ftp://test:123456@nero.3322.org/squid 
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?195</link>
<title><![CDATA[建立一个带用户认证功能的SQUID代理服务器]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:28:34 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?195</guid> 
<description>
<![CDATA[ 
	一、安装配置SQUID+MYSQL<br/><br/>1.建立用户和组<br/><br/># groupadd squid<br/># useradd -g squid -d /dev/null -s /bin/false squid<br/><br/># groupadd mysql<br/># useradd -g mysql -s /bin/false mysql<br/><br/>2. 安装MYSQL<br/><br/># mount –F hsfs –o ro /dev/dsk/c1t0d0p0 /cdrom<br/># cd /cdrom/components/i386/Packages<br/># pkgadd -d ./ -s /var/spool/pkg SFWmysql SFWgcmn<br/># pkgadd SFWgcmn SFWmysql<br/><br/># chown -R root /opt/sfw/mysql<br/># chgrp -R mysql /opt/sfw/mysql<br/># chown -R mysql /opt/sfw/mysql/var<br/># /opt/sfw/mysql/bin/mysql_install_db<br/># /opt/sfw/mysql/bin/mysqld_safe &amp;<br/><br/># cp /opt/sfw/mysql/share/mysql/my-medium.cnf /etc/my.cnf<br/># vi /etc/my.cnf<br/><br/>bind-address = 127.0.0.1<br/><br/>设置启动脚本：<br/><br/># cp /opt/sfw/mysql/share/mysql/mysql.server /etc/init.d/mysql.server<br/># ln /etc/init.d/mysql.server /etc/rc3.d/S79mysql<br/># ln /etc/init.d/mysql.server /etc/rc0.d/K00mysql<br/># ln /etc/init.d/mysql.server /etc/rc1.d/K00mysql<br/># ln /etc/init.d/mysql.server /etc/rc2.d/K00mysql<br/># ln /etc/init.d/mysql.server /etc/rcS.d/K00mysql<br/># chown root:sys /etc/init.d/mysql.server /etc/rc3.d/S79mysql<br/># chmod 0744 /etc/init.d/mysql.server /etc/rc3.d/S79mysql<br/><br/>设置ROOT密码：<br/><br/># mysqladmin -u root password llzqq<br/><br/>3．安装SQUID<br/><br/># pkgadd -d ./ -s /var/spool/pkg SFWsquid<br/># pkgadd SFWsquid<br/># cd /opt/sfw/squid/etc<br/># cp squid.conf.default squid.conf<br/># cp mime.conf.default mime.conf<br/><br/>4.配置SQUID.CONF<br/>--------------------------------------------------------<br/>http_port 192.168.0.1:3128<br/>cache_mgrllzqq@nero.3322.org<br/>error_directory /opt/sfw/squid/share/errors/Simplify_Chinese<br/>dns_nameservers 202.99.160.68 202.99.168.8<br/>visible_hostname nero.3322.org<br/>httpd_accel_uses_host_header on<br/>httpd_accel_host virtual<br/>httpd_accel_port 80<br/>httpd_accel_with_proxy on<br/>cache_mem 20 MB<br/>maximum_object_size 4096 KB<br/>minimum_object_size 0 KB<br/>maximum_object_size_in_memory 30 KB<br/>minimum_object_size_in_memory 0 KB<br/>cache_swap_low 85<br/>cache_swap_high 90<br/>cache_dir ufs /opt/sfw/squid/var/cache<br/>cache_effective_user squid<br/>cache_effective_group squid<br/><br/>#http_access allow manager localhost<br/>#http_access allow localhost<br/>#http_access deny manager<br/>#http_access deny !Safe_ports<br/>#http_access deny CONNECT !SSL_ports<br/>#http_access deny all<br/>http_reply_access allow all<br/>icp_access allow all<br/>miss_access allow all<br/>--------------------------------------------------------<br/># chown –R squid:squid /opt/sfw/squid/var<br/># /opt/sfw/squid/sbin/squid -z<br/><br/>5. SQUID启动脚本<br/><br/># vi /etc/rc3.d/S78squid<br/>====================== S78squid =====================<br/>#!/sbin/sh<br/>#<br/>#ident &quot;@(#)squid 1.1 04/05/24 SMI&quot;<br/><br/>case &quot;$1&quot; in<br/>start)<br/>/opt/sfw/squid/sbin/squid -s<br/>;;<br/>stop)<br/>/opt/sfw/squid/sbin/squid -k shutdown<br/>pkill squid<br/>;;<br/>*)<br/>echo &quot;Usage: $0 &#123; start &#124; stop &#125;&quot;<br/>exit 1<br/>;;<br/>esac<br/>exit 0<br/>====================== S78squid =====================<br/># chown root:sys /etc/rc3.d/S78squid<br/># chmod 744 /etc/rc3.d/S78squid<br/># ln -s /etc/rc3.d/S78squid /etc/rc2.d/K78squid<br/><br/><br/>二、 安装MYSQL_AUTH<br/><br/># gzip -d mysql_auth-0.6beta.tar.gz<br/># tar vxf mysql_auth-0.6beta.tar<br/># cd mysql_auth-0.6beta<br/><br/>Makefile中需要修改的内容如下：<br/># vi Makefile<br/><br/>CFLAGS = -I/opt/sfw/mysql/include -L/opt/sfw/mysql/lib/mysql<br/>INSTALL = /usr/ucb/install<br/>$(INSTALL) -o root -g sys -m 700 mypasswd /usr/local/bin/mypasswd<br/>$(INSTALL) -o squid -g squid -m 755 mysql_auth /usr/bin/mysql_auth<br/>$(INSTALL) -o squid -g squid -m 600 $(CONF) /etc/mysql_auth.conf<br/>$(INSTALL) -o squid -g squid -m 600 $(CONF) /etc/mysql_auth.conf.default<br/><br/>src/define.h中需要修改的内容如下：<br/># vi +5 src/define.h<br/><br/>#define CONFIG_FILE &quot;/etc/mysql_auth.conf&quot;<br/>#define DEF_MYSQLD_SOCKET &quot;/tmp/mysql.sock&quot;<br/><br/>src/mysql_auth.conf中需要修改的内容如下：<br/># vi src/mysql_auth.conf<br/><br/>mysqld_socket /tmp/mysql.sock<br/><br/># /usr/ccs/bin/make<br/># /usr/ccs/bin/make install<br/><br/>创建用户数据库：<br/><br/># cd scripts<br/># mysql -u root -p****** &lt; create_script<br/><br/><br/>测试MYSQL_AUTH<br/><br/>1.添加一个测试用户<br/><br/># mypasswd llzqq 123456<br/>Password record ADDED succesfully.<br/><br/>2.验证刚才建立的用户<br/><br/># mysql_auth<br/>llzqq 123456<br/>0K<br/><br/>3.删除一个已经建立的用户用这个命令<br/><br/># mypasswd –d username<br/><br/>三、在SQUID.CONF中增加MYSQL_AUTH认证部分<br/><br/># vi /etc/squid/squid.conf<br/><br/>添加下面的代码到SQUID.CONF中“TAG: acl”一节的后面<br/><br/>auth_param basic program /usr/bin/mysql_auth<br/>auth_param basic realm LLZQQ’S CACHING SERVER<br/>auth_param basic children 5<br/>auth_param basic credentialsttl 2 hours<br/>acl password proxy_auth REQUIRED<br/>http_access allow password<br/>authenticate_ip_ttl 2 hours<br/>http_access deny all<br/><br/>四、客户端设置<br/><br/>在浏览器的代理服务器设置中填写SQUID服务器的IP和端口：<br/>192.168.0.1:3218<br/><br/>在下载软件FLASHGET的代理服务器设置中填写SQUID服务器的IP、端口、用户和密码：<br/>192.168.0.1:3218<br/>user:llzqq<br/>passwd:123456<br/><br/>五、注意事项<br/><br/>在进行以上安装前要先安装GCC否则不能编译MYSQL_AUTH，另外在添加用户前需要设置ROOT用户的LD_LIBRARY_PATH变量中有这个路径：/opt/sfw/mysql/lib/mysql<br/><br/>TAG: 认证 用户 Squid squid 代理服务器 功能 SQUID <br/><br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?194</link>
<title><![CDATA[Squid配置详解+认证完全版]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:27:57 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?194</guid> 
<description>
<![CDATA[ 
	在此，我们要配置一个只对内部提供代理服务的Proxy Server。它将用户分为高级用户和普通用户两种，对高级用户采用网卡物理地址识别的方法，普通用户则需要输入用户名和口令才能正常使用。高级用户没有访问时间和类型的限制，而普通用户只在上班时可以访问以及一些其它的限制。<br/>　　<br/>　　安装<br/>　　可以从Squid站点www.squid-cache.org获取该软件的源代...的发行版，如Red Hat提供的RPM包。<br/>　　<br/>　　RPM方式安装很简单，命令如下：<br/>　　<br/>　　$ rpm -ivh Squid-2.x.STALBx.i386.rpm<br/>　　<br/>　　不过笔者认为，即便是系统中已经默认安装了Squid，也应当先删掉然后安装最新的源代码包。因为开源软件会不断修正问题、提供更新的功能，使用最新版本可以保证最高的性能及安全，而且源代码方式可以完全定制系统。不过STABLE稳定版、DEVEL版通常是提供给开发人员测试的，假定下载了最新的稳定版squid-2.5.STABLE2.tar.gz，用以下命令解开压缩包：<br/>　　<br/>　　$ tar xvfz squid-2.5.STABLE.tar.gz<br/>　　<br/>　　用bz2方式压缩的包可能体积更小，相应的命令是：<br/>　　<br/>　　$ tar xvfj squid-2.5.STABLE.tar.bz2<br/>　　<br/>　　然后，进入相应目录对源代码进行配置和编译，命令如下：<br/>　　<br/>　　$ cd squid-2.5.STABLE2<br/>　　<br/>　　配置命令configure有很多选项，如果不清楚可先用“-help”查看。通常情况下，用到的选项有以下几个：<br/>　　<br/>　　--prefix=/web/squid<br/>　　#指定Squid的安装位置，如果只指定这一选项，那么该目录下会有bin、sbin、man、conf等目录，而主要的配置此时在conf子目录中。为便于管理，最好用参数--sysconfdir=/etc把这个位置配置为/etc。<br/>　　--enable-storeio=ufs,null<br/>　　#使用的系统通常是默认的ufs，不过如果想要做一个不缓存任何的代理，就需要加上null系统。<br/>　　--enable-arp-acl<br/>　　#这样可以在规则设置中直接通过客户端的MAC地址进行管理，防止客户使用IP欺骗。<br/>　　--enable-err-languages=&quot;Simplify_Chinese&quot;<br/>　　--enable-default-err-languages=&quot;Simplify_Chinese&quot;<br/>　　#上面两个选项告诉Squid编入并使用简体中文错误信息。<br/>　　--enable-linux-netfilter<br/>　　#允许使用Linux的透明代理功能。<br/>　　--enable-underscore<br/>　　#允许解析的URL中出现下划线，因为默认情况下Squid会认为带下划线的URL是非法的，并拒绝访问该地址。<br/>　　<br/>　　整个配置编译过程如下：<br/>　　<br/>　　./configure --prefix=/var/squid<br/>　　--sysconfdir=/etc<br/>　　--enable-arp-acl<br/>　　--enable-linux-netfilter<br/>　　--enable-pthreads<br/>　　--enable-err-language=&quot;Simplify_Chinese&quot;<br/>　　--enable-storeio=ufs,null<br/>　　--enable-default-err-language=&quot;Simplify_Chinese&quot;<br/>　　--enable-auth=&quot;basic&quot;<br/>　　--enable-baisc-auth-helpers=&quot;NCSA&quot;<br/>　　--enable-underscore<br/>　　其中一些选项有特殊作用，将在下面介绍它们。<br/>　　<br/>　　最后执行make和make install两条命令，将源代码编译为可执行，并拷贝到指定位置。<br/>　　<br/>　　基本配置<br/>　　安装完成后，接下来要对Squid的运行进行配置（不是前面安装时的配置）。所有项目都在squid.conf中完成。Squid自带的squid.conf包括非常详尽的说明，相当于一篇用户手册，对配置有任何疑问都可以参照解决。<br/>　　<br/>　　在这个例子中，代理同时也是网关，内部接口eth0的IP地址为192.168.0.1，外部接口eth1的IP地址为202.103.x.x。下面是一个基本的代理所需要配置选项：<br/>　　<br/>　　http_port 192.168.0.1:3128<br/>　　<br/>　　默认端口是3128，当然也可以是任何其它端口，只要不与其它服务发生冲突即可。为了安全起见，在前面加上IP地址，Squid就不会监听外部的接口。<br/>　　<br/>　　下面的配置选项是管理者的电子邮件，当错误发生时，该地址会显示在错误页面上，便于用户联系：<br/>　　<br/>　　cache_mgr start@soocol.com<br/>　　<br/>　　以下这些参数告诉Squid缓存的系统、位置和缓存策略：<br/>　　<br/>　　cache_dir ufs /var/squid<br/>　　cache_mem 32MB<br/>　　cache_swap_low 90<br/>　　cache_swap_high 95<br/>　　<br/>　　在这里，Squid会将/var/squid目录作为保存缓存数据的目录，每次处理的缓存大小是32兆字节，当缓存空间使用达到95%时，新的内容将取代旧的而不直接添加到目录中，直到空间又下降到90%才停止这一活动。如果不想Squid缓存任何，如某些存储空间有限的专有系统，可以使用null系统（这样不需要那些缓存策略）：<br/>　　<br/>　　cache_dir null /tmp<br/>　　<br/>　　下面的几个关于缓存的策略配置中，较主要的是第一行，即用户的访问记录，可以通过分析它来了解所有用户访问的详尽地址：<br/>　　<br/>　　cache_access_log /var/squid/access.log<br/>　　cache_log /var/squid/cache.log<br/>　　cache_store_log /var/squid/store.log<br/>　　<br/>　　下面这行配置是在较新版本中出现的参数，告诉Squid在错误页面中显示的名称：<br/>　　<br/>　　visible_hostname No1.proxy<br/>　　<br/>　　以下配置告诉Squid如何处理用户，对每个请求的IP地址作为单独地址处理：<br/>　　<br/>　　client_mask 255.255.255.255<br/>　　<br/>　　如果是普通代理，以上的配置已经足够。但是很多Squid都被用来做透明代理。所谓透明代理，就是客户端不知道有代理的存在，当然也不需要进行任何与代理有关的设置，从而大大方便了系统管理员。相关的选项有以下几个：<br/>　　<br/>　　httpd_accel_host virtual<br/>　　httpd_accel_port 80<br/>　　httpd_accel_with_proxy on<br/>　　httpd_accel_user_host_header on<br/>　　<br/>　　在Linux上，可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口3128，由Squid接手，而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令：<br/>　　<br/>　　iptables -t nat -A PREROUTING -s 192.168.0.200/32 -p tcp --dport 80 -j REDIRECT 3128<br/>　　<br/>　　就是将192.168.0.200的所有针对80端口的访问重定向到3128端口。<br/>　　<br/>　　所有设置完成后，关键且重要的任务是访问控制。Squid支持的管理方式很多，使用起来也非常简单（这也是有人宁愿使用不做任何缓存的Squid，也不愿意单独使用iptables的原因）。Squid可以通过IP地址、主机名、MAC地址、用户/密码等识别用户，也可以通过域名、域后缀、类型、IP 地址、端口、URL匹配等控制用户的访问，还可以使用时间区间对用户进行管理，所以访问控制是Squid配置中的重点。Squid用ACL（Access Control List，访问控制列表）对访问类型进行划分，用http_access deny 或allow进行控制。根据需求首先定义两组用户advance和normal，还有代表所有未指明的用户组all及不允许上网的baduser，配置代码如下：<br/>　　acl advance 192.168.0.2-192.168.0.10/32<br/>　　acl normal src 192.168.0.11-192.168.0.200/32<br/>　　acl baduser src 192.168.0.100/32<br/>　　acl baddst dst www.soocol.com<br/>　　acl all src 0.0.0.0/0<br/>　　<br/>　　http_access deny baduser<br/>　　http_access allow advance<br/>　　http_access allow normal<br/>　　<br/>　　可以看出，ACL的基本格式如下：<br/>　　<br/>　　acl 列表名称 控制方式 控制目标<br/>　　<br/>　　比如acl all src 0.0.0.0/0，其名称是all，控制方式是src源IP地址，控制目标是0.0.0.0/0的IP地址，即所有未定义的用户。出于安全考虑，总是在最后禁止这个列表。<br/>　　<br/>　　下面这个列表代表高级用户，包括IP地址从192.168.0.2到192.168.0.10的所有计算机：<br/>　　<br/>　　acl advance 192.168.0.2-192.168.0.20/32<br/>　　<br/>　　下面这个baduser列表只包含一台计算机，其IP地址是192.168.0.100：<br/>　　<br/>　　acl baduser 192.168.0.100/32<br/>　　<br/>　　ACL写完后，接下来要对它们分别进行管理，代码如下：<br/>　　http_access deny baduser<br/>　　http_access allow advance<br/>　　http_access allow normal<br/>　　上面几行代码告诉Squid不允许baduser组访问Internet，但advance、normal组允许（此时还没有指定详细的权限）。由于 Squid是按照顺序读取规则，会首先禁止baduser，然后允许normal。如果将两条规则顺序颠倒，由于baduser在normal范围中，Squid先允许了所有的normal，那么再禁止baduser就不会起作用。<br/>　　<br/>　　特别要注意的是，Squid将使用allow-deny-allow-deny……这样的顺序套用规则。例如，当一个用户访问代理时，Squid会顺序测试Squid中定义的所有规则列表，当所有规则都不匹配时，Squid会使用与最后一条相反的规则。就像上面这个例子，假设有一个用户的IP地址是 192.168.0.201，他试图通过这台代理访问Internet，会发生什么情况呢？我们会发现，他能够正常访问，因为Squid找遍所有访问列表也没有和192.168.0.201有关的定义，便开始应用规则，而最后一条是deny，那么Squid默认的下一条处理规则是allow，所以 192.168.0.201反而能够访问Internet了，这显然不是我们希望的。所以在所有squid.conf中，最后一条规则永远是 http_access deny all，而all就是前面定义的“src 0.0.0.0”。<br/>　　<br/>　　高级控制<br/>　　前面说过，Squid的控制功能非常强大，只要理解Squid的行为方式，基本上就能够满足所有的控制要求。下面就一步一步来了解Squid是如何进行控制管理的。<br/>　　<br/>　　通过IP地址来识别用户很不可靠，比IP地址更好的是网卡的MAC物理地址。要在Squid中使用MAC地址识别，必须在编译时加上“--enable-arp-acl”选项，然后可以通过以下的语句来识别用户：<br/>　　<br/>　　acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...<br/>　　<br/>　　它直接使用用户的MAC地址，而MAC地址一般是不易修改的，即使有普通用户将自己的IP地址改为高级用户也无法通过，所以这种方式比IP地址可靠得多。<br/>　　<br/>　　假如不想让用户访问某个网站应该怎么做呢？可以分为两种情况：一种是不允许访问某个站点的某个主机，比如ok的主机是ok.sina.com.cn，而其它的新浪资源却是允许访问的，那么ACL可以这样写：<br/>　　<br/>　　acl sinapage dstdomain ok.sina.com.cn<br/>　　... ...<br/>　　http_access deny ok<br/>　　... ...<br/>　　由此可以看到，除了ok，其它如www.sina.com.cn、news.sina.com.cn都可以正常访问。<br/>　　<br/>　　另一种情况是整个网站都不许访问，那么只需要写出这个网站共有的域名即可，配置如下：<br/>　　<br/>　　acl qq dstdomain .tcccent.com.cn<br/>　　<br/>　　注意tcccent前面的“.”，正是它指出以此域名结尾的所有主机都不可访问，否则就只有tcccent.com.cn这一台主机不能访问。<br/>　　<br/>　　如果想禁止对某个IP地址的访问，如202.118.2.182，可以用dst来控制，代码如下：<br/>　　<br/>　　acl badaddr dst 202.118.2.182<br/>　　<br/>　　当然，这个dst也可以是域名，由Squid查询DNS将其转换为IP。<br/>　　<br/>　　还有一种比较广泛的控制是类型。如果不希望普通用户通过代理下载MP3、AVI等，完全可以对他们进行限制，代码如下：<br/>　　<br/>　　acl mmxfile urlpath_regex &#92;.mp3$ &#92;.avi$ &#92;.exe$<br/>　　http_access deny mmxfile<br/>　　<br/>　　看到regex，很多读者应该心领神会，因为这条语句使用了标准的规则表达式（又叫正则表达式）。它将匹配所有以.mp3、.avi等结尾的URL请求，还可以用-i参数忽略大小写，例如以下代码：<br/>　　<br/>　　acl mmxfile urlpath_regex -i &#92;.mp3$<br/>　　<br/>　　这样，无论是.mp3还是.MP3都会被拒绝。当然，-i参数适用于任何可能需要区分大小写的地方，如前面的域名控制。<br/>　　<br/>　　如果想让普通用户只在上班时间可以上网，而且是每周的工作日，用Squid应当如何处理呢？看看下面的ACL定义：<br/>　　<br/>　　acl worktime time MTWHF 8:30-12:00 14:00-18:00<br/>　　http_access deny !worktime<br/>　　<br/>　　首先定义允许上网的时间是每周工作日（星期一至星期五）的上午和下午的固定时段，然后用http_access 定义所有不在这个时间段内的请求都是不允许的。<br/>　　<br/>　　或者为了保证高级用户的带宽，希望每个用户的并发连接不能太多，以免影响他人，也可以通过Squid控制，代码如下：<br/>　　<br/>　　acl conncount maxconn 3<br/>　　http_access deny conncount normal<br/>　　http_access allow normal<br/>　　<br/>　　这样，普通用户在某个固定时刻只能同时发起三个连接，从第四个开始，连接将被拒绝。<br/>　　<br/>　　总之，Squid的ACL配置非常灵活、强大，更多的控制方式可以参考squid.conf.default。<br/>　　<br/>　　<br/>　　用户/密码为Squid管理提供了更多便利，最常用的方式是NCSA。从Squid 2.5版本开始，NCSA包含在了basic中，而非以前单独的模块。下面来看看实现的具体操作。<br/>　　<br/>　　首先在编译时配置选项应包括以下配置：<br/>　　<br/>　　--enable-auth=&quot;basic&quot; --enable-basic-auth-helpers=&quot;NCSA&quot;<br/>　　<br/>　　“make install”以后，需要将“helpers/basic_auth/NCSA/ncsa_auth”拷贝到用户可执行目录中，如/usr/bin（如果在该目录中找不到这个执行，在编译时请使用make all而不是make，或者直接在该目录中执行make），然后需要借助Apache的密码管理htpasswd来生成用户名/密码对应的，就像下面这行代码：<br/>　　<br/>　　htpasswd -c /var/squid/etc/password guest<br/>　　<br/>　　在输入两遍guest用户的密码后，一个guest用户就生成了。如果以后需要添加用户，把上面的命令去掉-c参数再运行即可。<br/>　　<br/>　　Squid 2.5在处理上有了较大的改变，这里就只讨论2.5版本的处理方法，2.4及以下版本请参考squid.conf.default。在2.5版的squid.conf中，包括以下几个相关选项：<br/>　　<br/>　　#该选项指出了方式（basic)、需要的（ncsa_auth）和<br/>　　对应的密码（password）<br/>　　auth_param basic program /usr/bin/ncsa_auth /var/squid/etc/password<br/>　　# 指定的进程数<br/>　　auth_param basic children 5<br/>　　# 浏览器显示输入用户/密码对话框时的领域内容<br/>　　auth_param basic realm My Proxy Caching Domain<br/>　　# 基本的有效时间<br/>　　auth_param basic credentialsttl 2 hours<br/>　　# 普通用户需要通过才能访问Internet<br/>　　acl normal proxy_auth REQUIRED<br/>　　http_access allow normal<br/>　　<br/>　　通过以上的配置即可完成工作。有的读者可能要问：只针对普通用户，而高级用户是直接上网的，该怎么处理呢？其实，这两种用户是可以共存的。如前所述，Squid是顺序处理http_access的，所以在http_access处理过程中，如果先处理normal用户，那么当前用户无论是否属于高级用户，都会被要求进行；相反如果先处理高级用户，剩下的就只有需要的普通用户了。例如以下配置代码：<br/>　　...<br/>　　http_access allow normal (需要)<br/>　　http_access allow advance （不需要）<br/>　　...<br/>　　<br/>　　不管是否为noauth用户，都要求进行用户名/密码验证。正确的方法是将二者位置交换，代码如下：<br/>　　...<br/>　　http_access allow advance<br/>　　http_access allow normal<br/>　　...<br/>　　<br/>　　这时，高级用户不会受到任何影响。<br/>　　<br/>　　总结<br/>　　下面把整个squid.conf总结一下：<br/>　　<br/>　　# 配置<br/>　　http_port 192.168.0.1:3128<br/>　　cache_mgr start@soocol.com<br/>　　cache_dir null /tmp<br/>　　cache_access_log /var/squid/access.log<br/>　　cache_log /var/squid/cache.log<br/>　　cache_store_log /var/squid/store.log<br/>　　visible_hostname No1.proxy<br/>　　client_mask 255.255.255.255<br/>　　httpd_accel_host virtual<br/>　　httpd_accel_port 80<br/>　　httpd_accel_with_proxy on<br/>　　httpd_accel_user_host_header on<br/>　　<br/>　　# 用户分类<br/>　　acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...<br/>　　acl normal proxy_auth REQUIED<br/>　　acl all src 0.0.0.0<br/>　　<br/>　　# 行为分类<br/>　　acl mmxfile urlpath_regex &#92;.mp3$ &#92;.avi$ &#92;.exe$<br/>　　acl conncount maxconn 3<br/>　　acl worktime time MTWHF 8:30-12:00 14:00-18:00<br/>　　acl sinapage dstdomain ok.sina.com.cn<br/>　　acl qq dstdomain .tcccent.com.cn<br/>　　<br/>　　# 处理<br/>　　http_access allow advance<br/>　　http_access deny conncount normal<br/>　　http_access deny !worktime<br/>　　http_access deny mmxfile<br/>　　http_access deny sinapage<br/>　　http_access deny qq<br/>　　http_access allow normal<br/>　　<br/>　　配置后的状况是，advance组可以不受任何限制地访问Internet，而normal组则只能在工作时间上网，而且不能下载多媒体，不能访问某些特定的站点，而且发送请求不能超过3个。<br/>　　<br/>　　通过本文的介绍，它可以了解Squid的基本能力。当然，它的能力远不止此，可以建立强大的代理阵列，可以帮助本地的Web提高性能，可以提高本地的安全性等。要想发挥它的功效，还需要进一步控制。 <br/>TAG: 认证 详解 Squid squid <br/><br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?193</link>
<title><![CDATA[搭建Linux安全的Squid代理服务器]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:26:43 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?193</guid> 
<description>
<![CDATA[ 
	本文介绍Linux下非常著名、常用的Squid代理服务器的使用，并着重讲述如何使用其提供的访问控制策略，来保证代理服务器的合法使用。<br/>&nbsp;&nbsp;&nbsp;&nbsp;代理服务器的功能是代理网络用户取得网络信息，它是网络信息的<br/>中转站。随着代理服务器的广泛使用，随之而来的是一系列的安全问题。由于没有对代理服务器的访问控制策略作全面细致的配置，导致用户可以随意地通过代理服务器访问许多色情、反动的非法站点，而这些行为往往又很难追踪，给管理工作带来极大的不便。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Squid是Linux下一个缓存Internet数据的代理服务器软件，其接收用户的下载申请，并自动处理所下载的数据。也就是说，当一个用户想要下载一个主页时，可以向Squid发出一个申请，要Squid代替其进行下载，然后Squid连接所申请网站并请求该主页，接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时，Squid把保存的备份立即传给用户，使用户觉得速度相当快。目前，Squid可以代理HTTP、FTP、 GOPHER、SSL和WAIS协议，暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中，如AIX、Digital、Unix、 FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。<br/><br/>&nbsp;&nbsp; 安装和配置Squid Server<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;通常说来，安装Squid有两种方法：一是从Red Hat Linux 9中获取该软件的RPM包进行；二是安装从Squid的官方站点http://www.squid-cache.org/下载该软件的源码进行编译后安装。目前网上最新的稳定版本为squid-2.5.STABLE10，下面以此版本为例对两种安装方法进行介绍。<br/><br/><a href="http://img.zdnet.com.cn/0/624/liNRnq6wXBR7Q.jpg" target="_blank"><img src="http://img.zdnet.com.cn/0/624/liNRnq6wXBR7Q.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Squid服务器工作原理示意图<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;1． RPM包的安装<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;首先，查看是否已经安装了squid：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#rpm －qa &#124; grep squid<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Red Hat Linux9自带了Squid安装软件包，将第一张安装光盘放入光驱后挂装光盘分区：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#mount /mnt/cdrom<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后，进入/mnt/cdrom/Red Hat/RPMS目录：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#cd /mnt/cdrom/Red Hat/RPMS<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;最后，执行安装：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#rpm -ivh squid-2.5.STABLE1-2.i386.rpm<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;当然，我们也可以在开始安装系统的过程中安装该软件。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;2． 源代码包的安装<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;从http://www.squid-cache.org/下载squid软件的最新源代码包squid-2.5.STABLE10.tar.gz，然后，按照如下步骤进行安装。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;首先，将该文件拷贝到/tmp目录：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#cp squid-2.5.STABLE10.tar.gz /tmp<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后，解开该文件：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#tar xzvf squid-2.5.STABLE10.tar.gz<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;解开后，在/tmp生成一个新的目录squid-2.5.STABLE10，为了方便使用mv命令，将该目录重命名为squid：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#mv squid-2.5.STABLE10 squid<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;切换进入squid目录：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#cd squid<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;接着，执行/configure，可以用./configure --prefix=/directory/you/want指定安装目录，系统默认安装目录为/tmp/squid：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#./configure<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;最后，分别执行make all、make install：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#make all<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#make install<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;安装结束后，Squid的可执行文件在安装目录的bin子目录下，配置文件在etc子目录下。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Squid软件向用户提供了许多与配置、应用程序和库、日志等相关的文档进行配置和管理，Squid有一个主要的配置文件squid.conf。同时，在 Red Hat环境下所有Squid的配置文件都位于/etc/squid子目录下。在该目录当中，系统同时提供了一个默认的配置文件，其名称为 squid.conf.default，然而，在实际的应用当中，该默认的配置文件存在某些问题，所以在使用Squid之前，必须首先对该配置文件的有关内容进行修改。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;下面介绍squid.conf文件的结构以及一些常用的选项。squid.conf配置文件可以分为13个部分。虽然Squid的配置文件很庞大，该配置文件的规模达到了3000多行。然而，如果只是为一个中小型网络提供代理服务，并且只准备使用一台服务器，那么，配置问题将会变得相对简单，只需要修改配置文件中的几个选项即可满足应用需求。这些几个常用选项分别是：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;1. http_port<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;该选项定义Squid监听HTTPD客户连接请求的端口。默认是3128，如果使用HTTPD加速模式，则为80。可以指定多个端口，但是所有指定的端口都必须在一条命令行上出现，程序才能正确地识别。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;2. cache_mem（bytes）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;该选项用于指定Squid可以使用的内存的理想值。这部分内存被用来存储以下对象：In-Transit objects（传入的对象）、Hot Objects（热对象，即用户常访问的对象）、Negative-Cached objects（消极存储的对象）。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;3. cache_dir Directory-Name Mbytes Level1 Level2<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;该选项指定Squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个交换空间，并且这些交换空间可以分布在不同的磁盘分区。“directory”指明了该交换空间的顶级目录。如果想用整个磁盘作为交换空间，那么可以将该目录作为装载点将整个磁盘挂装上去。默认值为/var/spool/squid。Mbytes定义了可用的空间总量。<br/><br/>
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?192</link>
<title><![CDATA[Squid代理服务器搭建详解]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:24:26 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?192</guid> 
<description>
<![CDATA[ 
	注意：在配置中一定要注意大小写、空格啊<br/><br/>首先改变当前目录（cd /etc/squid/），把squid.conf这个文件备份（mv squid.conf squid.conf.bak）<br/>在使用vi新建一个名为squid.conf的文件（vi squid.conf），建入以下内容：<br/><br/>http_port 192.168.0.1:8080<br/>＃指定代理服务器监听的IP和端口；<br/><br/>cache_mem 128 MB<br/>＃设置内存缓冲的大小 （这里为128兆，更据自己的内存定义）；<br/><br/>cache_dir ufs /var/spool/squid 4096 16 256<br/>＃设置硬盘缓冲的大小 （一般都使用ufs这种存储类型，指定存储位置、大小、第一级目录数、第二级目录数）；<br/><br/>cache_effective_user squid<br/>＃设定使用缓存的有效用户；<br/><br/>cache_effective_group squid<br/>设定使用缓存的有效组；<br/><br/>dns_nameservers 210.21.4.130<br/>＃定义DNS服务器的地址；<br/><br/>cache_access_log /var/log/squid/access.log<br/>＃设置访问日志；<br/><br/>cache_log /var/log/squid/cache.log<br/>＃设置缓存日志；<br/><br/>cache_store_log /var/log/squid/store.log<br/>＃设置网页缓存日志；<br/><br/>visible_hostname 192.168.0.1<br/>＃设置运行squid主机的名称；<br/><br/>cache_mgr kubiandan@126.com<br/>＃设置管理员的E-Mail地址；<br/><br/>＃以上是主要的配置！<br/><br/><br/>＃透明代理的实现，以下是实现透明代理４条语句，缺一不可！<br/><br/>httpd_accel_host virtual<br/>＃虚拟主机模式；<br/><br/>httpd_accel_port 80<br/>＃要求加速的端口<br/><br/>httpd_accel_with_proxy on<br/>＃把此选项设置成‘on’后，Squid即是Web请求的加速器，又是缓存代理服务器；<br/><br/>httpd_accel_uses_host_header on<br/>＃把此选项设置成‘on’后，在透明代理模式下，代理服务器的缓存功能才能正确工作；<br/><br/>＃以上是实现透明代理４条语句，缺一不可！<br/><br/>#如果要使用透明代理必须打开Linux的路由功能，如下：<br/><br/>ech0 &quot;1&quot;&gt;/proc/sys/net/ipv4/ip_forward<br/>#打开Linux中的包转发功能<br/><br/>#改变此文件(sysctl.conf)让包转发功能在系统启动以后自动生效；<br/>vi /etc/sysctl.conf<br/>#找到下面语句：<br/># Controls IP packet forwarding<br/>net.ipv4.ip_forward = 0<br/>#把0改为1，改后如下：<br/># Controls IP packet forwarding<br/>net.ipv4.ip_forward = 1<br/><br/><br/>iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE<br/>#打开iptables的NAT功能(eth1是连接外网或者连接Internet的网卡);<br/><br/>iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080<br/>#端口重定向；<br/><br/>service iptables save<br/>#保存iptables的规则;<br/><br/>service iptables restart<br/>#重启iptables<br/><br/><br/>＃以下是用来实现访问控制的！<br/><br/>acl 2 src 192.168.0.2<br/>http_access allow 2<br/>＃允许192.168.0.2这个ip地址的请求全部通过代理服务器；<br/><br/>acl qq url_regex -i qq.com<br/>http_access deny qq<br/><br/>acl tencent url_regex -i tencent.com<br/>http_access deny tencent<br/>＃禁止用户上qq<br/><br/>acl jzxz urlpath_regex -i &#92;.exe$ &#92;.rar$ &#92;.zip$ &#92;.mp3$ &#92;.mp4$ &#92;.mpg$ &#92;.rm$ &#92;.wma$ &#92;.rmvb$ &#92;.avi$<br/>http_access deny jzxz<br/>＃禁止用户下载以&#039;.exe、.rar、mp3、mp4、.rm&#039;等结尾的文件(注意空格啊！没有空格便失效)<br/><br/>acl all src 192.168.0.1/255.255.255.0<br/>http_access allow all<br/>＃设置访问控制列表，让代理服务器接受来自192.168.0这个网段的请求。<br/><br/>＃到此！<br/><br/>完成以上操作基本上就可以了，但在运行之前要先初始化squid，(/usr/sbin/squid -z)，初始化squid后就可以启动了(/etc/init.d/squid start)、应用（reload）、重启(restart)、停止（stop） 
]]>
</description>
</item><item>
<link>http://www.qixiaomudong.cn/read.php?191</link>
<title><![CDATA[使用Squid做代理服务器]]></title> 
<author>七小木东 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux下Squid代理]]></category>
<pubDate>Thu, 13 Nov 2008 01:23:55 +0000</pubDate> 
<guid>http://www.qixiaomudong.cn/read.php?191</guid> 
<description>
<![CDATA[ 
	说到代理服务器，我们最先想到的可能是一些专门的代理服务器网站，某些情况下，通过它们能加快访问互联网的速度。其实，在需要访问外部的局域网中，我们自己就能设置代理，把访问次数较多的网页保存在缓存中，从而“提高”网络速度。更重要的是，我们能通过代理服务器，达到控制访问权限的目的。在 Windows中，有很多这样的软件，如：WinGate、SyGate等，不过，本文要讨论的，是能给你充分自由的Linux下的Squid。<br/>　　Linux下的代理服务器软件也不是只有Squid，不过在大部分Linux版本中都带有它。<br/><br/>　　走进“代理”<br/><br/>　　首先，我们来了解一下代理服务器的工作原理。代理服务器其实就是基于TCP/IP的一种软件，它在TCP的某个端口上进行监听，例如：4444，其他客户机(就是想通过代理上网的那些Windows系统)配置好应用软件，如：IE。其中需要填上代理服务器的端口，即前例中的4444，这样代理服务器才知道你要访问的地址。如果你是合法用户的话，它就取得你想要的网页，然后再通过4444这个端口传递给你，上网时你不会感觉到代理服务器的存在。<br/><br/>　　而代理服务器的真正意义在于：一、由于它是先将网页下载到本地使用，因此访问频率越高的站点速度就会越快；二、如果你没有访问某个站点的权限而它有，你就能通过它访问到该站点；三、它可以控制你的访问。<br/><br/>　　当今，通过窄带联入Internet的恐怕仍然占大多数，代理服务器的提速作用也就十分明显了。<br/><br/>　　熟悉Linux的朋友可能知道，在Linux下有Ipchains可以做路由器，一样可以控制访问权限，但Ipchains的缺点是不支持DNS解析，如果你想通过它控制客户机的访问，就必须一一指定目的地的IP，如果有谁把Ipchains用在访问Internet上，那他一定是疯了，因为 Internet上的IP地址不但多得像天上的星星，而且和星星一样随时都在变化。Squid就不同，它可以指定哪些域后缀不能访问，如：.tw、.net等，这样就把域名对IP的映射交给ISP去做了。<br/><br/>　　配置举例<br/><br/>　　在这个例子中，我们使用的是一台普通品牌机做代理服务器，内装两块网卡，第一块eth0接的是本单位的局域网，第二块eth1接的是一台简单的Internet共享器，操作系统是RedHat Linux 6.1，Ipchains和Squid都是系统自带的。<br/><br/>　　像大多数Linux软件一样，Squid是通过配置文件工作的，它的默认配置文件是/etc/squid/squid.conf，原始文件长达数十页，给出了详细的配置说明，其中真正用得上的，可能只是很小的一部分。看看下面这个配置文件，其实很多选项都是一目了然的：<br/><br/>　　http_port 4444<br/><br/>　　#代理服务器监听的端口<br/><br/>　　cache_dir /var/cache/squid 100 16 32<br/><br/>　　#缓存目录 大小(兆) 第一级子目录个数 第二级子目录个数<br/><br/>　　cache_access_log /var/log/squid/access.log<br/><br/>　　cache_log /var/log/squid/cache.log<br/><br/>　　acl all src 0.0.0.0/0.0.0.0<br/><br/>　　acl head src 192.168.0.2/255.255.255. 255 192.168.0.3/255.255.255.255<br/><br/>　　acl normal src 192.168.0.21-192.168. 0.99/255.255.255.255<br/><br/>　　acl denysite dstdomain tw net<br/><br/>　　acl denyip dst 61.136.135.04/255.255. 255.255<br/><br/>　　acl dnsport port 53<br/><br/>　　http_access allow head<br/><br/>　　http_access deny denysite<br/><br/>　　http_access deny denyip<br/><br/>　　http_access allow normal<br/><br/>　　http_access deny dnsport<br/><br/>　　实例分析<br/><br/>　　上面的内容，就是一个基本Squid所需要的全部配置，是不是很简单？！<br/><br/>　　从上面我们可以看到，代理服务器使用4444这个端口进行监听，缓存目录为100MB，IP地址为192.168.0.2和192.168.0.3的用户可访问所有站点，而IP地址为192.168.0.21～99的用户不能访问后缀为tw和net的站点，也不能访问IP地址为 61.136.135.04的站点(如果dst 61.136.135.04/255.255.255.255变成dst 61.136.135.04/255.255.255.0，指的是61.136.135.0这个网络)。<br/><br/>　　很明显，Squid使用acl来定义用户组，并使用http_access来控制用户组的权限。acl后面可以是src(源地址)、dst(目标地址)、proto(协议)、port(端口)、 srcdomain(源域)、dstdomain(目标域)等，Squid的控制功能十分强大，你甚至可以用acl aclname time指定用户组生效的时间，不过要注意，用http_access设置不同用户组的权限时，Squid是按从上到下的顺序执行的，如果你想关闭一个组访问某些站点的权限，就必须把deny的相应句子放在这个组的前面。<br/><br/>　　另外，Squid文档中特别指出，如果没有相应的access设置，那么默认的权限与最后一行相反，在上例中，一个IP为192.168.0.5的客户未被定义却能访问外部网络，因此，在最后一行设置http_access deny all是很有必要的。<br/><br/>　　设置完成后，就可以直接运行Squid来启动它，如果配置文件有误，Squid会给出相应的提示。然后再使用Ipchains设置包的转发规则，如只允许客户机使用POP3(110)、SMTP(25)、DNS(53)这几个端口收发信件，浏览网页只能使用代理，这样网络就安全得多了。 
]]>
</description>
</item>
</channel>
</rss>