一、什么是squid
- Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件
- 可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大
- squid的官方网站为http://www.squid-cache.org
二、缓存代理概述
1、 Web代理的工作机制,缓存网页对象,减少重复请求
- Squid是一个缓存Internet数据的一个软件,它接收用户的下载申请, 并自动处理所下载的数据。
- 也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份
- 当别的用户申请同样的页面时,Squid把保存的备份立即0传给用户,减少了向Internet提交重复的Web请求的过程,提高了用户下载网页的速度,隐藏了客户机的真实IP
如图:
2、代理的基本类型
- 传统代理:适用于Internet,需明确指定服务端
- 透明代理: 客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
3、使用代理的好处
- 提高Web访问速度
- 隐藏客户机的真实IP地址
三、squid传统代理搭建
环境介绍
squid服务器:192.168.100.10/24
web服务器:192.168.100.20/24
客户机:192.168.100.30/24
实验目的
- 通过客户机访问web页面,不做代理时,web服务器的访问日志显示的是客户机IP,
- 当做了传统代理后,web服务器的访问日志显示的是squid服务器IP。
squid服务器配置
- 安装编译工具,解压squid软件包到opt
yum install gcc gcc-c++ -y
tar zxvf squid-3.5.27.tar -C /opt
- 进入解压目录执行configure
./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
- 编译并安装
make && make install
- 创建软连接,创建squid用户,更改squid属组
ln -s /usr/local/squid/sbin/* /usr/local/sbin
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/
- 修改squid配置文件,
vi /etc/squid.conf
###在第56行添加参数
56 #http_access deny all
57 http_access allow all
58 http_port 3128 ###在下面新增
59 visible_hostname 192.168.100.10
60 cache_mem 64 MB
61 cache_swap_low 80
62 cache_swap_high 97
63 cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256
64 cache_effective_user squid ##缓存用户squid
65 cache_effective_group squid ##缓存组squid
- 检查squid相关配置,并初始化
squid -k parse ##检查配置文件
squid –k rec ##重新加载配置文件
squid -zX ##初始化缓存目录
- 编写squid服务脚本,直接放到service中管理
vi /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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
;;
*)
esac
- 赋予脚本相关权限
chmod +x /etc/init.d/squid
chkconfig --add squid ##加入service列表
chkconfig squid on
- 启动squid服务
service squid restart
正在启动Squid...
netstat -anpt | grep squid ##确认squid服务处于正常监听状态
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
- 编辑防火墙规则
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许3128端口
service iptables save ##保存规则
- 重载配置文件
service squid reload
web服务器配置
- 关闭防火墙
systemctl stop firewalld.service ##关闭防火墙
setenforce 0 ##增强型安全功能
- 安装httpd服务,并启动(作为web页面)
yum install httpd -y ##安装web服务
systemctl start httpd.service
客户端配置
验证传统squid模式
- 当客户端不配置代理时,访问web界面
- 进入web服务器,查看web服务器访问日志,可以看见访问源地址为客户机地址
cat /var/log/httpd/access_log
- 当客服端配置代理后,再次访问web界面
- 并查看web服务器访问日志,可以看见访问源地址为squid服务器
cat /var/log/httpd/access_log
四、squid透明代理搭建
- 简介:需要在squid上配置双网卡,内网卡ens33作为客户机的网关
环境介绍
squid服务器:双网卡。ens33为192.168.100.1/24,
ens36为192.168.5.100/24
web服务器:192.168.5.200/24
客户机:192.168.100.30/24
实验目的
- 客户机访问web服务器时显示的访问地址为squid服务器地址
squid服务器配置
- 添加一块网卡,输入nmcli con查看网卡连接情况
nmcli con
NAME UUID TYPE DEVICE
ens33 71ca8422-bf5e-4d2c-a919-e0cd02bbd979 802-3-ethernet ens33
有线连接 1 d20a6283-76b7-3da1-a3ca-ac91adf7a653 802-3-ethernet ens36
- 配置ens36网卡
cd /etc/sysconfig/network-scripts
cp -p ifcfg-ens33 ifcfg-ens36
vi /etc/sysconfig/network-scripts/ifcfg-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 ###改网卡名字
UUID=71ca8422-bf5e-4d2c-a919-e0cd02bbd979
DEVICE=ens36 ###改网卡名字
ONBOOT=yes
IPADDR=192.168.5.100
NETMASK=255.255.255.0
GATEWAY=192.168.5.2
- 配置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=71ca8422-bf5e-4d2c-a919-e0cd02bbd979
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
- 添加路由转发
vim /etc/sysctl.conf
##末尾加入
net.ipv4.ip_forward=1
sysctl -p ##重新加载
net.ipv4.ip_forward = 1
- 修改squid配置文件
vim /etc/squid.conf
##将刚才的传统模式的58行监听端口改为监听192.168.100.1:3128
58 http_port 192.168.100.1:3128 transparent ###支持透明模式
- 重新加载配置文件
service squid reload
netstat -anpt | grep squid ##确认squid服务处于正常监听状态
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
- 编辑防火墙规则,增加nat转换规则
iptables -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
###客户机请求http80端口时重定向到3128端口
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
###请求https443端口时重定向到3128端口
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
##允许3128端口进行转发
service iptables save ##保存规则
web服务器配置
修改web服务器IP地址为192.168.5.200
- 添加一条静态路由到客户机192.168.100.0/24网段
route add -net 192.168.100.0/24 gw 192.168.5.100
客户机配置
- IP地址不变,关掉代理
验证
- 客户机访问web服务器,然后进入web服务器看访问日志
- 查看web服务器访问日志,可以看见源地址为squid的ens36地址
cat /var/log/httpd/access_log
五、squid反向代理搭建
- 当squid做反向代理时就不是缓存服务器了 , 变为web 服务器
实验环境介绍
squid服务器:192.168.100.100/24
web1:192.168.100.110/24
web2:192.168.100.120/24
客户机:192.168.30/24
实验目的
- squid服务器配置反向代理,客户机添加squid代理,然后访问squid服务器域名时跳转到web服务器页面。
- 以轮询的方式依次显示web1、web2
squid服务器配置
- 修改IP地址为192.168.100.100/24
- 跟传统模式一样安装squid软件,修改配置文件
vim /etc/squid.conf
###在第56行添加参数
56 #http_access deny all
57 http_access allow all
58 http_port 192.168.100.100:80 accel vhost vport
##将squid服务器变为web server,并监听80端口
59 visible_hostname 192.168.100.100
60 #cache_mem 64 MB
61 #cache_swap_low 80
62 #cache_swap_high 97
63 #cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256
64 cache_effective_user squid ##缓存用户squid
65 cache_effective_group squid ##缓存组squid
66 cache_peer 192.168.100.110 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
##节点服务器1最大访问30,权重1,别名web1
67 cache_peer 192.168.100.120 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
68 cache_peer_domain web1 wb2 www.yun.com ##访问yun.com匹配web1,
- 检查squid相关配置,并初始化
squid -k parse ##检查配置文件
squid –k rec ##重新加载配置文件
squid -zX ##初始化缓存目录
- 修改防火墙规则
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许3128端口
service iptables save ##保存规则
- 重启服务
service squid restart
netstat -anpt | grep squid ##确认squid服务处于正常监听状态
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
web1服务器配置
- 修改IP地址为192.168.100.110/24
- 在web页面插入相关内容
echo "this is test1 web" >> /var/www/html/index.html
- 重启httpd服务
systemctl restart httpd
web2配置
- 修改IP地址为192.168.100.120/24
- 在web页面插入相关内容
echo "this is test2 web" >> /var/www/html/index.html
- 重启httpd服务
systemctl restart httpd
客户机配置
- 配置IP地址,启动代理
- 进入c盘Windows/System32/drivers/etc目录
- 修改客户机host文件(需要切换到管理员)
验证
- 通过客户机访问www.yun.com,发现以轮询的方式显示web界面。
- 点击刷新变为test2页面