目录
缓存代理概述
代理工作机制
代理基本类型
正向代理实战
squid简介
Squid作为应用层的服务软件,主要提供缓存加速和应用层过滤控制功能。
代理工作机制
(1)Squid服务器中有缓存
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,
则直接将缓存中的页面内容反馈给客户机
(2)Squid服务器中没有缓存
如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,
将网页数据保存到缓存中并发送给客户机
代理基本类型
正向代理
某台电脑通过一台服务器来上Internet网的方式,其中这台电脑就叫客户机,这台服务器就叫正向代理服务器也就是
通常所说的代理服务器,网站那里不能得到你的真实ip地址。
(1)传统模式
首先必须在客户机上手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览,
访问网站时域名解析的请求也会发给指定的代理服务器。
(2)透明模式
提供与传统模式相同的功能和服务,区别在于不需要指定代理服务器的地址和端口而是通过默认路由、
防火墙策略将web访问重定向,实际上仍然交给代理服务器处理。
反向代理
网站通过一台服务器发布到公网,供用户访问。用户直接访问那台反向代理服务器,然后通过那台服务器访问到网站,
用户无法得到网站的真实IP地址。
正向代理实战
实验安装包:
链接:https://pan.baidu.com/s/1vQyPUzmi2KBrMQTTZBAkjw 密码:lob4
实验过程:
一、squid的编译安装及运行
(1)手工编译安装
1、安装编译环境
yum install gcc gcc-c++ make -y
2、解压squid包
tar zxf squid-3.4.6 -C /opt
3、手工编译
cd /opt/squid-3.4.6
./configure --prefix=/usr/local/squid \ #指定安装路径
--sysconfdir=/etc \ #配置地址
--enable-arp-acl \ #MAC地址管控
--enable-linux-netfilter \ #内核过滤
--enable-linux-tproxy \ #透明模式开启
--enable-async-io=100 \ #I/O优化
--enable-err-language="Simplify_Chinese" \ #报错以简体中文显示
--enable-underscore \ #允许url中有下划线
--enable-poll \ #poll开启
--enable-gnuregex #支持正则表达式
make && make install
(2)优化squid
4、创建软连接
ln -s /usr/local/squid/sbin/* /usr/local/sbin #使系统可直接识别命令
5、创建管理用户squid
useradd -M -s /sbin/nologin squid
6、修改目录权限
chown -R squid.squid /usr/local/squid/var/
(3)squid配置文件
7、修改配置文件
vim /etc/squid.conf
(4)squid运行控制
8、squid服务启动
squid -k parse #检查配置文件语法
squid -z #初始化缓存目录
squid #启动服务
补充:此外,可以编写squid启动脚本进行控制
vim /etc/init.d/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 runing"
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 -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|status|reload|check|restart}"
;;
esac
chmod +x /etc/init.d/squid
chkconfig --add squid #可以使用service命令操作
chkconfig --level 35 squid on
二、传统代理:(拓扑如下)
实验环境:
主 机 | 操作系统 | IP地址 | 角色 |
web服务器 | CentOS-7-x86_64 | 192.168.37.130 | http网站服务 |
squid代理服务器 | CentOS-7-x86_64 | 192.168.37.128 | 缓存代理服务 |
客户机client | windows7 | 192.168.37.100 | 结果测试 |
(1)配置squid代理服务器
1、修改squid配置文件
vim /etc/squid.conf
2、制定防火墙策略,重载squid服务
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #指定端口3128允许转发
service squid restart
(2)web服务器:搭建httpd网页服务
yum install httpd -y
systemctl stop firewalld.service
setenforce 0
systemctl start httpd.service
(3)客户机测试
方式一:直接访问web服务器IP地址:在/etc/httpd/logs/access_log 日志中查看
http://192.168.37.130
vim /etc/httpd/logs/access_log
方式二:设置代理服务,再次访问
工具--Internet--连接--局域网设置--代理服务器打勾--输入IP、端口
vim /etc/httpd/logs/access_log
传统代理实验部分完成!
三、透明代理(拓扑如下)
实验环境:
主 机 | 操作系统 | IP地址 | 角色 |
web服务器 | CentOS-7-x86_64 | 12.0.0.12 | http网站服务 |
squid代理服务器 | CentOS-7-x86_64 | ens33:192.168.100.1 ens36:12.0.0.1 |
缓存代理服务(作网关) |
客户机client | windows7 | 192.168.100.10 | 结果测试 |
(1)squid服务器配置双网卡,squid作网关
1、 squid的IP:
web服务器IP:
clientIP:
2、开启路由模式
echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由,可转发
(2)配置squid支持透明模式
vim /etc/squid.conf
(3)设置防火墙策略
清空防火墙规则
iptables -F
iptables -t nat -F
setenforce 0
对防火墙进行重定向操作,将访问本机的80、443端口重定向到3128端口
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
(4)验证透明代理
http://12.0.0.12
vim /etc/httpd/logs/access_log
透明代理实验部分完成!