squid

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了squid相关的知识,希望对你有一定的参考价值。

squid服务的作用
1.加快对http访问的速度
2.提高安全性
3.能够进行访问控制
代理的基本类型
? 传统代理:需要在客户机的浏览器、相关的工具上手动设置代理服务器的地址和端口,访问的网页域名也是由代理服务器进行解析的
? 透明代理:客户不需要指定代理服务器的地址和端口,而是通过网关,由防火墙的重定向策略将用户的请求交给代理服务器处理;域名解析有客户机完成
实验要求:
1.所有的局域网pc通过共享ip(ip地址为200.1.1.1)的方式接入internet,用于非web访问协议的访问(如dns,ftp,mail等等)
2.当局域网pc访问internet中的web站点(80、443端口)时,自动使用代理
3.针对局域网pc的web访问进行控制,主要要求如下。
? 禁止下载扩展名为.3pg 、.mp4、.f4v、.mkv、.rmvb、.avi的视频文件
? 超过4MB大小的文件不尽兴缓存,禁止下载超过10MB的文件
? 设置网站黑名单,禁止访问位于.qq.com、.msn.com域下的web站点
? 允许在正常的上班时间(周一到周五的8:30~17:30)使用代理服务
? 默认策略设置为禁止任何客户机使用代理服务
一、安装squid
1.解压
[[email protected] ~]# tar -zxf /mnt/squid-3.4.6.tar.gz -C /usr/src
2.配置、编译、安装
[[email protected] squid-3.4.6]# ./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
说明:

  1. --prefix:指定安装目录
  2. --sysconfdir=/etc 单独将配置文件修改到其他目录、
  3. --enable-arp-acl 可以在规划中设置直接通过客户端MAC进行管理,防止客户端使用ip欺骗
  4. --enable-linux-netfiler 使用内核过滤
  5. --enable-linux-tproxy 支持透明代理
  6. --enable-async-io=值 //异步i/o提升存储性能,相当于--enable-pthreads
  7. --enable-err-language"=Simplify_Chinese" //错误信息的显示语言
  8. --enable-underscore 允许url中有下划线
  9. --enable-poll 使用poll()模式,提升性能
  10. --enable-gnuregex 使用gnu正则表达式
    [[email protected] squid-3.4.6]# make&&make install
    3.创建连接文件、创建用户和组
    [[email protected] squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin
    [[email protected] squid-3.4.6]# useradd -M -s /sbin/nologin squid
    [[email protected] squid-3.4.6]# chown -R squid:squid /us/local/squid/var
    4.编辑squid配置文件
    [[email protected] squid-3.4.6]#vim /etc/squid.conf
    省略部分内容
    cache_effective_user squid //指定squid程序用户, 需要手工添加
    cache_effective_group squid //程序基本组账户,需要手工添加
    visible_hostname centos2.benet.com //手工添加主机名,,需要手工添加
    cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 //设置缓存目录的大小,一级子目录和二级子目录的个数(默认有此项,去点前面的#)
  11. squid的运行控制
    1)检查配置文件语法是否正确
    [[email protected] squid-3.4.6]# squid -k parse
    2)启动、停止squid
    #squid -z //-z选项用来初始化缓存目录
    [[email protected] squid-3.4.6]# cd /usr/local/vusquid/var/cache/squid/
    [[email protected] squid]# ls
    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    #squid //启动squid服务
    [[email protected] 00]# netstat -anpt|grep "squid"
    tcp 0 0 :::3128 :::* LISTEN 38412/(squid-1) #确认squid服务处于正常监听状态
    二、构建代理服务器
    (一)传统代理:需要在客户端程序中手工填写代理服务器地址,客户机可以不用填写网关地址,代理服务器需要能够进行域名解析,

1.squid服务器的配置
(1)修改squid.conf配置文件
http_access allow all //允许任意客户机使用代理服务器,放在http_access deny all前面(注意不加也可以,如果客户机地址正好时192.168.段就不用加,因为在squid.conf中有一个acl localnet src 192.168.0.0/16,http_access allow localnet)
(2)在防火墙上添加允许的策略
Sytemctl stop firewalld
(3)配置dns服务器,为web站点注册域名www.benet.com(略)
(4)在squid代理服务器上填写好dns服务器的地址(这一点特别注意,要求代理服务器本身可以解析域名)
#vim /etc/resolv.conf
nameserver 192.168.1.1
(5)重启squid代理服务
[[email protected] ~]# squid -k reconfigure
2.客户机的代理配置
(1)客户机不用填写网关和dns服务器地址,完全由squid代理解析

(2)代理服务的验证方法
①查看squid访问日志的新增记录
[[email protected] ~]# tail /usr/local/squid/var/logs/access.log
②查看web访问日志的新增记录

(注意:当客户机再次访问同一个web页面时,squid访问日志会增加新的记录,但web访问日志中的记录不会发生变化(除非页面变更或执行强制刷新等操作),这说明当客户机重复访问同一个静态页面时,实际上是由代理服务器通过缓存提供的
(二)、构建透明代理:需要在客户机填写网关和dns地址

1.基本设置
(1)先在客户机浏览器中去掉代理设置
(2)在squid上开启路由功能
#vim /etc/sysctl.conf
net.ipv4.ip_forward = 0 ----->net.ipv4.ip_forward = 1
#sysctl -p
(3)客户机和web服务器都填写好网关
route add default gw 192.168.2.1
(4)如果是在源拓扑图上改的,注意更改dns中的记录设置,并清除客户机的dns缓存
2.配置squid支持透明代理
[[email protected] ~]# vim /etc/squid.conf
http_port 3128 ---->http_port 192.168.1.1: 3128 transparent
#[[email protected] ~]# squid -k reconfigure
3.设置iptables的重定向策略,将来自局域网内192.168.1.0/24网段且访问http,https等协议的数据包交给运行在本机3128端口上的squid服务处理
[[email protected] ~]# systemctl start firewalld
[[email protected] ~]# firewall-cmd --zone=external --add-interface=ens36
[[email protected] ~# firewall-cmd --zone=internel --add-interface=ens33
[[email protected] ~]firewall-cmd --zone=external --add-service=http
[[email protected] ~]firewall-cmd --zone=external --add-service=https
[[email protected] ~]firewall-cmd --zone=external --add-port=3128/tcp
[[email protected] ~]firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens36 -p tcp --dport 80 -j REDIRECT --to-ports 3128
[[email protected] ~]firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens36 -p tcp --dport 443 -j REDIRECT --to-ports 3128
?
[[email protected] ~]
4.验证透明代理,同上(传统代理)
(三)、ACL访问控制,加上禁止192.168.1.10访问www.benet.com用于测试
ACL的作用:对代理访问进行访问控制,可以针对源地址、目标地址、访问的url路径、访问的时间等条件进行过滤
ACL配置的步骤:
? 使用acl配置项定义需要控制的条件
? 通过使用http_access配置项对已经定义的列表做"允许"或拒绝访问的控制
ACL访问控制列表的定义方法:
acl 列表名称 列表类型 列表内容(可以为多个内容,以空格分隔,为或的关系
访问权限定义方法
http-access allow或deny 列表名
说明:
? 每一条http_access规则中,可以同时包含多个控制列表,空格分隔,为与的关系
? 取反条件时,用!符号
? http_access必须放在acl之后
关于规则的执行过程:
? 找到一条规则即不再向后搜索
? 没有配置任何规则时,squid服务将拒绝客户端的请求
? 有规则但找不到相匹配的项:squid将采用与最后一条规则相反的权限
1.首先,创建一个存放域名黑名单的目录
#mkdir /etc/squid
#vim /etc/squid/dmblock.list
.qq.com
.msn.com.
....
2.修改squid配置文件
[[email protected] ~]# vim /etc/squid.conf
acl MYLAN src 192.168.1.0/24
acl MEDIAFILE urlpath_regex -i .3gp$ .mp4$ .f4v$ .mkv$ .rmvb$ .avi$
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
acl deny10 src 192.168.1.10
acl WORKTIME time MWTHF 08:30-17:30
http_access deny deny10
http_access allow MYLAN WORKTIME Safe_ports !MEDIAFILE !DMBLOCK
http_access deny all
[[email protected] ~]# squid -k reconfigure
3.将客户机ip改为192.168.1.10再访问测试,不能访问了
(1)测试不能访问网页

(2)测试能访问网页,但是不能下载超过10MB的文件
①在web服务器网页根目录下创建一个大于10M的文件
#dd if=/dev/zero of=/var/www/html/dltest.data bs=1M count=15
②在squid代理服务器上编辑配置文件,加上如下行
#vim /etc/squid.conf
reply_body_max_size 10 MB
③在客户机上测试

(四)squid日志分析
1.先在squid本地挂载centos光盘并配置yum
2.安装GD库
#yum -y install gd gd-devel
3安装sarg软件,挂载sarg光盘
[[email protected] sarg-2.3.7]# tar zxf /mnt/sarg-2.3.7.tar.gz -C /usr/src
[[email protected] sarg-2.3.7]# cd /usr/src/sarg
[[email protected] sarg-2.3.7]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
说明:
--enable-extraprotection //添加额外的安全保护
[[email protected] sarg-2.3.7]# make&&make install
4.配置 (找到如下行修改就可以)
#vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/logs/access.log //指定squid的访问日志文件
Especify the title for html page.
title "Squid User Access Reports" //网页标题
output_dir /var/www/html/sarg //sarg报告的输出目录
user_ip no //使用用户名显示
topuser_sort_field connect reverse BYTES reverse //在top排序中国,指定连接次数、访问字节数,采用降序排列,升序将reverse换成normal
user_sort_field connect reverse //对于用户访问记录,连接次数按降序排列
exclude_hosts /usr/local/sarg/noreport //指定不计入排序的站点列表文件
overwrite_report no //当那个日期报告已经存在,是否覆盖报告
mail_utility mailq.postfix //发送邮件报告的命令
charset UTF-8 //使用字符集
weekdays 0-6 //指定top排序时的星期周期,0为周日
The hours to take into account
hours 9-12,14-16,18-20 //指定top排序时的时间周期
www_document_root /var/www/html //网页根目录
4.运行
上述配置中,添加了不计入排序的站点,需要存在下面这个文件
touch /usr/local/sarg/noreport
建议建立符号链接
#ln -s /usr/local/sarg/bin/sarg /usr/local/bin
直接执行sarg
#sarg
5.验证,在客户机访问

以上是关于squid的主要内容,如果未能解决你的问题,请参考以下文章

Squid代理服务器

配置Squid代理服务器

构建Squid传统代理及透明代理