缓存代理概述:

作为应用层的代理服务软件,squid主要提供缓存加速和应用层过滤控制的功能。

代理的基本类型:

传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。

透明代理:提供与传统代理相同的功能和服务,其区别在于客户端不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至不知道自己在使用代理服务,所以称为“透明代理”。

示意图

squid---传统与透明操作流程_第1张图片

squid---传统与透明操作流程_第2张图片

传统代理操作步骤

解压安装

yum install gcc gcc-c++ make –y

tar zxvf squid-3.5.23.tar.gz -C /opt/

cd /opt/squid-3.5.23/

./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

优化命令与用户

ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid
chown squid.squid /usr/local/squid/var/
chown -R squid /usr/local/squid/var/

编辑配置文件

vim /etc/squid.conf


http_access allow all                       //允许访问
http_port 3128
cache_effective_user squid        //添加指定程序用户
cache_effective_group squid      //添加指定账号基本组

squid -z   缓存目录初始化

 

启动该优化脚本

cd /etc/init.d/
vim squid

#!/bin/bash
# chkconfig: 2345 92 25
# description: Squid Service Control Script
CMD="/usr/local/squid/sbin/squid"
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
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
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 "Usage: $0 {start|stop|restart|reload|check|status}"
exit 1
esac

加权启动

chmod +x squid
chkconfig --add squid
chkconfig --level 35 squid on
squid

配置传统代理服务器

vim squid
http_port 3128
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB

配置防火墙规则

iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

搭建一个WEB服务器

安装一个HTTP即可。

在客户机测试

客户机操作访问操作

squid---传统与透明操作流程_第3张图片

 

在WEB服务器上的访问日志查看访问者的IP,会发现访问者的IP是squid服务器的地址,而不是 本机的。

pwd
/var/log/httpd


cat access_log

192.168.137.13 - - [19/Sep/2018:16:08:11 +0800] "GET /noindex/css/fonts/ExtraBold/OpenSans-ExtraBold.eot? HTTP/1.1" 404 248 "http://192.168.137.14/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"

传统代理成功!

 

透明代理步骤

 

关闭客户机IE浏览器中的代理服务器

修改双网卡

ifconfig
ens33: flags=4163  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::daad:16d9:7747:d3a0  prefixlen 64  scopeid 0x20
        ether 00:0c:29:ea:24:6e  txqueuelen 1000  (Ethernet)
        RX packets 261  bytes 24669 (24.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 209  bytes 17020 (16.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163  mtu 1500
        inet 12.0.0.1  netmask 255.255.255.0  broadcast 12.0.0.255
        inet6 fe80::dd93:5e86:da72:9d0c  prefixlen 64  scopeid 0x20
        ether 00:0c:29:ea:24:78  txqueuelen 1000  (Ethernet)
        RX packets 424  bytes 35636 (34.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47  bytes 6579 (6.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

开启转发功能


echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
setenforce 0

修改配置文件


vim /etc/squid.conf
http_port 192.168.100.1:3128 transparent

防火墙配置

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 3218 -j ACCEPT

 

透明代理完成!