当前位置: 代码迷 >> 综合 >> 部署代理服务 Squid
  详细解决方案

部署代理服务 Squid

热度:85   发布时间:2023-12-04 18:50:20.0

目录

代理

常见的代理软件

web 代理的功能

squid 代理的基本类型

传统代理配置:

1.添加双网卡,并配置 IP 地址

2.启用路由转发

3.解压并安装 squid 软件(需要先将squid软件包拖进去)

4.创建用户并优化服务

5.检查语法并启动

6、配置传统代理

7、客户端设置代理(桥接网卡,与代理第二块网卡对应,IP地址192.168.2.2)

透明代理配置:

6. 配置文件

7. 重启服务

8. 配置防火墙规则

我们还可以通过acl拒绝指定列表中的 IP 和域名访问

 Squid日志分析


 

  1. 代理

通过第三方软件或机构,实现客户端对指定服务的访问任务

  1. 常见的代理软件

Windows 系统:ccproxy(具有防火墙功能) ISA2006 防火墙(有代理功能) Linux 系统:squid

  1. web 代理的功能

  1. 将局域网的主机保护起来
  2. 对网站的内容进行缓存,加快客户端的访问速度,减少网络流量
  3. 静态页面的站点越来越少,可缓存的内容也变少,数据库中的信息不能被缓存
  1. squid 代理的基本类型

  1. 传统代理:客户端不需要配置网关,只需要设置浏览器的配置,代理服务器对客户端的访问 控制能力强缺点:有部分应用程序无法被代理
  2. 透明代理:客户端不用配置浏览器,正常配置网络信息,代理服务器对客户端的访问控制能 力相对较弱优点:绝大部分的应用程序都能被代理应用
  3. 反向代理:外网客户端给代理服务器发送访问请求后,由代理服务器判断将请求转发给那个 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

验证: