普通代理分为两种:
一种是普通代理服务器:
作为代理服务器,这是Squid的最基本的功能;通过在squid.conf配置文件添加一系列的访问及控制规则,用户在客户端设置服务器地址和端口,即可通过squid访问internet,在下面的规则里,squid实现局域网用户和高速缓存功能:
即通过浏览器设置代理服务器地址共享上网,这种方式不需要代理服务器在网络的出入口的位置,只需要代理服务器能够上网即可,其他的客户端就可以通过IE等客户端设置代理服务器的地址及端口进行上网。上一篇文件就是这样的一个例子。这个技术以及落后了。
另外一种就是透明代理,所谓的透明代理,是相对于代理服务器而已,客户端不需要做任何和代理服务器相关的设置和操作,对用户而言,感觉不到代理服务器的存在,所以称之为透明代理。即把代理服务器部署在核心的上网出口,当用户上网浏览页面时,会交给代理服务器向外请求,如果结合iptables可以实现代理+网关+内容过滤+浏览安全控制等完整的上网解决方案
透明代理流程说明:
用户A发送一个访问请求到防火墙,有防火墙将该用户的访问请求转发给SQUID,SQUID在先检查自身缓存中有无该用户请求的访问的内容,如果没有,则请求远端目的服务器,获取该用户的访问内容,在返回给用户的同事,自身也缓存保留一份记录,以备下次调用,当用户B发送一个和用户A刚才访问的相同请求时,由防火墙将转发该用户请求到SQUID,squid检查自身缓存,发现有同样的内容后,直接将该内容返回给用户,而无需再去向源站点请求。
注意:在实际使用中,通常将squid和防火墙放在同一台服务器上。
透明代理的好处:
上网行为控制
节约网站带宽成本
提升员工上网速度
squid可以为局域网中的客户端做代理,用来加速用户的网页访问,第一次访问的时候,squid会把数据缓存到服务器上,当客户端第二次访问的时候,squid会对比文件的新旧,如果文件没有发送变化,则squid直接返回给用户数据,不需要在互联网上重新下载一份。
squid有没代理物理拓扑说明
作为透明代理服务器,一般和公司的上网网关放在一起,即所以的客户机的网关都设置为代理服务器的IP,具体需求如下
a、至少有两块网卡,一块连接路由器,一块连接内部网络
b、所以的上网请求都不行经过代理服务器(即把代理服务器设置为网关)
下面我部署的透明代理如下:
需要两块网卡
eth0 10.0.0.4 eth1 172.16.1.1
如果要实现透明代理,在编译安装squid的时候需要添加下面编译参数
./configure \ --enable-linux-entfilter --enable-linux-tproxy
##具体安装,参考上一篇《Squid介绍及普通代理完整部署》
##部署方法
#在squid.conf 中的http――port 3128 后面加transparent参数。这个是核心参数,有这个参数就可以了。
grep "http_port 3128" squid.conf sed -i 's/http_port 3128/http_port 3128 transparent/g' squid.conf grep "http_port 3128" squid.conf
#增加几个参数,这些是调优参数,不是必须的
#cache_mem 128 MB#这是一个优化选项,增加该内存值有利于缓存。应该注意的是: 一般来说如果系统有内存,设置该值为(n/)3M。现在是3G 所以这里1G #cache_swap_low 90#最小允许使用swap 90% #cache_swap_high 95#最多允许使用swap 95% #maximum_object_size 8192 KB#允午最大文件请求体大小 #minimum_object_size 0 KB#允午最小文件请求体大小 #maximum_object_size_in_memory 4096 KB#允许最大的文件载入内存 #emulate_httpd_log on#将使Squid仿照Web服务器的格式创建访问记录。如果希望使用 #memory_replacement_policy lru ##缓存算法,保持最近使用的 ##sed名称操作如下: sed -i '/http_port 3128/acache_mem 128 MB\ncache_swap_low 90\ncache_swap_high 95' squid.conf sed -i '/cache_swap_high/a \nmaximum_object_size 8192 KB\nminimum_object_size 0 KB\nmaximum_object_size_in_memory 4096 KB\nemulate_httpd_log on\nmemory_replacement_policy lru' squid.conf sed -n '/http_port 3128/,+9p' squid.conf ========================================================= [root@Squid etc]# sed -n '/http_port 3128/,+9p' squid.conf http_port 3128 transparent cache_mem 64 MB cache_swap_low 90 cache_swap_high 95 nmaximum_object_size 8192 KB minimum_object_size 0 KB maximum_object_size_in_memory 4096 KB emulate_httpd_log on memory_replacement_policy lru hierarchy_stoplist cgi-bin ? [root@Squid etc]# =========================================================
##防火墙设置
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128 iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j MASQUERADE iptables -t nat -L -nv =========================================================== [root@Squid etc]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128 [root@Squid etc]# iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j MASQUERADE [root@Squid etc]# iptables -t nat -L -nv Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REDIRECT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 3128 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- * eth0 172.16.1.0/24 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination [root@Squid etc]# ===========================================================
#开启转发功能
sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf sysctl -p
####这样就设置成功了
我们在用一台服务器,设置只有内网网卡,网段在172.16.1.0/24 网段。把网关设置为172.16.1.1.用它访问外网。这样就可以了,
一边访问web,一般查看squid的日志
[root@Squid ~]# tailf /application/squid/var/logs/access.log 1441695622.825 52 172.16.1.100 TCP_MISS/200 97207 GET http://www.baidu.com/ - DIRECT/115.239.211.112 text/html 1441695625.005 52 172.16.1.100 TCP_MISS/200 97406 GET http://www.baidu.com/ - DIRECT/115.239.210.27 text/html 1441695709.770 208 172.16.1.100 TCP_MISS/200 727503 GET http://www.163.com/ - DIRECT/114.80.143.158 text/html
##TCP_MISS 代表没有缓冲