普通代理分为两种:

一种是普通代理服务器:

作为代理服务器,这是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  代表没有缓冲