目录
代理
常见的代理软件
web 代理的功能
squid 代理的基本类型
传统代理配置:
1.添加双网卡,并配置 IP 地址
2.启用路由转发
3.解压并安装 squid 软件(需要先将squid软件包拖进去)
4.创建用户并优化服务
5.检查语法并启动
6、配置传统代理
7、客户端设置代理(桥接网卡,与代理第二块网卡对应,IP地址192.168.2.2)
透明代理配置:
6. 配置文件
7. 重启服务
8. 配置防火墙规则
我们还可以通过acl拒绝指定列表中的 IP 和域名访问
Squid日志分析
-
代理
通过第三方软件或机构,实现客户端对指定服务的访问任务
-
常见的代理软件
Windows 系统:ccproxy(具有防火墙功能) ISA2006 防火墙(有代理功能) Linux 系统:squid
-
web 代理的功能
- 将局域网的主机保护起来
- 对网站的内容进行缓存,加快客户端的访问速度,减少网络流量
- 静态页面的站点越来越少,可缓存的内容也变少,数据库中的信息不能被缓存
-
squid 代理的基本类型
- 传统代理:客户端不需要配置网关,只需要设置浏览器的配置,代理服务器对客户端的访问 控制能力强缺点:有部分应用程序无法被代理
- 透明代理:客户端不用配置浏览器,正常配置网络信息,代理服务器对客户端的访问控制能 力相对较弱优点:绝大部分的应用程序都能被代理应用
- 反向代理:外网客户端给代理服务器发送访问请求后,由代理服务器判断将请求转发给那个 web 节点
传统代理配置:
1.添加双网卡,并配置 IP 地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
//切换至存放网卡目录
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
//将第一块网卡ens33复制下来,复制一个新网卡命名为ens37(固定为ens37)不许更改
[root@localhost network-scripts]# vim ifcfg-ens33
//编辑网卡配置文件,第一块网卡IP为192.168.1.2
[root@localhost network-scripts]# vim ifcfg-ens37
//注意:此网卡信息需要更改,删掉 UUID、修改 NAME 和 DEVICE为ens37
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# systemctl stop firewalld
[root@localhost network-scripts]# setenforce 0
[root@localhost network-scripts]# ifconfig
//查看网卡信息两块网卡IP地址是否生效
[root@localhost network-scripts]# cd
2.启用路由转发
启动路由转发有两种
第一种临时启用:
[root@localhost ~]# echo "1"> /proc/sys/net/ipv4/ip_forward
//重启跟网络相关的服务就会失效所以不建议使用,建议使用第二种永久启用
第二种永久启用:
[root@localhost ~]# vim /etc/sysctl.conf
添加:
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
//重启加载内核配置参数
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
//输入此命令验证一下,如果正确则会返回一个1
3.解压并安装 squid 软件(需要先将squid软件包拖进去)
[root@localhost ~]# ll
//查看下文件是否损坏
[root@localhost ~]# tar -zxvf squid-3.5.23.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/squid-3.5.23/
[root@localhost squid-3.5.23]# cd
//这一步返回/目录是没有开发环境,无法用./编译配置安装
需要使用yum安装gcc和c++编译工具
[root@localhost ~]# mount /dev/cdrom /media/
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[root@localhost ~]# yum -y install gcc*
[root@localhost ~]# cd /usr/src/squid-3.5.23/
[root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linuxnetfilter --enable-async-io=240 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gnuregex
//安装完成后进行编译配置
--prefix=/usr/local/squid 指定安装路径
--sysconfdir=/etc 指定配置文件路径
--enable-arp-acl启用 arp 控制列表
--enable-linux-netfilter启用内核包过滤功能
--enable-async-io=240启用设备异步 I/O 功能
--enable-default-err-language=Simplify_Chinese错误日志的默认语言类型
--disable-poll关闭 poll 布尔运算
--enable-epoll启用扩展 poll 布尔运算
--enable-gnuregex支持 gnu 正则表达式
[root@localhost squid-3.5.23]# make && make install
//安装
4.创建用户并优化服务
[root@localhost ~]# useradd -M -s /sbin/nologin squid
[root@localhost ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost ~]# chown -R squid:squid /usr/local/squid/var/
[root@localhost ~]# chmod -R 757 /usr/local/squid/var/
5.检查语法并启动
[root@localhost ~]# squid -k parse
//验证语法,可以选择忽略不输入此条
[root@localhost ~]# squid -z
//初始化,必须输入,出现下图三行即为正确
[root@localhost ~]# squid
//启动服务
[root@localhost ~]# netstat -anpt | grep squid
//查看服务进程,建议查看
6、配置传统代理
[root@localhost ~]# vim /etc/squid.conf
添加修改:
在http_access allow localnet
http_access allow localhost下面添加
acl net1 src 192.168.1.2(本机第一块网卡IP)
acl net2 src 192.168.1.1(web服务器IP)
访问策略
acl:访问控制列表
acl 列表名称 选项 值
选项:
src源 IP 地址
dst目标 IP 地址
port目标端口号
dstdomain目标域
time访问时间
maxconn最大连接数
url_regex目标URL 地址
Urlpath_regex整个目标 URL 路径
然后将cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256注释取消掉
//启用缓存列表
[root@localhost ~]# cd /usr/local/squid/var/cache/squid/
//可以先切换至此目录查看一下,是没有任何东西的
然后重启Squid 服务
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid
重启完成后进入目录初始化
[root@localhost squid]# squid -z
//初始化命令回车后会卡住,直接回车即可
Ls查看一下,查看到这些目录即可
7、客户端设置代理(桥接网卡,与代理第二块网卡对应,IP地址192.168.2.2)
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
打开火狐浏览器展开右上角点击首选项
打开之后点击高级,点击网络,再点击右上角设置
打开设置之后选择手动配置代理,http代理服务器为代理第二块网卡IP,端口号为3128
更改完保存退出即可
打开一台web服务器,没有用yum搭建一台进行验证(网卡与代理第一块桥接,IP为1.1)
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
[root@localhost ~]# mount /dev/cdrom /media/
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
最后用客户机访问web服务器进行验证
[root@localhost ~]# firefox http://192.168.1.1
透明代理配置:
透明代理提供的服务功能与传统代理是一致的,但是其“透明”的实现依赖于默认路由和防火 墙的重定向策略,因此更适用于为局域网主机服务,而不适合为 Internet 中的客户机提供服务。透明代理的关键在于 Linux 网关服务器,而对于客户机仅需正确设置网络地址、默认网关,而并不需要指 定代理服务器(若指定了反而易出错)。关于客户机的 DNS 解析工作,最好还是通过正常的 DNS 服 务器来提供,不建议抛给代理服务器来处理。
1-5配置一样
从这里开始以下配置发生了变化
6. 配置文件
[root@localhost ~]# vim /etc/squid.conf
修改:
将http_port 3128修改为http_port 3128 transparent
//添加透明代理模式
7. 重启服务
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid
//其实到此段落透明代理已经完成,但是我们可以进行配置防火墙规则进行拦截放行流量
[root@localhost ~]# setenforce 0
8. 配置防火墙规则
[root@localhost ~]# systemctl start firewalld
//首先开启一下防火墙
[root@localhost ~]# firewall-cmd --zone=internal --add-interface=ens33
//然后将ens33这块网卡添加到internal(内网)区域
[root@localhost ~]# firewall-cmd --zone=external --add-interface=ens37
//然后将ens33这块网卡添加到external(外网)区域
[root@localhost ~]# firewall-cmd --zone=external --add-service=http
//在external中添加服务和端口
[root@localhost ~]# firewall-cmd --zone=external --add-service=https
//在external中添加服务和端口
[root@localhost ~]# firewall-cmd --zone=external --add-port=3128/tcp
//在external中添加服务和端口
//出现success便是成功,如果出现红色error或者running是可能策略已经配置过或者防火墙没开启,检查一下防火墙
使用富语言编写目标端口转换,将 80 和 443 转换为 3128
由于我们主配置文件添加的透明代理是3128端口,但是http使用的是80端口
而https是443端口,所以我们需要进行端口转换
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 80 -j REDIRECT --to-ports 3128
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 443 -j REDIRECT --to-ports 3128
同样出现success即是成功
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid //重启一下服务
验证(还是基于昨天的http服务器和客户机,IP地址不变)
注意:要给网关!http服务器和客户机的网关要指向代理对应的网卡!
客户端对应2.1,http对应1.2
客户机和http服务器要关闭防火墙,但是代理不需要,因为我们已经配置过防火墙规则
客户机访问http服务器
如果此处访问连接错误就关闭再开启代理的防火墙,重新定义一下防火墙规则
我们还可以通过acl拒绝指定列表中的 IP 和域名访问
首先编辑一个地址列表(代理上操作)
[root@localhost ~]# vim /etc/iplist
//此列表添加的地址是拒绝访问的
添加:
192.168.2.2
192.168.2.3
再编辑一个域名列表
[root@localhost ~]# vim /etc/dnslist
//此列表添加的域名也是拒绝访问的
添加:
.sohu.com
.baidu.com
然后编辑一下主配置文件
[root@localhost ~]# vim /etc/squid.conf
在开头添加:(必须是开头)
acl haha src "/etc/iplist"
//定义一个acl,名字为haha,源地址调用/etc/iplist列表
acl hehe dstdomain "/etc/dnslist"
//定义一个acl,名字为hehe,域名调用/etc/dnslist列表
http_access deny haha
//拒绝haha访问,也就是拒绝iplist列表里的地址访问
http_access deny hehe
//拒绝hehe访问,也就是拒绝dnslist列表里的域名访问
//开头这个位置
记得重启一下服务
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid
最后用客户机访问http进行验证
如果访问到了就清除一下网页缓存然后重新访问
右上角首选项高级,网络,两个立即清除
重新访问
[root@localhost ~]# firefox http://192.168.1.1
//访问错误,因为我们设置了192.168.2.2地址不允许访问(客户机IP地址)
要想访问上,客户机换个IP地址即可(不是iplist列表里的地址)
接下来更换一下IP地址进行访问尝试(换成了192.168.2.8)
[root@localhost ~]# firefox http://192.168.1.1
//访问成功
Squid日志分析
前提条件:必须安装squid的软件
[root@localhost ~]# mount /dev/cdrom /media/
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[root@localhost ~]# yum -y install gcc*
[root@localhost ~]#yum -y install gd gd-devel
[root@localhost ~]#mkdir /usr/local/sarg
[root@localhost ~]#tar -zxvf /sarg-2.3.7.tar.gz -C /usr/src
[root@localhost ~]#cd /usr/src/sarg-2.3.7/
[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg -sysconfdir=/etc/sarg --enable-extraprotection && make && make install
[root@localhost ~]#cd /etc/sarg
[root@localhost sarg]#vim sarg.conf
access_log /usr/local/squid/var/logs/access.log --指定squid的访问日志文件7
title "Squid User Access Reports" --网页标题25
output_dir /var/www/html/sarg --sarg报告的输出目录 120
user_ip no --使用用户名显示178
#exclude hosts /usr/local/sarg/noreport --指定不计入排序的站点列表文件
topuser_sort_field BYTES reverse 184 在top排序中,指定连接次数,访问字节数,采用降序排列,升序将reverse换成normal
user_sort_field connect reverse --对于用户访问记录,连接次数按降序排列190
overwrite_report no --当那个日期报告已经存在,是否覆盖报告257
mail_utility mailq.postfix --发送邮件报告 289
charset UTF-8 --使用字符集
weekdays 0-6 --排序top排序时的星期周期,0为周日
www_document_root /var/www/html --网页根目录
[root@localhost sarg]#touch /usr/local/sarg/noreport
[root@localhost sarg]#ln -s /usr/local/sarg/bin/sarg /usr/local/bin
[root@localhost sarg]#sarg
[root@localhost sarg]#yum -y install httpd
[root@localhost sarg]#systemctl restart httpd
[root@localhost sarg]#systemctl enable httpd
验证: