一、squid服务基础
1.缓存代理概念
作为应用层的代理服务软件,squid主要提供缓存加速和应用层过滤(ACL)的功能
2.代理的基本类型
1)传统代理:必须在客户机手动设置代理服务器的地址和端口,才能使用代理服务器访问网络
2)透明代理:客户机不需要手动指定代理服务器的地址和端口,而是通过网关服务器将web访问重定向,实际上仍然交给代理服务器处理
二、安装squid
1. 解压
tar zxf squid-3.4.6.tar.gz -C /usr/src
2.配置(需要gcc、gcc-c++、cmake,使用yum安装即可)
./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
选项及解释
--prefix:安装路径
--sysconfdir:配置文件的目录
--enable-arp-acl:这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗
--enable-linux-netfilter:使用内核过滤
--enable-linux-tproxy :支持透明模式
--enable-async-io:异步IO,提升存储性能
--enable-err-language:错误信息的显示语言
--enable--underscore:允许URL中有下划线
--enable-poll:使用poll()模式,提升性能
--enable-gnuregex:使用GNU正则表达式
3.创建连接路径、用户和组
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var
4.修改squid的配置文件
vim /etc/squid.conf
添加:
cache_effective_user squid #指定程序用户,用来设置初始化、运行时的账号,否则启动不成功
cache_effective_group squid #指定账号的基本组
5.squid运行控制
1)检查配置文件的语法
squid -k parse
2)初始化(必须停止程序、缓存目录为空)
squid -z
3)启动
squid
4)编写squid服务控制脚本
三、构建代理服务器
1.传统代理
1)修改配置文件
vim /etc/squid.conf
将"http_access deny localhost"改为"http_access allow localhost"
也可以将"http_access allow localhost`放在"http_access deny localhost"之前
2)添加防火墙策略
iptables -t filter -I INPUT -p tcp --dport 3128 -j ACCEPT
iptables -t filter -I INPUT -p tcp --sport 3128 -j ACCEPT
3)在客户机的浏览器中修改代理
ip:squid服务器ip,端口:3128
4)建立一个用来测试的网站服务器,并有客户机访问
5)查看网站服务器的日志,看是否是有代理服务器的ip来访问的
添加代理前
添加代理后
6)linux的客户机设置代理
vim /etc/profile
HTTP_PROXY=http://192.168.1.2:3128 #为使用HTTP协议指定代理
HTTPS_PROXY=http://192.168.1.2:3128 #为使用HTTPS协议指定代理
FTP_PROXY=http://192.168.1.2:3128 #为使用FTP协议使用代理
NO_PROXY=192.168.1.,192.168.2. #不使用代理的网段
export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY
source /etc/profile
2.透明代理(安装在网关服务器上)
1)修改配置文件
vim /etc/squid.conf
修改"http_port"为"httpd_port 192.168.1.1:3128 transparent"
#需要提供代理的网段或ip
2)设置防火墙重定向策略
iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #内网网卡
iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
#将http和https交由代理
保存防火墙规则
service iptables save
三、ACL访问控制
1.定义访问控制列表
在配置文件中,每一行配置可以定义一条访问控制列表
语法:
acl 列表名称 列表类型 列表内容
#列表名称由管理员自己定义
例:
acl localnet src 127.0.0.1/255.255.255.255 #源地址为127.0.0.1
acl MYLAN src 192.168.1.0/24 # 客户机网段
acl to_localhost dst 127.0.0.1/8 # 目标地址为127.0.0.1/8网段
acl MC20 maxconn 20 # 最大并发连接20
acl BlackURL url_regex -i ^rtsp:// # 以rtsp开头的url
acl YINYUE urlpath_regex -i \.mp3$ \.rmvb$ #以这些结尾的URL路径
acl TIME time MTWHF 8:30-17:30 #时间为周一到周五的8:30-17:30
2.当限制的同一类对象较多时,可以使用独立文件来存放,在ACL配置行的列表内容除指定对应的文件位置即可
例:
acl IPBLOCK dst "/etc/squid/ipblock.list"
3.设置访问权限
定义好访问控制列表后,需要使用httpd_access配置项来控制,每一行httpd_access配置确定一条访问控制规则
语法:
httpd_access allow/deny 列表名
例:
httpd_access deny MYLAN YINYUE #禁止客户机下载MP3、MP4文件
httpd_access deny MYLAN MC20 #客户机的并发连接达到20是将被阻止
4.没有设置任何规则时,默认拒绝客户端的请求
四、squid日志分析
1.安装日志分析软件sarg
1)安装GD库
yum -y install gd gd-devel
2)安装sarg
创建安装目录
mkdir /usr/local/sarg
解压
配置
./configure --prefix= /usr/local/sarg -sysconfdir=/etc/sarg --enable-extraprotection
#-sysconfdir:配置文件目录
#--enable-extraprotection:添加额外的安全保护
安装
make && make install
3)修改配置文件
vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/access.log/ #指定squid的访问日志文件
title "Squid User Access Reports" #网页标题
output_dir /var/www/html/sarg #sarg报告的输出目录
user_ip no #使用用户名显示
exclude_ hosts /usr/local/sarg/noreport #指定不计入排序的站点列表文件
top user_sort_ field connect BYTES reverse #在top排序中,指定连接次数、访问字节数,采用降序排列,升序将reverse换成normal
user_sort_field connect reverse #对于用户访问记录,连接次数按降序排列
overwrite report no #当那个日期报告已经存在,是否覆盖报告
mail_utility mailq.postfix #发送邮件报告的命令
charset UTF-8 #使用字符集
weekdays 0-6 #指定top排序时的星期周期,0为周日
hours 9-12,14-16,18-20 #指定top排序时的时间周期
www_document_root /var/www/html #网页根目录
上述配置中添加了不计入排序的站点,需要存在下面这个文件
touch /usr/local/sarg/noreport
4)启动
sarg
可以在配置文件中设置字体、颜色等信息方便查询。多次执行sarg后,在客户端访问sarg/目录,可以看到生成的报表
5)计划任务
编写脚本
vim /usr/local/sarg/daily.sh
#/bin/bash
TODAY=$(date +%d/%M/%Y)
#Get one week ago today
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0
给脚本添加执行权限
chmod +x /usr/local/sarg/daily.sh
创建计划任务
crontab -e
00 00 * * * /usr/local/sarg/daily.sh
将计划任务设为开机启动
chkconfig crond on