|
一、squid简介
当用户使用squid代理来访问web页面时,首先squid服务器会检查自己的cache查看是否有用户访问的web页面,如果有则squid服务器直接从cache中取出页面发送给用户的客户机,如果没有则squid服务器会代理客户机访问web页面,访问成功后将访问到的web页面发送给客户机并将web页面缓存到自己的服务器中。(注意:当squid代理服务器中cache中有客户机访问的页面时,squid也会去访问客户机访问的web页面去检查该页面是否过期。)
如下图所示:
1、代理的基本类型:
1)传统代理
传统代理也叫标准代理或普通代理,客户机如果要访问web服务器或QQ等应用程序必须在软件中设置代理服务器的IP地址和端口信息才能成功访问。对于域名的解析请求(DNS)也会发送给指定的代理服务器。(适用于internet上,需明确指定服务端IP和端口)
2)透明代理
与传统代理服务的功能基本相同,区别于传统服务器需要设置代理IP和端口信息,而透明代理是使用默认路由、防火墙策略或web访问重定向来实现的,则不需要用户有任何设置。对于用户来说透明代理是“透明”的。使用此代理时,对于域名的解析请求(DNS)由客户机本身设置的DNS地址来解析的。(适用于共享网关上,不需要明确指定服务端)
二、Centos6.5中安装与配置squid服务
代理软件squid版本:squid-3.4.6.tar.gz
代理服务器IP:
eth1:192.168.0.103 ##连接外网的IP地址(可以上网)
eth2:192.168.1.1 ##连接内网的IP地址,就是作为内网的网关(不能上网)
客户机IP地址:192.168.1.10
网关:192.168.1.1
1、使用源代码方式安装squid代理服务和基本配置
1)、解压squid软件包
tar zxf squid-3.4.6.tar.gz -C /usr/src ##将squid软件包解压到/usr/src目录下
cd /usr/src/squid-3.4.6 ##切换到squid软件包解压到的目录来进行一下操作
2)、configure配置
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
configure的一些选项:
--prefix=/usr/local/squid ##指定安装目录
--sysconfdir=/etc ##单独指定配置文件的存放目录
--enable-arp-acl ##可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter ##使用内核过滤(和iptables一起工作)
--enable-linux-tproxy ##支持透明模式
--enable-async-io=100 ##异步I/O,替身存储性能,相当于--enable-pthreads --enable- ##storeio=ufs,aufs --with-pthreads --with-aufs-thread=值
--enable-err-language="Simplify_Chinese" ##错误信息的显示语言
--enable-underscore ##允许URL中有下划线
--enable-poll ##使用Poll()模式,替身性能(并行)
--enable-gnuregex ##使用GNU正则表达式
3)、编译;编译安装
make && make install
验证安装是否成功:
ls /usr/local/squid/
bin libexec sbin share var
4)、安装完成后、创建链接文件、创建用户和组
ln -s /usr/local/squid/sbin/* /usr/local/sbin/ ##优化执行命令(可以再PATH路径中搜索到)
useradd -M -s /sbin/nologin squid ##创建运行squid服务的用户
chown -R squid:squid /usr/local/squid/var/ ##给squid用户有权限执行
5)、添加squid服务
vi /etc/init.d/squid ##创建并编写squid服务脚本
#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - Internet Object Cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -anpt |grep squid &>/dev/null
if [ $? -eq 0 ];then
echo "squid is running"
else
echo "正在启动squid..."
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ];then
netstat -anpt |grep squid
else
echo "squid is not running."
fi
;;
restart)
$0 stop &>/dev/null
echo "正在关闭squid..."
$0 start &>/dev/null
echo "正在启动squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法: $0 {start | stop | restart | reload | check | status}"
;;
esac
:wq ##在末行模式中输入代表保存退出
chmod +x /etc/init.d/squid ##给squid服务脚本加上执行权限
chkconfig --add squid ##添加squid为系统服务
chkconfig squid on ##设置squid服务在2345运行级别中开机自启
6)、修改/etc/squid.conf文件并初始化和启动squid服务
vi /etc/squid.conf ##在最后添加如下行
visible_hostname centos ##设置安装squid的主机名
cache_effective_user squid ##这一项指定squid的程序用户,用来设置初始化,运行时缓存的账号,否则启动不成功
cache_effective_group squid ##默认为cache_effective_user指定账号的基本组
:wq ##在末行模式中输入代表保存退出
squid -k parse ##检测/etc/squid.conf中语法是否正确
squid -z ##初始化缓存目录
squid ##启动squid服务命令(把squid添加为系统服务后可以使用service命令来管理)
netstat -utpln |grep 3128 ##查看squid是否启动并监听
2、配置传统模式的代理
1)、设置/etc/squid.conf文件
vi /etc/squid.conf
http_port 3128 ##此行默认配置中已经存在,如不存在则添加此行
http_access allow all ##在http_access deny all前添加此行
reply_body_max_size 10 MB ##允许下载的最大文件大小为10MB(在结尾添加)
2)、设置iptables防火墙和重新启动squid服务
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
[iyunv@centos logs]# iptables -L -n ##查看iptables防火墙中filter表中的规则
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[iyunv@centos logs]#
重新启动squid服务并查看监听状态:
[iyunv@centos ~]# service squid restart
正在关闭squid...
正在启动squid...
[iyunv@centos ~]#
[iyunv@centos ~]# netstat -utpln |grep 3128
tcp 0 0 :::3128 :::* LISTEN 5361/(squid-1)
[iyunv@centos ~]#
3)、使用windows7客户端访问测试
使用客户机访问[url=]https://www.baidu.com和mirrors.aliyun.com网站测试[/url]:
查看access.log日志的变化:
使用squid做传统代理完成!!!
3、配置透明代理(在配置了squid传统代理基础上做配置)
注意:记着要把客户机中设置的代理取消,就是不适用任何代理来访问
centos这台服务器承担两个角色:①网关服务器 ②squid代理服务器
1)设置iptables防火墙配置SNAT使局域网可以访问internet(这里指192.168.1.0/24能够不使用代理服务器访问DNS,FTP,MAIL等;当局域网PC访问internet上的web站点(80端口)时自动使用代理,当然要进行以下的配置)
[iyunv@centos ~]# iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -p tcp ! --dport 80 -j SNAT --to-source 192.168.0.103 ##配置SNAT转换除TCP的80端口外的所有端口都转
[iyunv@centos ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p udp --dport 53 -j SNAT --to-source 192.168.0.103 ##允许DNS请求转发
[iyunv@centos ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:!80 to:192.168.0.103
SNAT udp -- 192.168.1.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.103
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[iyunv@centos ~]#
在网关上开启路由功能并添加默认路由:
vi /etc/sysctl.conf ##修改此文件的如下行的最后一位为1
net.ipv4.ip_forward = 1 ##开启ipv4路由功能
:wq
sysctl -p ##重新载入/etc/sysctl.conf的配置
route add default gw 192.168.0.1 ##添加一条默认路由
使用客户端访问测试:
2)、修改/etc/squid.conf文件使其squid执行透明代理
vi /etc/squid.conf
http_port 192.168.1.1:3128 transparent ##修改http_port 3128行(注意http_port 192.168.1.1:3128 transparent和http_port 3128不能同时存在)
:wq
service squid restart
netstat -utpln |grep 3128 ##查看squid服务的端口是否监听
3)、当局域网PC的internet中的web站点(80)端口时,自动使用代理
[iyunv@centos ~]# iptables -t nat -I PREROUTING -i eth2 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 ##将80端口映射到目标端口3128上
[iyunv@centos ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:80 redir ports 3128
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:!80 to:192.168.0.103
SNAT udp -- 192.168.1.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.103
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[iyunv@centos ~]#
4)、使用客户机访问测试
5)、针对局域网PC的internet中的web站点(配置ACL),要求如下
①:禁止下载扩展名为.3gp,.mp4,.f4v,.mkv,.rmvb,.avi;
②:超过4MB大小的文件不进行缓存,禁止下载超过100MB的文件;
③:设置网站黑名单,进行访问位于.qq.com,.msn.com域下的wen站点;
④:允许在正常上班时间(周一至周五的8:30~17:30)使用代理服务;
⑤:默认策略设为禁止任何客户机使用代理服务;
①:
修改/etc/squid.conf文件:
vi /etc/squid.conf ##以下两行注意尽量添加在比其他http_access前(因为拒绝尽量添加再最前面,这样可以节省资源也可以防止有其他allow先匹配)
acl DOWNLOAD urlpath_regex -i \.3gp$ \.mp4$ \.f4v$ \.mkv$ \.rmvb$ \.avi$ ## 以.3gp,.mp4,.mkv,.rmvb,.avi结尾的url路径
http_access deny DOWNLOAD ##调用上面一条名为DOWNLOAD的ACL并设为deny
:wq
②:
vi /etc/squid.conf
maximum_object_size_in_memory 4 MB ##操作4MB大小的文件不进行缓存
reply_body_max_size 100 MB ##禁止下载操作100MB的文件
:wq
③:
vi /etc/squid.conf ##以下两行也是尽量在其他http_access前添加
acl DOMAIN dstdomain .qq.com .msn.com ##设置目标域.qq.com和.msn.com
http_access deny DOMAIN ##调用上一条ACL名为DOMAIN并设为deny
:wq
④:
vi /etc/squid.conf
acl TIME time MTWHF 8:30-17:30 ##设置星期一至星期5的8:30-17:30的时间段
http_access deny !TIME ##除了以上设置的时间段其他时间禁止使用代理(!表示取反)
⑤:
vi /etc/squid.conf ##以下一行添加在http_access中是最后一行
http_access deny all ##设置默认策略为禁止全部客户机使用代理服务器
:wq
service squid restart
netstat -utpln |grep 3128
6)、使用客户机访问测试
①:
②:在192.168.0.0/24这个网段上搭建一台http服务(在squid服务的外网卡网段上搭建),这里就不在演示;
[iyunv@Wu-Centos-2 html]# pwd
/var/www/html ##当前路径(http服务的网页根目录)
[iyunv@Wu-Centos-2 html]# dd if=/dev/zero of=./file1.tar bs=1M count=20 ##在网页根目录中生成一个20MB的名为fitl1.tar的文件
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.108024 秒,194 MB/秒
[iyunv@Wu-Centos-2 html]# dd if=/dev/zero of=./file1.tar bs=1M count=200 ##在网页根目录中生成一个200MB的名为file2.tar的文件
记录了200+0 的读入
记录了200+0 的写出
209715200字节(210 MB)已复制,24.6213 秒,8.5 MB/秒
[iyunv@Wu-Centos-2 html]# du -sh file1.tar file2.tar ##查看两个文件的大小
20M file1.tar
200M file2.tar
[iyunv@Wu-Centos-2 html]#
使用浏览器下载测试:
③:访问qq.com和msn.com测试
④和⑤在这里不太好演示,就不演示了
透明模式的代理就配置完成了!!!
Squid 配置文件详解
# NETWORK OPTIONS(网络选项)
# -----------------------------------------------------------------------------http_port 3128 #代理端口
icp_port 3130 #icp端口
# 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#上面几个就是说遇到URL中有包含cgi-bin和以https:\\开头的都不要缓存,
#asp、cgi、php等动态脚本也不要缓存,
#https://开通的不缓存是因为一般我们进行电子商务交易,
#例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。
# OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小的选项)
# -----------------------------------------------------------------------------cache_mem 32 MB #额外使用内存量,可根据你的系统内存在设定,一般为实际内存的1/3cache_swap_low 70 #最低缓存百分比
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的目录)
# -----------------------------------------------------------------------------
# 各发行版自带的Squid略有区别,一般使用各发行版自带的设置
# <cache_dir>;<aufs|ufs>; <目录所在>; <MBytes大小>; <dir1>;<dir2>;
# 那个 aufs 只有在编译的时候加入 --enable-async-io那个选项才有支持,
# 至于目录所在地与所占用的磁盘大小则请视您的主机情况而定,
# 而后面 dir1, dir2 则是两个次目录的大小,通常 16 256 或 64 64 皆可,
# 一般来说,数字最好是 16 的倍数,据说性能会比较好啦!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服务选项
# 各发行版自带的Squid略有区别,一般使用各发行版自带的设置
# 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 port80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https,snews
acl Safe_ports port70 # gopher
acl Safe_ports port210 # wais
acl Safe_ports port 1025-65535 #unregistered ports
acl Safe_ports port280 # http-mgmt
acl Safe_ports port488 # gss-http
acl Safe_ports port591 # filemaker
acl Safe_ports port777 # multiling http
acl CONNECT method CONNECT
acl msn url_regex -i ^http://gateway.messenger.hotmail.com
acl inside1 src 192.168.1.0/24 #内部网IP段
acl inside2 src 192.168.2.0/24
acl localmac arp "/usr/local/squid/localmac" #mac地址文件# TAG: http_access
http_access allow inside1 #允许inside1规则通过
http_access allow inside2 #允许inside2规则通过
http_access allow localmac #允许localmac里面有登记的mac地址通过
http_access allow msn #允许访问http://gateway.messenger.hotmail.comacl admin arp 00:40:05:13:C4:B2
http_access allow admin #允许00:40:05:13:C4:B2这个mac地址#
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost #允许manager访问localhost
http_access denymanager #禁止manager访问
# Deny requests to unknown ports
http_access deny !Safe_ports #禁止访问不在Safe_ports里的端口
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports #禁止访问非443,563端口
#acl banned_sites url_regex"/etc/squid/banned.list"
acl worktime time MTWHF 8:30-12:00 14:00-18:00
acl mmxfile urlpath_regex -i \.mp3$ \.avi$ \.rmvb$ \.rm$ \.wma$ \.wmv$
http_access deny worktime mmxfile #禁止在worktime时间内访问.mp3,.avi,.rmvb,.rm,.wma文件
http_access deny worktime banned_sites #banned.list文件里的网址全部丢弃
http_access allow localhost #localhost可以访问#------按照网段,限制连接数
acl loc1 src192.168.1.0/24
acl loc1_conn maxconn 50
acl loc2 src 192.168.2.0/24
acl loc2_conn maxconn 30 http_access deny loc1loc1_conn
http_access allow loc1
http_access deny loc2 src loc2_conn
http_access allow loc2
#-----------------------------http_access allow localhost #localhost可以访问
http_access denyall #丢弃其他
# HTTPD-ACCELERATOR OPTIONS(HTTPD加速选项)
# -----------------------------------------------------------------------------
#设定透明代理
httpd_accel_host virtual #主机名
httpd_accel_port 80 #透明代理端口
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
|
|
|