正向代理之透明代理
所谓的透明代理,指的是对客户端来是透明的,它并不知道是通过代理服务器上网的!
外网----[代理服务器]------内网
eth1 eth0
192.168.3.121 192.168.1.249
作为一个透明代理服务器,有以下特点:
1、代理服务在GW上配置
2、用LINUX OS主机做GW --- 打开ip_forward功能
3、GW一般都多块网卡,连接内外网
4、代理服务器本身可以上网
-------------------
公司中做了这样一个透明代理服务器:
1、代理上网,并缓存加速
2、做访问控制
8:00-22:00可以上网
不可以上 renren.com
不可以下载.mp3 .mp4 .wav .rmvb
代理服务器端:
外网----[代理服务器]------内网
eth1 eth0
192.168.3.121 192.168.1.249
squid服务器:
1、安装包
yum -y install squid
2、按需修改配置文件
]# vim /etc/squid/squid.conf
440 acl worktime time SMTWHFA 08:00-22:00
441 acl baddomain dstdomain .
442 acl baddomain2 dstdomain .
443 acl baddomain3 dstdomain . .
444 acl bad urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$
580 acl all src 0.0.0.0/0.0.0.0
643 #http_access deny all 如果这行生效,表示所有的src,想通过代理服务器上网,都会被拒绝
643 #http_access deny all
644 http_access deny bad
645 http_access deny baddomain
646 http_access deny baddomain
647 http_access deny baddomain2
648 http_access deny baddomain3
649 http_access allow worktime
650 http_access allow all 允许的应该放到后面
934 http_port 3128 transparent 定义监听端口及透明代理工作模式
3、启动服务
]# service squid restart
4、代理服务是配置在网关上的,因而需要打开ip_forward功能
]# echo 1 > /proc/sys/net/ipv4/ip_forward
5、通过iptables规则,让代理服务器收到客户端对外80端口的请求后,把请求交给本机的3128端口监听的程序(squid)处理
[root@localhost ~]# netstat -tnlp | grep :3128
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 4627/(squid)
]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3128
client:
客户端都需要配置:
正确的ip/gw/dns(最好是搭一个DHCP服务器来分配)
其中ip与squid在同一网络
gw是指向squid
dns是网络中实际的dns服务器
]# ifconfig eth0 | grep inet
inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2ee:eeff:fe00:a76/64 Scope:Link
]# route del default
]# route add default gw 192.168.1.249
]# cat /etc/resolv.conf
nameserver 202.106.0.20
nameserver 202.106.46.151
重点:代理服务器只做80端口的代理,客户端需要做DNS解析时,需要通过解析成功
在网关上配置:
]# iptables -t nat -A POSTROUTING -p udp --dport 53 -j SNAT --to 192.168.3.121 (此ip是网关的外网卡IP)
squid.conf中重要的字段
/etc/squid/squid.conf中重要的字段:
http_port 3128 定义默认监听的代理端口
cache_dir ufs /var/spool/squid 100 16 256
reiserfs/ufs 缓存目录 缓存大小多少M 一级目录的个数 二级目录的个数
为了让缓存效率更高,你可以考虑在内存空间充足的情况下,划分出一块内存来当磁盘用。但是请注意,断电内存中缓将丢失
]# mount -t tmpfs tmpfs /var/spool/squid/ -o size=500M
cache_access_log /var/log/squid/access.log定义缓存访问日志文件
cache_store_log /var/log/squid/store.log
缓存存储日志文件
maximum_object_size 4096K
指定客户端需代理出问题时,可以联系这个代理服务器,或者给这个邮箱发邮件。
visible_hostname squidserver 定义squid服务器的主机名
cache_mgr root@squidserver