简单记录squid搭建一个透明代理缓存服务器
外网:
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 %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>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
保存重启