外网:

eth0 Link encap:Ethernet HWaddr 00:0C:29:02:DC:6B
inet addr:192.168.96.132 Bcast:192.168.96.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:dc6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:118 errors:0 dropped:0 overruns:0 frame:0
TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12283 (11.9 KiB) TX bytes:14421 (14.0 KiB)

内网:

eth1 Link encap:Ethernet HWaddr 00:0C:29:02:DC:75
inet addr:10.8.8.205 Bcast:10.8.8.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:dc75/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1496 errors:0 dropped:0 overruns:0 frame:0
TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:97417 (95.1 KiB) TX bytes:1608 (1.5 KiB)

 

主要实现原理:

当代理服务器中客户端需要的数据时:

a. 客户端向代理服务器发送数据请求;

b. 代理服务器检查自己的数据缓存;

c. 代理服务器在缓存中找到了用户想要的数据,取出数据;

d. 代理服务器将从缓存中取得的数据返回给客户端。

当代理服务器中没有客户端需要的数据时:

1. 客户端向代理服务器发送数据请求;

2. 代理服务器检查自己的数据缓存;

3. 代理服务器在缓存中没有找到用户想要的数据;

4. 代理服务器向Internet 上的远端服务器发送数据请求;

5. 远端服务器响应,返回相应的数据;

6. 代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

 

安装squid:debian/ubuntu:apt-get update & apt-get install squid -y         centos:yum update & yum install squid -y

 

检查squid是否开机启动:chkconfig,若不是开机启动则设置为开机启动:chkconfig --level 35 squid on

 

squid 的主配置文件是 /etc/squid/squid.conf,红色为重点配置

 

http_port 3128      //设置监听的IP与端口号

cache_mem 64 MB      //额外提供给squid使用的内存,squid的内存总占用为 X * 10+15+“cache_mem”,其中X为squid的cache占用的容量(以GB为单位),
//比如下面的cache大小是100M,即0.1GB,则内存总占用为0.1*10+15+64=80M,推荐大小为物理内存的1/3-1/2或更多。
maximum_object_size 4 MB   //设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘

minimum_object_size 0 KB   //设置squid磁盘缓存最小文件

maximum_object_size_in_memory 4096 KB   //设置squid内存缓存最大文件,超过4M的文件不保存到内存

cache_dir ufs /var/spool/squid 100 16 256   //定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量

logformat combined %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}&gt;h" %Ss:%Sh //log文件日志格式

access_log /var/log/squid/access.log combined  //log文件存放路径和日志格式

cache_log /var/log/squid/cache.log   //设置缓存日志

logfile_rotate 60   //log轮循 60天

cache_swap_high 95  //cache目录使用量大于95%时,开始清理旧的cache

cache_swap_low 90   //cache目录清理到90%时停止。

acl localnet src 10.8.8.0/24  //定义本地网段

http_access allow localnet  //允许本地网段使用

http_access deny all  //拒绝所有

visible_hostname squid.david.dev  //主机名

cache_mgr mchina_tang@qq.com  //管理员邮箱

 

配置好squid后初始化:squid -z

 

启动squid:service squid start

 

打开浏览器-设置-更改代理服务器设置-局域网设置-代理服务器

地址:10.8.8.205   端口:3128     

勾上-确定

 

 

随便打开一个网页,能正常打开并刷新说明此事squid的正向代理是通的

 

接下来配置防火墙,利用防火墙透明代理:

debian7/ubuntu14.04:vi /etc/iptables.rules

centos6:vi /etc/sysconfig/iptables

注意:centos7与debian8默认不是iptables,而是firewalld,请关闭firewalld开机启动,并安装iptables设置开机启动

iptables -t nat -I PREROUTING -i eth0 -s 10.8.8.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

保存:service iptables save

重启:service iptables restart

 

修改本地网关为:10.8.8.205

 

 

 

保存,重新打开网页,能正常打开网页说明透明代理已成功

 

若不能则尝试清空防火墙,清空时请先备份:

debian7/ubuntu14.04:cp /etc/iptables.rules /etc/iptables.rules.bak

centos6:cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

iptables -F

保存:service iptables save

重启:service iptables restart

若此时透明代理正常,则判断是否受到FORWARD规则的影响,

删除空的防火墙规则,恢复备份:

debian7/ubuntu14.04:rm  /etc/iptables.rules & mv /etc/iptables.rules.bak /etc/iptables.rules

centos6:rm  /etc/sysconfig/iptables & mv /etc/sysconfig/iptables.bak /etc/sysconfig/iptables

 

编辑防火墙规则,并注释关于FORWARD的规则,

保存:service iptables save

重启:service iptables restart

若此时透明代理正常则说明FORWARD规则存在问题,请检查规则规则

若依然无法进行透明代理,则检查squid配置文件,或检查是否已开启路由模式:vi /etc/sysctl.conf    检查net.ipv4.ip_forward = 1

保存重启