squid 代理服务器功能:

1.正向代理
2.反向代理--web加速
3.实理用户验证和访问控制的功能,与iptables配合使用实理透明代理。

说明:Squid不仅仅支持HTTP协议,而且还支持FTP,GOPHER,SSL和WAIS等协议

一.安装及文件目录

1. 默认编译后安装的路径为/usr/local/squid

下面包含以下文件夹:
bin------包含 了squid默认的启动脚本
sbin-----squid可执行程序
etc------包含配置文件squid.conf
libexec--包含squid服务器的函数库
logs-----squid的日志
man------帮助文件
share----显示错误信息的html页面
var------包含squid服务器的log,pid,swap等目录。
            /var/cache/squid可以缓存大量的数据。

2.  以rpm文式安装的,系统会把安装文件分散到不同的目录下。

/etc/rc.d/init.d/squid
/usr/lib/squid
/usr/sbin/squid -----squid可执行程序
/etc/squid ----------配置文件

/usr/share/squid
/var/log/squid
/var/spool/squid  ---这里保存缓存文件的地方

查看是否安装此软件包:
$rpm -qa|grep -i squid


squid启动服务
$chkconfig squid on
$service squid start

如果没有var目录下没有cache目录,则可以执行以下的命令进行初始化,这一步是必须的。
$squid -z  #创建 Squid 使用的缓存目录,在第一次运行 Squid 前必须执行。

$/usr/sbin/squid -z
如果需要重建 Squid 缓存,可以先使用 'rm -f /usr/local/squid/cache/*' 删除缓存,再使用 -z 重建。

二.配置方案

$vi /etc/squid/squid.conf
只要更改/etc/squid/squid.conf文件,执行 $service squid restart就可以生效。

以下为默认的一些信息,只要把iptables停止掉或在iptables规则里允许通过就可以使用了squid了,如果要定配一些squid的ACL就可以满足你的应用需求了。

完成!


--------------------------------------------------------------------------------------

设置iptables 防火墙,加入;
iptables -t nat -A PREROUTING -s 192.168.1.225/32 -p tcp --dport 80 -j REDIRECT –to-ports 3128


端口定义部分:
#  TAG: http_port
#    Usage:    port [options]
#        hostname:port [options]        //这里可以用ts3-142:3128
#        1.2.3.4:port [options]         //这里可以用172.16.78.142:3128

http_port 3128  


访问控制列表
#  TAG: acl
#    Defining an Access List
#
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
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
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


#  TAG: http_access
#    Allowing or Denying access based on defined access lists
#
#    Access to the HTTP port:
    http_access allow|deny [!]aclname ...


访问控制
格式:http_access allow/deny aclname
典型访问控制规则如下:
http_access allow your-aclname
http_access deny  all



使用http_access的时候特别要注意的是,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”。




# 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
#
#    acltype is one of the types described below
#
#    By default, regular expressions are CASE-SENSITIVE.  To make
#    them case-insensitive, use the -i option.
#
       *** IP地址访问控制列表***

#    acl aclname src      ip-address/netmask ... (clients IP address)      //以源客户端IP地址为列表
#    acl aclname src      addr1-addr2/netmask ... (range of addresses)     //以源IP地址范围为列表
#    acl aclname dst      ip-address/netmask ... (URL host's IP address)   //以目的主机IP地址为列表
#    acl aclname myip     ip-address/netmask ... (local socket IP address) //squid主机的IP地址为myip列表
#
#    acl aclname arp      mac-address ... (xx:xx:xx:xx:xx:xx notation)
#      # The arp ACL requires the special configure option --enable-arp-acl.
#      # Furthermore, the arp ACL code is not portable to all operating systems.
#      # It works on Linux, Solaris, FreeBSD and some other *BSD variants.
#      #
#      # NOTE: Squid can only determine the MAC address for clients that are on
#      # the same subnet. If the client is on a different subnet, then Squid cannot
#      # find out its MAC address.
#
      ***域名访问控制列表***

#    acl aclname srcdomain   .foo.com ...    # reverse lookup, client IP     //以域名为源列表
#    acl aclname dstdomain   .foo.com ...    # Destination server from URL   //以域名为目的列表
#    acl aclname srcdom_regex [-i] xxx ...   # regex matching client name    //
#    acl aclname dstdom_regex [-i] xxx ...   # regex matching server
#      # For dstdomain and dstdom_regex  a reverse lookup is tried if a IP
#      # based URL is used and no match is found. The name "none" is used
#      # if the reverse lookup fails.
#
        ***时间访问控制列表***

#    acl aclname time     [day-abbrevs]  [h1:m1-h2:m2]
#        day-abbrevs:
#        S - Sunday
#        M - Monday
#        T - Tuesday
#        W - Wednesday
#        H - Thursday
#        F - Friday
#        A - Saturday
#        h1:m1 must be less than h2:m2

        ***其它访问控制列表***

#    acl aclname url_regex [-i] ^http:// ...    # regex matching on whole URL   //匹配以http://开始的列表
#    acl aclname urlpath_regex [-i] \.gif$ ...    # regex matching on URL path  //匹配以.gif为结尾的列表
#    acl aclname urllogin [-i] [^a-zA-Z0-9] ...    # regex matching on URL login field  //
#    acl aclname port     80 70 21 ...                                              //端口列表    
#    acl aclname port     0-1024 ...        # ranges allowed                       //端口范围列表
#    acl aclname myport   3128 ...        # (local socket TCP port)              //squid本地端口
#    acl aclname proto    HTTP FTP ...                                              //协议列表  
#    acl aclname method   GET POST ...                                              //访问方式列表
#    acl aclname browser  [-i] regexp ...                                           //浏览器列表