Squid与Linux下其它的代理软件如 ApacheSocks、TIS FWTK和 delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高性能的同时能够无缝的访问Internet。
 
  Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。
  对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持 HTTP协议,还支持 FTPgopherSSLWAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
 
  Squid将数据元缓存在内存中,同时也缓存 DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。
 
  Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
 
  Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。
 
  Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务器专用 SCSI 硬盘,处理器要求不高,400MH以上既可。                  
   squid+iptables透明代理

参照这篇文章做的代理设置

# NETWORK OPTIONS(有关的网络选项) # -----------------------------------------------------------------------------
 http_port 3128 #代理端口

 # OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)
 #-----------------------------------------------------------------------------

 #禁止缓存
 hierarchy_stoplist cgi-bin ?
 hierarchy_stoplist -i ^https:\ ?
 acl QUERY urlpath_regex -i cgi-bin .asp .php .jsp .cgi
 acl denyssl urlpath_regex -i ^https:
 no_cache deny QUERY
 no_cache deny denyssl

 # OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的选项)
 # -----------------------------------------------------------------------------

 cache_mem 8 MB   #额外使用内存量,可根据你的系统内存在设定,一般为实际内存的1/3

 cache_swap_low 90    #最低缓存百分比
 cache_swap_high 95     ##最高缓存百分比,就是上面那个额外内存的使用百分比

 maximum_object_size 4096 KB  #单个文件最大缓存大小,超过这个大小将不缓存

 maximum_object_size_in_memory 8 KB  #在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中

 #DNS正反解所得到的IP存在缓存区的大小,这样能加快解析速度
 ipcache_size 1024
 ipcache_low 90
 ipcache_high 95
 fqdncache_size 1024


 # LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录)
 # ----------------------------------------------------------------------------- 

cache_dir aufs /Cache1 100 16 256 
 cache_dir aufs /Cache2 100 16 256

 #日志存放位置
 cache_access_log /usr/local/squid/var/logs/access.log
 cache_log /usr/local/squid/var/logs/cache.log

 #  TAG: cache_store_log
 cache_store_log /usr/local/squid/var/logs/store.log

 #  TAG: pid_filename
 pid_filename /usr/local/squid/var/logs/squid.pid

 # OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程式选项)
 # -----------------------------------------------------------------------------

 #用代理登陆匿名ftp服务选项
 #  TAG: ftp_user
 ftp_user Squid@    #用户名
 ftp_passive on     #被动模式

 #认证
 #auth_param basic children 5
 #auth_param basic realm Squid proxy-caching web server
 #auth_param basic credentialsttl 2 hours
 #auth_param basic casesensitive off

 # OPTIONS FOR TUNING THE CACHE(调整cache的选项)
 # -----------------------------------------------------------------------------

 #  TAG: refresh_pattern    Cache更新时间设置
 #<refresh_pattern> <regex> <最小时间> <百分比> <最大时间>

 refresh_pattern ^ftp:      1440   20%   10080
 refresh_pattern ^gopher:   1440   0%   1440
 refresh_pattern .      0   20%   4320

 #上面第一行如果网址开头是 ftp 的话,那么在一天(1440分钟)后,
 #如果proxy 再次取用这个档案时,则 cache 内的数据会被更新!

 # TIMEOUTS (超时)
 # -----------------------------------------------------------------------------
 #连接到其他机器的最大尝试时间
 connect_timeout 1 minute

 #连接到上层代理的超时时间
 peer_connect_timeout 30 seconds

 #返回超时
 request_timeout 2 minutes

 #持续连接时间
 persistent_request_timeout 1 minute

 # ACCESS CONTROLS(访问控制)
 # -----------------------------------------------------------------------------

 #  TAG: acl

 #Examples:
 #acl myexample dst_as 1241
 #acl password proxy_auth REQUIRED
 #acl fileupload req_mime_type -i ^multipart/form-data$
 #acl javascript rep_mime_type -i ^application/x-javascript$
 #
 #Recommended minimum configuration:
 acl all src 0.0.0.0/0.0.0.0
 acl manager proto cache_object
 acl localhost src 127.0.0.1/255.255.255.255
 acl to_localhost dst 127.0.0.0/8
 acl SSL_ports port 443 563
 acl Safe_ports port 80      # http
 acl Safe_ports port 21      # ftp
 acl Safe_ports port 443 563   # https, snews
 acl Safe_ports port 70      # gopher
 acl Safe_ports port 210      # wais
 acl Safe_ports port 1025-65535   # unregistered ports
 acl Safe_ports port 280      # http-mgmt
 acl Safe_ports port 488      # gss-http
 acl Safe_ports port 591      # filemaker
 acl Safe_ports port 777      # multiling http
 acl CONNECT method CONNECT

 acl inside src 192.168.0.0/24   #内部网IP
 acl localmac arp "/usr/local/squid/localmac"  #mac地址文件

 #  TAG: http_access
 http_access allow inside  #允许inside规则通过
 #http_access allow localmac  #允许localmac里面有登记的mac地址通过

 #
 #Recommended minimum configuration:
 #
 # Only allow cachemgr access from localhost
 http_access allow manager localhost
 http_access deny manager
 # Deny requests to unknown ports
 http_access deny !Safe_ports
 # Deny CONNECT to other than SSL ports
 http_access deny CONNECT !SSL_ports
 #

 #http_access deny to_localhost
 #
 # And finally deny all other access to this proxy
 http_access deny all

 #  TAG: http_reply_access

 http_reply_access allow all

 #  TAG: icp_access

 #icp_access allow all

 #  TAG: cache_peer_access

 # ADMINISTRATIVE PARAMETERS(管理参数)
 # -----------------------------------------------------------------------------

 #  TAG: cache_mgr
 cache_mgr webmaster@localhost  #管理员信箱

 #  TAG: cache_effective_user
 cache_effective_user squid  #运行squid时的用户
 cache_effective_group  squid #运行squid时的组

 #  TAG: visible_hostname
 visible_hostname ProxyServer  #代理服务器名称


 # OPTIONS FOR THE CACHE REGISTRATION SERVICEcache注册服务选项)
 # -----------------------------------------------------------------------------


 # HTTPD-ACCELERATOR OPTIONSHTTPD加速选项)
 # -----------------------------------------------------------------------------
 #设定透明代理
 httpd_accel_host ProxyServer  #主机名
 httpd_accel_port 80  #透明代理端口
 httpd_accel_with_proxy on
 httpd_accel_uses_host_header on


 # MISCELLANEOUS(杂项)
 # -----------------------------------------------------------------------------

 #  TAG: logfile_rotate
 logfile_rotate 4

 #  TAG: forwarded_for   on|off
 #关闭此项将在访问某些论坛时显示的IPunknown
 #如果打开则显示的是你client的内网IP

 forwarded_for off


 #图标文件目录
 # icon_directory /usr/local/squid/share/icons

 #错误提示文件目录
 # error_directory /usr/local/squid/share/errors/Simplify_Chinese

 #  TAG: snmp_port
 #   Squid can now serve statistics and status information via SNMP.
 #   By default it listens to port 3401 on the machine. If you dont
 #   wish to use SNMP, set this to "0".
 #
 #Default:
 # snmp_port 3401

 #  TAG: snmp_access
 #   Allowing or denying access to the SNMP port.
 #
 #   All access to the agent is denied by default.
 #   usage:
 #
 #   snmp_access allow|deny [!]aclname ...
 #
 #Example:
 # snmp_access allow snmppublic localhost
 # snmp_access deny all
 #
 #Default:
 # snmp_access deny all

 # DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)(延时池参数)
 # -----------------------------------------------------------------------------


 #  TAG: coredump_dir
 #squid忽然挂掉的时候,或忽然出现什么故障的时候,将squid在内存中的资料写到硬盘中
 coredump_dir /usr/local/squid/var/cache

二、设置iptables支持透明代理
 #!/bin/bash
OUT_IP="221.000.000.0"
 IN_IP="192.168.0.1"
 echo "1" > /proc/sys/net/ipv4/ip_forward    #设置转发
modprobe iptable_nat
 modprobe ip_conntrack
 modprobe ip_conntrack_ftp
 /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE #设置nat功能
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128 #将所有80端口的请求都转发到suqid3128端口上
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source $OUT_IP

=======================================================================

企业的简单应用
 
实验环境介绍
1、采用虚拟机wmware6.0--RedHat9.0
2、内网采用wm1网络,外网采用wm2网络!
3、192.168.10.7/24web1--提供 www.a.com
4、192.168.10.8/24web2--提供 www.a.com
5、192.168.10.10/24--为A公司内网客户端
6、1.1.1.2--提供 www.discuz.com论坛
7、1.1.1.3--为B公司的内网客户端
8、本实验只操作squid服务器其他均为已配置完成
一、透明正向代理让企业内部客户端通过一个IP实现共同上网
1、#yum install squid  安装squid服务包
2、配置正向代理;修改/etc/squid/squid.conf
http_port 192.168.10.1:3128  transparent
cache_mem 64 MB  缓存大小64M
maximum_object_size 4096 KB  
   能cache最大的文件大小
reply_body_max_size 10240000 allow all
   用户下载文件的大小
access_log /var/log/squid/access.log squid
   通过代理服务器的数据通信日志(默认访问日志文件)
visible_hostname www.example.com   主机名
cache_dir ufs /var/spool/squid 100 16 256
 通常只缓存静态页面,ufs缓存数据的存储格式
  /var/spool/squid 对squid具有可读
 100(M)缓存大小 16 缓存空间一级子目录
 256 缓存空间2级子目录
cache_magr admin@example.com 管理员邮箱
error_directory Simplify_Chinese
   让错误页面以中文显示
#squid -z  系统初始化(一般第一次启动前使用)
#squid -k parse  检配置文档语法正确性
二、配置防火墙转发、控制
 # iptables -t nat -I PREROUTING -i eth1 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
使内部访问外网的80端口转发到本机的3128端口上
让内网能够访问互联网上的web服务
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -p udp --dport 53 -j SNAT --to-source 1.1.1.1
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -p tcp --dport 53 -j SNAT --to-source 1.1.1.1
   让内部网络主机能够在dns服务器解析
三、配置透明反向代理从而实现负载均衡
在以上基础上修改squid.conf增加
http_port 1.1.1.1:80 vhost
cache 192.168.10.7 parent 80 0 originserver weight=5 max-conn=30
cache 192.168.10.8 parent 80 0 originserver weight=5 max-conn=30
说明:本实验本有涉及squid的acl问题具体设置参看acl在squid上面的应用
squid -z
squid -k parse
service squid start
service squid reload
测试应用
=======================================================================
在代理服务器上面安装cachemgr(代理流量分析工具)
在代理服务器上面安装cachemgr(代理服务器流量分析工具)
1、#rpm -ql squid | grep cachemgr  参看
#cp /usr/lib/squid/cachmgr.cgi /usr/www/cgi-bin/
2、A: (只允许本机访问)
#vim /etc/squid/squid.conf
http_access allow manager locahost
B:为cachemgr设置密码
cachemgr_passwd 123456 all
C:增加
http_port 127.0.0.1:3128
3、安装apache将端口监听8080
#vim /etc/httpd/conf/httpd.conf
Listen 8080
4、测试
本机访问 http://localhost:8080 /cgi-bin/cachemgr.cgi
用户名 manager  密码:123456