构建透明代理

安装squid支持透明模式

  • squid透明代理本属于squid标准传统代理的一部分,本文特意将透明代理单独写出,是因为yum安装的版本中没有支持透明模式的模块。
  • 因此,支持透明代理的模块需要在手动编译安装时加入。

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

cd /opt/squid-3.4.6

./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \      //可以在规则链中设置为直接通过客户端MAC管理,防止客户端使用IP欺骗
--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           //使用GNU正则表达式

实验环境

服务器 操作系统 IP地址 使用软件
squid代理服务器 centos7.3 内192.168.100.1 外12.0.0.1 squid
外网web服务器 centos7.3 12.0.0.12 http
client windows7 192.168.100.100 IE浏览器

实验拓扑展示

squid传统代理的另一形式----透明代理_第1张图片

透明代理配置过程

squid代理服务器设置

1、添加网卡,内网卡ens33,外网卡ens37

  • 网卡添加完成后修改IP,此过程建立在已经安装好squid缓存代理服务器基础上。
  • 网卡配置如下图所示:

squid传统代理的另一形式----透明代理_第2张图片

  • 接着打开路由转发功能:

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1   //添加打开路由转发功能

sysctl -p //立即生效

  • 或者这样打开路由转发功能:

echo "1" > /proc/sys/net/ipv4/ip_forward

2、配置squid代理服务配置文件

ln -s /usr/local/squid/sbin/* /usr/local/sbin/

useradd -M -s /sbin/nologin squid

chown -R squid.squid /usr/local/squid/var/
vim /etc/squid/squid.conf

# Squid normally listens to port 3128
http_port 192.168.100.1:3128  transparent  //设置为内网端口代理
cache_mem 64 MB                   #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB         #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB       #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

...
cache_effective_user squid        #添加   指定程序用户
cache_effective_group squid       #添加   指定账号基本组
coredump_dir /usr/local/squid/var/cache/squid     #在这一行上方添加

systemctl restart squid.service

3、写入防火墙nat策略

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128   //允许http端口服务

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128   //允许https端口服务

iptables -I INPUT -p tcp --dport 3218 -j ACCEPT  

4、外网web服务器配置

  • 将外网网卡IP设置为12.0.0.12,启动HTTP服务即可。

5、客户端访问

  • 客户端访问时不需要通过在浏览器中设置代理功能,直接访问IP地址即可。访问结果如下:

squid传统代理的另一形式----透明代理_第3张图片