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 ... //浏览器列表