一、缓存代理概述
(一)代理的基本类型
- 传统代理:适用于Internet,需明确指定服务端
- 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
(二)使用代理的好处
- 提高Web访问速度
- 隐藏客户机的真实IP地址
二、实验:使用Squid实现传统代理与透明代理
- 实验环境:VMware Workstation 15.5、Xshell 6、Centos7.6、squid-3.4.6.tar
- 服务器IP地址规划:
设备名称及用途 | IP地址 |
---|---|
Squid代理服务器 | 192.168.50.134 |
Web服务器 | 192.168.50.135 |
客户机 | 192.168.50.128 |
- 本实验所需软件包(squid)下载地址:https://wwa.lanzous.com/i4zX0ge8rch
- 实验步骤:
①实验一:传统代理
1、安装编译环境
yum -y install gcc gcc-c++
2、解压缩软件包进行配置
tar zxvf squid-3.4.6.tar.gz ## 解压缩软件包
cd squid-3.4.6/ ## 进入解压缩人的软件目录
./configure --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 \ ## 功能提升
--enable-gnuregex ## 支持正则表达式
3、进行编译和安装
make && make install
4、让软件命令能被系统所识别
ln -s /usr/local/squid/sbin/* /usr/local/sbin
5、创建程序用户
useradd -M -s /sbin/nologin squid
6、为工作目录赋予权限
chown -R squid.squid /usr/local/squid/var/
7、编辑并修改squid配置文件
vim /etc/squid.conf
将这一行 http_access deny all 中的deny改为allow即可
在这一行“# Squid normally listens to port 3128”下面添加两行内容:
cache_effective_user squid ## 添加指定程序用户
cache_effective_group squid ## 添加指定账号基本组
8、修改完成后使用命令检查配置文件语法
squid -k parse
9、初始化缓存目录
squid -z
10、启动服务
squid
11、创建squid服务启动脚本并设置为开机自启动
cd /etc/init.d/
vim squid
在文件中写入一些内容:
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid & > /dev/null
if [ $? -eq 0 ];then
echo "squid is running"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill & > /dev/null
rm -rf $PID & > /dev/null
;;
status)
[ -f $PID ] & > /dev/null
if [ $? -eq 0 ];then
netstat -natp | 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|status|reload|check|restart}"
;;
esac
chmod +x squid ## 为启动脚本添加执行权限
chkconfig --add squid ## 将服务添加到系统服务管理中
chkconfig --level 35 squid on ## 设置为开机自启动
12、编辑squid配置文件并进行配置
cache_mem 64 MB ## 指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位MB
reply_body_max_size 10 MB ## 允许用户下载的最大文件大小,以字节为单位,默认设置0表示不进行限制
maximum_object_size 4096 KB ## 允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给客户端
13、关闭squid代理服务器的清空防火墙规则
iptables -F
setenforce 0
14、设置防火墙规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
15、启动squid服务
service squid reload
16、在Web服务器上安装并开启http服务
yum -y install httpd ## 安装http服务
同样也要清空防火墙规则:
iptables -F
setenforce 0
17、打开客户端浏览器,这里使用的是Chrome浏览器,在地址栏中输入192.168.50.134进行访问,接着回到web服务器端查看访问日志,可以看出是IP为128的设备进行了访问
现在来配置代理服务,打开浏览器的设置,选择“系统”,再选择“打开您计算机代理设置”,在弹出的对话框中输入squid服务器的IP和端口3128,单击“保存”即可设置完成
设置完成后,清除缓存记录并重启浏览器再次访问,回到服务器端查看日志,可以看到显示的IP已经是squid服务器的地址了
②试验二:透明代理
-
实验准备:
1.将三台设备(squid代理服务器、Web服务器、客户机)的网卡均设置为仅主机模式
2.为squid服务器添加一块网卡ens36,同样设置为仅主机模式
3.IP地址规划:squid服务器:内网(ens33:192.168.50.134)、外网(ens36:192.168.100.1)
-
实验步骤:
1、配置双网卡:内网(ens33:192.168.50.134)、外网(ens36:192.168.100.1)
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens36 ## 拷贝一ens33的网卡并重命名为ens36
分配编辑ens33与ens36网卡,配置文件如下:
【ens33】
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=bf59517c-d7a2-4f8c-a855-c297305b3c73
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.50.134
NETMASK=255.255.255.0
GATEWAY=192.168.50.2
【ens36】
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
service network restart ## 重启网卡
2、开启流量转发
vim /etc/sysctl.conf ## 编辑配置文件
net.ipv4.ip_forward=1 ## 添加转发规则
sysctl -p ## 使配置立即生效
3、配置透明代理
vim /etc/squid.conf ## 编辑配置文件
修改 http_port 3128 为 http_port 192.168.100.1:3128 transparent
4、配置防火墙转发规则
iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ## 如果第一个实验没有做则需要这一条命令
5、重载squid服务配置文件
service squid reload
6、打开客户机上的浏览器,清除缓存后重启,再次访问192.168.50.135(Web服务器),然后查看http服务日志,可以看到访问地址为ens33网卡IP