介绍
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
作用:
1、缓存数据,提高访问速度
2、设置ACL(访问控制列表),控制内网用户的访问行为
软件:
Nginx
Squid
Varnish
代理的类型:
普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;
反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
配置
Squid 主要组成部分
服务名:squid
主程序:/usr/sbin/squid
配置目录:/etc/squid
主配文件:/etc/squid/squid.conf
监听tcp端口号:3128
默认访问日志文件:/var/log/squid/access.log
squid 常用配置选项(/etc/squid/squid.conf)
http_port 3128 (还可以只监听一个一个ip http_port 192.168.0.1:3128)
cache_mem 64MB#缓存占内存大小
//额外提供给squid使用的内存,squid的内存总占用为 X*10+15+“cache_mem”,其中X为squid的cache占用的容量(以GB为单位)
maximum_object_size 4096KB#最大缓存块
minimum_object_size 0 KB //设置squid磁盘缓存最小文件
maximum_object_size_in_memory 4096 KB //设置squid内存缓存最大文件,超过4M的文件不保存到内存
reply_body_max_size 1024000 allow all #限定下载文件大小
logformat combined %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %<st “%{Referer}>h” “%{User-Agent}>h” %Ss:%Sh //log文件日志格式
access_log /var/log/squid/access.log combined //log文件存放路径和日志格式
visible_hostname proxy.test.xom #可见的主机名
cache_dir ufs /var/spool/squid 100 16 256 usf:缓存数据的存储格式
/var/spool/squid 缓存目录
100 : 缓存目录占磁盘空间大小(M)
16 :缓存空间一级子目录个数
256 :缓存空间二级子目录个数
cache_log /var/log/squid/cache.log //设置缓存日志
logfile_rotate 60 //log轮转60天
cache_swap_high 95 //cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90 //cache目录清理到90%时停止。
acl localnet src 192.168.87.1/24 //定义本地网段
http_access allow localnet //允许本地网段使用
http_access deny all //拒绝所有
visible_hostname squid.david.dev //主机名
cache_mgr 472732787@qq.com //管理员邮箱
管理
初始化缓存目录
squid -z
设置开启启动
# chkconfig squid on
# chkconfig --list squid
启动
# service squid start
重新加载
# service squid restart
重启
# service squid start
查看
netstat -antp | grep :3128
正向代理-普通代理
所有客户端必须手工指定代理服务器IP及端口
/etc/squid/squid.conf
http_port 3128
cache_mem 64 MB
maximum_object_size 4 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log
acl localnet src 192.168.87.1/24
http_access allow localnet
http_access deny all
visible_hostname squid.linux.com
测试 :在10.1.1.10主机 上访问的是 http://192.168.87.102
正向代理-透明代理
客户端不需要指定代理服务器IP及端口,但需要配置网关
http_port 3128 transparent
启用防火墙
service iptables start
清空已有规则
iptables -F
查看
iptables -nL
iptables -t nat -nL
防火墙规则:
iptables -t nat -A PREROUTING -s 10.1.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
保存
# /etc/init.d/iptables save
ptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
客户端(默认网管)
ACL
(1) 禁止IP地址为192.168.16.200的客户机上网
acl test src 192.168.16.200
http_access deny test
(2) 禁止192.168.1.0这个网段里的所有客户机上网
acl test src 192.168.1.0/255.255.255.0
//acl test src 192.168.1.0/24
//acl test src 0/0 所有地址
http_access deny test
(3) 禁止用户访问IP为210.21.118.68的网站
acl test dst 210.21.118.68
http_access deny test
(4) 禁止用户访问域名为www.163.com的网站
acl test dstdomain –i www.163.com -i: 忽略大小写
http_access deny test
(5) 禁止用户访问域名包含有163.com的网站
acl test url_regex –i 163.com >>>使用正则表达式匹配URL地址
http_access deny test
(6) 禁止用户访问包含有sex关键字的URL
acl test url_regex –i sex
http_access deny test
(7) 禁止192.168.2.0这个子网里所以客户机在周一至周五的9点到18点上网
acl test1 src 192.168.2.0 /255.255.255.0
acl test2 time MTWHF 9:00-18:00
http_access deny test1 test2
时间列表:
Code Day
S Sunday
M Monday
T Tuesday
W Wednesday
H Thursday
F Friday
A Saturday
D All weekdays (M-F)
(8) 禁止用户下载*.mp3,*.exe,*.zip,*.rar
acl test urlpath_regex –i \.mp3$\.exe$\.zip$\.rar$ urlpath_regex:正则表达式匹配URI地址
http_access deny test
注意:
http_access deny的行为要写在allow的上方
反向代理
vim /etc/squid/squid.conf
http_port 80 accel vhost
http_access allow all
cache_peer 192.168.87.102 parent 80 0 originserver round-robin weight=1
cache_peer 192.168.87.103 parent 80 0 originserver round-robin weight=1
visible_hostname squid.linux.com
测试 :在10.1.1.10主机 上访问的是 http:// 10.1.1.101