实践出真知——基于squid实现正向代理实践

实践出真知——基于squid实现正向代理实践

前言

? 俗话说得好:时间是治愈一切伤口的良药,实践是检验真理的唯一标准!本文将结合代理服务器的基本原理,进行基于squid软件实现传统(标准)代理(正向代理)以及透明代理的实例演示。

先说说squid是个啥

? 避(kai)免(ge)被(wan)喷(xiao),还是介绍一下什么是squid吧。

squid的概念

? squid是一种用来缓存Internet数据的软件。用于接受来自客户端需要下载对象(object)的请求并适当的处理这些请求。也就是说,如果一个客户端想下载一个web页面,就可以通过请求squid(代理服务器)为其获取并响应(返回)这个页面的数据到客户端;squid(代理服务器)随之连接到远程服务器并向该web页面发出请求。然后,squid聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘(自身)中读取到,那样数据会立即传输到客户机上,从而节省网络资源(例如带宽)。

? 说白了,squid就是一个软件,运行在代理服务器上,用来真正实现代理的功能。

squid代理的作用

  • 通过缓存的方式为用户提供Web访问加速
  • 对用户的Web访问进行过滤控制

基于squid实现传统代理实例演示

一、规划实验环境和所需资源

实例核心:两台服务器,一台客户机

squid代理服务器ip:20.0.0.128
web真实服务器ip:20.0.0.130
client客户机ip(测试用):20.0.0.138

软件包资源:squid软件包链接如下:

二、网络拓扑结构

三、实操流程

由于web真实服务器设置比较简单,安装一个Apache web服务即可,先来看一下squid代理服务器上的配置,为了方便演示,对服务器更改一下名称也是必要的

1、在代理服务器上手工编译安装squid软件

熟悉手工编译的话其实步骤就是那些,只是具体的内容不一样而已,无需多言,直接开始:

[[email protected] ~]# hostnamectl set-hostname squid
[[email protected] ~]# su
[[email protected] ~]# ls
anaconda-ks.cfg       sarg-2.3.7.tar.gz   公共  视频  文档  音乐
initial-setup-ks.cfg  squid-3.4.6.tar.gz  模板  图片  下载  桌面
[[email protected] ~]# tar zxf squid-3.4.6.tar.gz -C /opt/ #解压软件包
[[email protected] ~]# yum install gcc gcc-c++ make -y #安装编译环境(如果安装了开发工具一般无需该步骤)

[[email protected] ~]# cd /opt/squid-3.4.6/   #进入软件目录开始手工编译安装
[[email protected] squid-3.4.6]# ls
acinclude     compat        COPYING    helpers  libltdl      README             src
aclocal.m4    configure     COPYRIGHT  icons    Makefile.am  RELEASENOTES.html  test-suite
bootstrap.sh  configure.ac  CREDITS    include  Makefile.in  scripts            tools
cfgaux        contrib       doc        INSTALL  po4a.conf    snmplib
ChangeLog     CONTRIBUTORS  errors     lib      QUICKSTART   SPONSORS
[[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
[[email protected] squid-3.4.6]# make
[[email protected] squid-3.4.6]# make install    ##编译安装,时间根据硬件配置成正比

配置参数解析:

--prefix=/usr/local/squid \     ##安装路径
--sysconfdir=/etc \             ##配置文件目录
--enable-arp-acl \              ##支持acl访问控制列表
--enable-linux-netfilter \      ##支持网络筛选(内核过滤)
--enable-linux-tproxy \         ##支持透明模式(透明模式代理实验需要)
--enable-async-io=100 \         ##io优化配置
--enable-err-language="Simplify_Chinese" \   ##报错显示简体中文
--enable-underscore \           ##允许URL中包含下划线
--enable-poll \                 ##使用poll()模式,提升性能
--enable-gnuregex               ##支持GNU正则表达
[[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 /usr/local/squid/var/  ##给目录所有文件属主属组权限

2、修改squid主配置文件,并优化启动项

[[email protected] squid-3.4.6]# vim /etc/squid.conf   ##修改squid配置文件
55 # And finally deny all other access to this proxy
56 http_access allow all   ##添加此项
57 #http_access deny all ##注释,允许终端访问

59 # Squid normally listens to port 3128
60 http_port 3128
cache_effective_user squid   ##指定用户squid,自己添加
cache_effective_group squid ##指定组,自己添加
[[email protected] squid-3.4.6]# squid -k parse ##检查配置文件语法(有显示内容)
[[email protected] squid-3.4.6]# squid -z  ##初始化缓存目录
[[email protected] squid-3.4.6]# squid  ##开启服务(有显示内容)
[[email protected] squid-3.4.6]# netstat -ntap | grep 3128  ##查看squid端口

[[email protected] squid-3.4.6]# cd /etc/init.d/
[[email protected] init.d]# vim squid    ##编辑service启动squid的脚本
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"   ##PID文件进程号
CONF="/etc/squid.conf"   ##主配置文件
CMD="/usr/local/squid/sbin/squid"   ##启动命令

case "$1" in
start)
                netstat -ntap | grep squid &> /dev/null
                if [ $? -eq 0 ]
                then
                 echo "squid is running"
                 else
                 echo "正在启动 squid...."
                 $CMD
                fi
                ;;
stop)
                $CMD -k kill &> /dev/null   ##关闭squid
                rm -rf $PID &> /dev/null    ##删除PID文件
                ;;
status)
                [ -f $PID ] &> /dev/null
                 if [ $? -eq 0 ]
                                then
                                 netstat -ntap | grep squid
                                else
                                 echo "squid is not running"
                fi
                ;;
restart)
                $0 stop &> /dev/null
                echo "正在关闭 squid..."
                $0 start &> /dev/null
                echo "正在启动 squid..."
                ;;
reload)
                $CMD -k reconfigure  ##重载配置文件
                ;;
check)
                $CMD -k parse   ##检查语法
                ;;
*)
                echo "用法:$0{start|stop|reload|status|check|restart}"
                ;;
esac
[[email protected] init.d]# chmod +x squid   ##给执行权限
[[email protected] init.d]# chkconfig --add squid   ##添加到service管理中
[[email protected] init.d]# chkconfig --level 35 squid on  ##开机自启

3、设置传统代理配置——依旧是对主配置文件进行修改

[[email protected] init.d]# vim /etc/squid.conf  ##修改主配置文件
# Squid normally listens to port 3128
http_port 3128
cache_mem 64 MB   ##缓存空间大小
reply_body_max_size 10 MB  ##允许下载最大的文件大小
maximum_object_size 4096 KB   ##允许保存缓存空间最大对象的大小
[[email protected] init.d]# service squid restart
[[email protected] init.d]# iptables -L  ##查看表内容(有显示内容)
[[email protected] init.d]# iptables -F  ##清空表缓存
[[email protected] init.d]# setenforce 0
[[email protected] init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许基于tcp协议从3128端口进入
[[email protected] init.d]# service squid reload  ##重载配置文件

4、在web服务器上安装Apache http服务

[[email protected] ~]# hostnamectl set-hostname web
[[email protected] ~]# su
[[email protected] ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[[email protected] ~]# systemctl stop firewalld.service   ##关闭防火墙
[[email protected] ~]# setenforce 0
[[email protected] ~]# yum install httpd -y  ##安装web服务
[[email protected] ~]# systemctl start httpd.service

5、使用client访问web地址,在web服务器端的日志文件中查看日志消息

Win7客户端访问web服务器ip地址,显示正常访问

web服务器的日志文件信息如下:

Win7客户机ip地址:

根据上篇文章的介绍原理,在传统(标准)代理模式下应该是squid服务器的ip地址啊?这个问题的确没毛病,但是我们需要知道,传统代理与透明代理的最核心的区别在于哪里——就是我们的客户机没有设置代理和端口啊!

设置代理服务器IP地址和端口:

刷新页面再次在web服务器上查看日志消息,如下所示:

小结

? 根据此次的实践,体验了使用squid软件实现传统代理服务器的功能,也验证了其需要在客户端设置代理服务器地址和端口的原因。

? 接下来基于上面的实验,进行透明模式的配置,首先将方才的代理服务器ip地址和端口的设置删除。

基于squid实现透明代理实例演示

一、实验环境

? 实验环境需要修改,因为透明模式是使用代理服务器将客户服务器与web服务器阻断了,所以需要在squid服务器上添加网卡实现通信。如下所示:

squid 服务器:ens33 20.0.0.128
             ens36 192.168.100.1 (仅主机)
web服务器:20.0.0.130
client 客户机:192.168.100.100(仅主机)

二、网络拓扑结构

这样构建的一个网络拓扑如下所示:

三、实验流程

0、删除原来在client端的代理设置并且设置网卡为仅主机模式且IP地址为192.168.100.100

1、在squid服务器上添加新网卡为仅主机模式,并且配置IP地址为192.168.100.1

[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
[[email protected] network-scripts]# vim ifcfg-ens36  ##修改ens36ip信息
BOOTPROTO=static
##删除uuid修改33为36
IPADDR=192.168.100.1
NETMASK=255.255.255.0
[[email protected] network-scripts]# service network restart   ##重启网络服务
[[email protected] network-scripts]# vim /etc/sysctl.conf   ##开启路由转发
net.ipv4.ip_forward=1 #末尾加上
[[email protected] network-scripts]# sysctl -p   ##加载
net.ipv4.ip_forward=1

2、在web服务器上指定静态路由

[[email protected] ~]# route add -net 192.168.100.0/24 gw 192.168.13.184  ##添加静态路由

3、在squid代理服务器上设置透明代理

前面配置(./configure时开启了支持透明模式的功能的)

[[email protected] network-scripts]# vim /etc/squid.conf   ##设置配置文件
http_port 192.168.100.1:3128 transparent   ##设置透明代理,真正修改的地方
cache_effective_user squid
cache_effective_group squid
[[email protected] network-scripts]# service squid stop  ##关闭开启squid服务
[[email protected] network-scripts]# service squid start
[[email protected] network-scripts]# iptables -F  ##清空表缓存
[[email protected] network-scripts]# iptables -t nat -F
[[email protected] network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
##定义规则入口ens36,80端口重定向到3128
[[email protected] network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
##https443端口
[[email protected] network-scripts]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
##允许3128端口访问

4、测试验证

查看web日志文件,如下图:

小结

? 透明模式下的设置是对网络的规划以及对squid配置文件的修改,添加对应的参数即可实现透明模式下的代理功能。并且无需在客户端设置服务器的ip地址以及端口号。

总结

? 基于squid软件实现的正向代理的两种模式应该深有体会了,结合之前的原理在配置实践中理解是不是更加事半功倍了呢?通过本文的实际操作,想必对squid的配置文件还不太熟悉(不急不急哈,未完待续,且听下回分解~~),但是实现的整个过程应该是了如指掌了哈!

原文地址:https://blog.51cto.com/14557673/2479542

时间: 2024-10-12 16:48:50

实践出真知——基于squid实现正向代理实践的相关文章

实践出真知——基于squid实现反向代理实践

实践出真知--基于squid实现反向代理实践 前言 ? 本文主要进行基于squid软件实现反向代理的实验流程演示,阅读本文前首先需要明白反向代理的概念和原理,其次需要基于上篇文章的实验从而继续进行. 实验流程 ? 上次做了透明模式正向代理实验,再此基础上完成反向代理的实操流程. 服务器规划 client ip:192.168.100.100(Win7/win10) squid 代理服务器IP地址:20.0.0.128 192.168.100.1 两台web服务器ip地址:web1:20.0.0.

实践出真知——一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离

实践出真知--一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离 前言 ? 想必大家对于Nginx和Tomcat都非常熟悉了,Nginx的应用非常广泛,不仅是对web静态资源非常友好,而且也是非常实用的反向代理和负载均衡软件.结合后端Tomcat的服务,从而搭建Nginx+Tomcat集群. ? 对于直接想要实践的朋友而言可以获取本文的链接中的软件包后直接看第三备份的内容. 一.集群搭建结构及拓扑 1.1集群架构图示 Nginx+Tomcat集群的结构示意图如下: 1.2系统环境与

Linux与云计算——第二阶段 第一十一章:代理Proxy服务器架设—Squid代理服务器正向代理和客户端配置

Linux与云计算--第二阶段Linux服务器架设 第一十一章:代理Proxy服务器架设-Squid代理服务器正向代理和客户端配置 安装Squid 安装Squid来配置代理服务器. [1] 这是一个通用的转发代理配置 [[email protected] ~]# yum -y install squid [[email protected] ~]# vi /etc/squid/squid.conf # line 26: 添加一条新的ACL acl lan src 192.168.96.0/24

万事开头难 && 实践出真知

实践出真知,真是千古不变的真理. 前几天在顺手做一个万年历项目,实现了用TFT屏显示实时时间,日期,温度,和按键设置时间,能在特定时间显示特定的话语在显示屏上面.其实这个项目现在想想还是挺简单的.我的功能也不是很多.但是在认真做这个项目的时候,真的确确实实让我自己充实了很多,学了很多知识,也发现了很多我之前没有发现的问题.也就只有在实际动手中才能发现问题的所在.在我们这个电气工程专业,我觉得技能是检验能力的重要标准之一.等到这个项目做完的时候,我又陷入了无聊和无方向的循环中.每天也在学习,但是感

实践出真知:MVC和MVVM

title: 实践出真知:MVC和MVVM date: 2018-04-13 08:40:02 tags: mvc mvvm 数据驱动 categories: web --- 理论来自于实践,并指导于实践 - 佚名 我相信在MVC等理论形成之前,就已经有人在付诸MVC的实践.只是后来有人总结下来,并指导人们做软件开发.这种设计典范并不是只有后台的代码才有,前端也可以有很好的框架,像react和vue. 为什么这么强调实践.因为在我学习MVC理论的时候,我是蒙蔽的.虽然看了很多优秀的文档,比如,阮

SQUID传统正向代理

传统正向代理 1.1 问题 本案例要求先快速搭建好一台Web服务器: 建立Web测试文件 /var/www/html/index.html 然后创建代理服务器,使得192.168.4.0/24网段中的所有主机,均可以通过该代理服务器访问Web服务. 设置代理服务端口为3128 设置内存缓存容量128M 设置硬盘缓存容量为200M,一级目录16个,二级目录128个 然后验证客户机能否通过代理服务器访问Web服务器: 客户端从浏览器访问Web服务器 查看服务器B的代理访问日志,验证来访地址 查看服务

squid的正向代理和反向代理

squid:可以实功能.做翻墙~代理 可以实现代理也可以设置缓存 安装 :yum -y install squid 配置文件:vim /etc/squid/squid.conf cache_dir  缓存目录 必须打开(在下面添加) cache_mem 28MB 启用一点内存 缓存对象refresh_pattern \.(jpg|png|gif|js|css|MP3|MP4) 1440 20% 2880 ignore-reload(忽略重新加载) visible=hostname 定义hostn

squid配置 正向代理

什么是squidsquid可以做代理也可以做缓存squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O. squid不仅可以做正向代理,又可以做反向代理. 搭建squid正向代理官方网站为 http://www.squid-cache.org/ yum install -y squidsquid -v 查看版本以及编译参数 /etc/squid/squid.confvim /etc/squid/squid.conf加入如下配置http_port 3128acl manager p

Centos7使用squid实现正向代理

正向代理:代理服务器帮助客户端(浏览器)实现互联网的访问 (1)代理服务器配置 1.安装squid yum install squid -y 2.编辑squid配置文件 #vim /etc/squid/squid.conf acl local src 192.9.191.0/24 //允许192.9.191.0/24网段内所有客户机访问代理服务器 http_access allow localnet //该记录一定要添在deny all之前 http_port 3128 3.防火墙配置 syst