一、squid代理
1、代理的作用和代理的方式
1)代理的作用
缓存用户数据
隐藏代理内部网络
加快用户访问资源速度
2)代理的方式
应用防火墙
硬件防火墙
squid代理软件
2、squid缓存原理
当客户机通过代理来请求Web页面
指定的代理服务器会先检查自己的缓存
如果缓存中已经有客户机需要的页面
则直接将资源内容反馈到客户机
如果缓存中没有客户机要访问的页面
则由代理服务器向internet发送访问请求
获得返回的Web页面以后
代理服务器将页面数据保存到缓存中并发送到客户机
3、代理的基本类型
1)传统代理
需要管理员手动配置代理服务器的IP地址和端口号
适合小型企业网络使用
2)透明代理
需要将访问目标端口映射到代理服务器端口上
适合大型企业网络使用
减少管理员工作量
二、安装配置squid代理服务器
1)准备工作
第一台centos01模拟内网客户端
第二台centos02模拟squid代理服务器
传统代理一块网卡
透明代理二块网卡
第三台centos03模拟外网Web服务器
需要安装apache
2)创建管理squid账户
[root@centos02 ~]# useradd -M -s /sbin/nologin squid
3)准备squid软件包
切换到Linux.iso镜像,挂载光盘
[root@centos02 ~]# mount /dev/cdrom /mnt/
解压squid软件包
[root@centos02 ~]# tar zxf /mnt/squid-3.4.6.tar.gz -C /usr/src/
4)配置suqid
[root@centos02 ~]# cd /usr/src/squid-3.4.6/
./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-async-io=240 --enable-default-err-languge=Simplify_Chinese --disable-poll --enable-epoll --enable-gunregex
--prefix=/usr/local/squid //安装目录
--sysconfdir=/etc/ //单独将配置文件修改到其他目录
--enable-linux-netfilter //使用内核过滤
--enable-async-io=240 //异步I/O,提升存储性能
--enable-default-err-languge=Simplify_Chinese //错误信息的显示语言
--disable-poll //关闭默认使用的poll模式
--enable-epoll //开启epoll模式提升性能
--enable-gunregex //使用GNU正则表达式
5)编译安装squid
[root@centos02 squid-3.4.6]# make && make install
6)优化squid命令
[root@centos02 squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
7)创建squid日志文件
[root@centos02 ~]# touch /usr/local/squid/var/logs/cache.log
8)修改squid目录所有者
[root@centos02 ~]# chown -R squid:squid /usr/local/squid/
三、squid服务控制
1)检查squid配置文件是否错误
[root@centos02 ~]# squid -k parse
2)初始化缓存
[root@centos02 ~]# squid -z
3)启动服务
[root@centos02 ~]# squid
4)关闭服务
[root@centos02 ~]# killall squid
四、配置传统代理
1、配置squid服务器
1)修改squid主配置文件
[root@centos02 ~]# vim /etc/squid.conf
54 http_access allow all //允许所有人使用squid
60 http_port 3128 //监听端口号
61 cache_effective_user squid //管理用户
62 cache_effective_group squid //管理组
63 reply_body_max_size 10 MB //不允许下载超过10M文件
2)检查squid配置文件是否错误
[root@centos02 ~]# squid -k parse
3)初始化缓存
[root@centos02 ~]# squid -z
4)启动服务
[root@centos02 ~]# squid
5)监听端口
[root@centos02 ~]# netstat -anptu | grep 3128
2、配置外网Web服务器
1)挂载光盘,安装apache依赖软件
[root@centos03 ~]# yum -y install apr-* pcre-* lynx
2)切换到Linux.iso镜像,挂载光盘
[root@centos03 ~]# mount /dev/cdrom /mnt/
3)解压squid软件包
[root@centos03 ~]# tar zxf /mnt/httpd-2.2.17.tar.gz -C /usr/src/
4)写一个自动编译安装httpd的脚本并运行
[root@centos03 ~]vim ./installhttpd.sh
#!/bin/bash
cd /usr/src/httpd-2.2.17/
./configure --prefix=/usr/local/httpd --enable-so --enable-charset-lite --enable-rewrite --enable-cgi
make && make install
ln -s /usr/local/httpd/bin/* /usr/local/bin/
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
chmod +x /etc/init.d/httpd
echo "#chkconfig:35 80 21" >> /etc/init.d/httpd
chkconfig --add httpd
chkconfig --level 35 httpd on
cp /usr/local/httpd/conf/httpd.conf /usr/local/httpd/conf/httpd_conf.bak
[root@centos03 ~]chmod +x ./installhttpd.sh
5)[root@centos03 ~]# sh ./installhttpd.sh &> /dev/null
6)更改apache主页和测试文件
[root@centos03 ~]# echo "www.squid.com" > /usr/local/httpd/htdocs/index.html
[root@centos03 ~]# dd if=/dev/zero of=/usr/local/httpd/htdocs/1.iso bs=1M count=8
[root@centos03 ~]# dd if=/dev/zero of=/usr/local/httpd/htdocs/2.iso bs=1M count=12
7)修改监听域名,以防启动报错
[root@centos03 ~]# vim /usr/local/httpd/conf/httpd.conf
#ServerName www.example.com:80
ServerName *:80
8)启动apache服务
[root@centos03 ~]# systemctl start httpd
9)检测apache服务是否启动
[root@centos03 ~]# netstat -anptu | grep 80
3、配置客户端
1)windows客户端启用squid代理
浏览器-internet选项-连接-局域网设置-指定suqid服务器ip地址和端口
2)Linux客户端启用代理
[root@centos01 ~]# vim /etc/profile
HTTP_PROXY=http://192.168.100.20:3128 //http协议走代理
HTTPS_PROXY=https://192.168.100.20:3128 //https协议走代理
FTP_PROXY=ftp://192.168.100.20:3128 //ftp协议走代理
NO_Proxy=192.168.200.0/24 //不走代理
export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_Proxy
[root@centos01 ~]# source /etc/profile
3)安装测试工具elinks软件
挂载系统光盘
[root@centos01 ~]# mount /dev/cdrom /mnt/
安装elinks
[root@centos01 ~]# yum -y install elinks
使用elinks软件访问apache
[root@centos01 ~]# elinks 192.168.100.30
4)代理服务的验证方法
查看squid访问日志新增记录
[root@centos02 ~]# tail -f /usr/local/squid/var/logs/access.log
查看Web访问日志新增记录
[root@centos03 ~]# tail -f /usr/local/httpd/logs/access_log
五、配置透明代理
1、配置suqid环境网络
1)将内网客户端网关指向squid服务器
[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
GATEWAY=192.168.100.10
2)配置squid服务器网络两块网卡
[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.100.20
NETMASK=255.255.255.0
DEFROUTE=yes
NAME=ens32
DEVICE=ens32
ONBOOT=yes
[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.200.20
NETMASK=255.255.255.0
DEFROUTE=yes
NAME=ens34
DEVICE=ens34
ONBOOT=yes
3)配置外网Web服务器网络网关指向squid服务器
[root@centos02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
GATEWAY=192.168.200.20
2、配置squid服务器
1)开启路由转发
[root@centos02 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
验证路由转发是否开启
[root@centos02 ~]# sysctl -p
2)挂载系统盘,安装防火墙iptables
[root@centos02 ~]# mount /dev/cdrom /mnt/
[root@centos02 ~]# yum -y install iptables-services
3)清空防火墙规则并保存
[root@centos02 ~]# iptables -F //清空默认规则
[root@centos02 ~]# iptables -L //查看规则
[root@centos02 ~]# iptables-save //保存
4)配置防火墙映射规则
[root@centos02 ~]# iptables -t nat -I PREROUTING -i ens32 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
5)查看nat表防火墙规则
[root@centos02 ~]# iptables -t nat -L -n
6)修改squid主配置文件支持透明代理
[root@centos02 ~]# vim /etc/squid.conf
http_port 3128 transparent
7)启动squid服务
检查squid配置文件是否错误
[root@centos02 ~]# squid -k parse
初始化缓存
[root@centos02 ~]# squid -z
启动服务
[root@centos02 ~]# squid
监听端口
[root@centos02 ~]# netstat -anptu | grep 3128
8)验证透明代理的使用
[root@centos02 ~]# unset HTTP_PROXY HTTPS_PROXY
9)centos7透明代理防火墙设置
firewall-cmd --zone=external --add-interface=ens37
firewall-cmd --zone=internal --add-interface=ens33
firewall-cmd --zone=external --add-service=http
firewall-cmd --zone=external --add-service=https
firewall-cmd --zone=external --add-port=3128/tcp
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 80 -j REDIRECT --to-ports 3128
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 443 -j REDIRECT --to-ports 3128
firewall-cmd --runtime-to-permanent
3、配置Linux内网客户端
1)注释掉环境变量,使其不走代理
[root@centos01 ~]# vim /etc/profile
#HTTP_PROXY=http://192.168.100.20:3128 //http协议走代理
#HTTPS_PROXY=https://192.168.100.20:3128 //https协议走代理
#FTP_PROXY=ftp://192.168.100.20:3128 //ftp协议走代理
#NO_Proxy=192.168.200.0/24 //不走代理
#export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_Proxy
[root@centos01 ~]# source /etc/profile
2)重启客户端
[root@centos01 ~]# reboot
3)代理服务的验证方法
查看squid访问日志新增记录
[root@centos02 ~]# tail -f /usr/local/squid/var/logs/access.log
查看Web访问日志新增记录
[root@centos03 ~]# tail -f /usr/local/httpd/logs/access_log
六、ACL访问控制定义
定义格式:
acl 列表名称 列表类型 列表内容
列表名称 管理员自行定义
列表类型 必须使用squid预定义的值,对应不同类别的控制条件
列表内容 是要控制的对象,不同类型的列表对应的内容也不一样,可以有多个值(以空格分隔,为"或"的关系)
example:控制源ip网段
acl mylan src 192.168.1.0/24 192.168.4.0/24
常用的ACL列表类型
src 源地址 192.168.1.1 192.168.2.0/24
dst 目标地址 192.168.1.0/24 www.baidu.com
port 目标端口 80 443
dstdomain 目标域 .qq.com .163.com
time 访问时间 12:00-13:00 MTWHFAS(1-7) //示例:acl WORKTIME time MTWHF 08:00-17:30
maxconn 最大并发连接 20
url_regex 目标URL地址 -i 忽略大小写 url_regex -i ^rtsp://
urlpath_regex 主机名后面的部分 -i 忽略大小写 urlpath_regex -i sex adult urlpath_regex -i \.mp3$
http_access allow 列表名1 列表名2 //对acl进行允许
http_access deny 列表名1 列表名2 //对acl进行拒绝
acl other dstdomain "/etc/squid/dmblock.list" //当需要控制的选项多时可以引入配置文件,配置文件中写入需要禁止的选项。
http_access deny other
规则匹配原理
没有设置任何规则时,squid服务将拒绝客户端的请求。
有规则但找不到匹配的项时,squid将采用与最后一条规则相反的权限。
七、Squid日志分析
1、安装GD库
yum -y install gd gd-devel
2、安装SARG
tar xf /mnt/sarg-2.3.7.tar.gz -C /usr/src/
cd /usr/src/sarg-2.3.7/
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection && make && make install
--sysconfdir=/etc/sarg //配置文件目录(默认/usr/local/etc)
--enable-extraprotection //添加额外的安全保护
3、修改配置文件
vim /etc/sarg/sarg.conf
7 access_log /usr/local/squid/var/logs/access.log //指定squid的访问日志文件
25 title "Squid User Access Reports" //网页标题
120 output_dir /var/www/html/squid-reports //sarg报告的输出目录
178 user_ip no //使用用户名显示
184 topuser_sort_field BYTES reverse //在top中排序,指定连接次数,采用降序排列,升序将revers换成normal
190 user_sort_field connect reverse //对于用户访问记录,连接次数按降序排列
206 exclude_hosts /usr/local/sarg/noreport //指定不计入排序的站点列表文件
257 overwrite_report no //对那个日期报告已经存在,是否覆盖报告
289 mail_utility mailx //发送邮件报告的命令
434 charset UTF-8 //使用字符集
518 weekdays 0-6 //指定top排序时的星期间隔,0为周日
523 hours 9-12,14-16,18-20 //指定top排序时的时间周期
633 www_document_root /var/www/html //网页根目录
touch /usr/local/sarg/noreport //添加不计入排序的站点
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/ //优化服务命令
sarg //启动一次记录
yum -y install httpd
systemctl restart httpd
systemctl enable httpd
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-service=http
systemctl restart firewalld
firewall-cmd --list-all
reboot
客户端访问 http://192.168.100.10/squid-reports
八、创建squid服务控制脚本
vim /etc/init.d/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 is starting !"
$CMD
fi
;;
stop)
$CMD -k kill $> /dev/null
rm -rf $PID $> /dev/null
echo "Squid is stop !"
;;
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 is stoping !"
$0 start &> /dev/null
echo "Squid is starting !"
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "Exampel:{ start | stop | restart | reload | check | status }"
;;
esac
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig squid on