用squid可以实现
网上搜下透明代理就知道了
提供一下示例
一、需求:
公司内网192.168.0.0/24,分成:
服务部192.168.0.130-192.168.0.169
开发部192.168.0.110-192.168.0.129
市场部192.168.0.170-192.168.0.199
办公室192.168.0.200-192.168.0.209
物流部192.168.0.210-192.168.0.219
经理室192.168.0.220-192.168.0.229
小培训室192.168.0.10-192.168.0.49
大培训室192.168.0.50-192.168.0.99
192.168.0.1-192.168.0.9、192.168.0.101-192.168.0.109、192.168.0.230-192.168.0.254保留
192.168.0.100为Internet网关服务器(使用192.168.0.100这个地址是公司内网建设的历史问题,这里不作讨论)。网关服务器内网出口设备是eth1、地址是192.168.0.100,外网出口地址设备是eth0、地址是172.15.222.XXX。
由于公司内部不同部门工作性质不同,现要求:
开发部、市场部、物流部、经理室全天候可以上网
服务部工作日08:00-11:30、13:00-17:00不可以上网,工作日的其它时间和双休日可以上网
小培训室、大培训室每日08:00-11:30、13:00-17:00不可以上网
办公室任何时间都不可以上网
在允许上网的情况中,除192.168.0.123和192.168.0.120外,其它只能使用HTTP协议上网。
二、分析:
HTTP协议代理上网,并实现多功能控制,SQUID是很好的解决办法。
192.168.0.123和192.168.0.120不能用SQUID代理,因为SQUID可以代理众所周知的,如HTTP、HTTPS、FTP、 GOPHER等协议,但更多的网上应用程序不能通过HTTP等代理工作,如REALPLAY最新的媒体流、OUTLOOK的HOTMAIL协议等。这时我们想到了用IPTABLES实现路由和IP伪装。
简单介绍一下IP伪装。172.15.222.XXX(网关服务器的Internet出口地址)访问Internet时,使用自己的地址 172.15.222.XXX,这个没有问题。但内网192.168.0.0/24(实际只有192.168.0.123和192.168.0.120)要通过网关服务器访问Internet,内网地址一定要被网关服务器伪装一下成为172.15.222.XXX,这样从Internet返回的数据包才能回到网关服务器172.15.222.XXX。回到172.15.222.XXX的数据包再通过网关服务器解除伪装、路由到内网上相对应的机器上。
三、实现:
1、重新编译内核,一定要打开network packet filter选项,细节不作详述,请查询iptables的相关信息;
2、重启后安装SQUID,在/etc/squid/squid.conf中加入如下配置信息,配置选项说明不详述,请参考SQUID文档:
acl serdep src 192.168.0.130-192.168.0.169/255.255.255.255 #服务部
#注意:这里掩码不是255.255.255.0
acl devdep src 192.168.0.110-192.168.0.129/255.255.255.255 #开发部
acl mardep src 192.168.0.170-192.168.0.199/255.255.255.255 #市场部
acl offdep src 192.168.0.200-192.168.0.209/255.255.255.255 #办公室
acl goodep src 192.168.0.210-192.168.0.219/255.255.255.255 #物流部
acl mandep src 192.168.0.220-192.168.0.229/255.255.255.255 #经理室
acl strdep src 192.168.0.10-192.168.0.49/255.255.255.255 #小培训室
acl ltrdep src 192.168.0.50-192.168.0.99/255.255.255.255 #大培训室
acl res1 src 192.168.0.1-192.168.0.9/255.255.255.255 #保留1
acl res2 src 192.168.0.101-192.168.0.109/255.255.255.255 #保留2
acl res3 src 192.168.0.230-192.168.0.255/255.255.255.255 #保留3
acl regular_days_lunch time M T W H F 11:31-12:59 #工作日午休上网时间
acl regular_days_morning time M T W H F 00:00-07:59 #工作日上午上网时间
acl regular_days_night time M T W H F 17:01-23:59 #工作日下午上网时间
acl weekend_days time A S 00:00-23:59 #双休日上网时间
http_access allow serdep regular_days_morning
http_access allow serdep regular_days_lunch
http_access allow serdep regular_days_night
http_access allow serdep weekend_days
http_access allow devdep
http_access allow mardep
http_access allow goodep
http_access allow mandep
http_access allow strdep regular_days_morning
http_access allow strdep regular_days_lunch
http_access allow strdep regular_days_night
http_access allow ltrdep regular_days_morning
http_access allow ltrdep regular_days_lunch
http_access allow ltrdep regular_days_night
http_access deny all
3、在/etc/rc.d/rc.local中加入下列代码:
if [ "$RUNLEVEL"="3" -o "$RUNLEVEL"="5" ]; then
/sbin/iptables -F INPUT
/sbin/iptables -F FORWARD
/sbin/iptables -F -t nat
/sbin/iptables -P FORWARD DROP
/sbin/iptables -A FORWARD -s 192.168.0.123/32 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.0.120/32 -j ACCEPT
/sbin/iptables -A FORWARD -d 192.168.0.123/32 -j ACCEPT
/sbin/iptables -A FORWARD -d 192.168.0.120/32 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.123/32 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.120/32 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
fi
4、启动SQUID服务,运行/etc/rc.d/rc.local;
5、配置客户机(内网中所有要上网的机器),浏览器的代理服务器设为192.168.0.100,端口设为你指定的SQUID的代理端口。 192.168.0.123和192.168.0.120不用设置代理服务器,只要把它们的网关设为192.168.0.100就可以了。 ============================== 早已经解决了。
不过还是感谢楼主。(你的有些长了)
把rc.loal贴上来给大家共享。
代码: #!/bin/sh -e
echo "1" > /proc/sys/net/ipv4/ip_forward
#清除现有的规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#清除现有的规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 222.88.17.42
#INPUT
iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#input要开放端口22(SSH的默认端口)
iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT
#开放端口80
iptables -A INPUT -p tcp -i eth1 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 53 -j ACCEPT
#forward
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -m iprange --src-range 192.168.0.2-192.168.0.26 -j ACCEPT
iptables -I FORWARD -m iprange --src-range 192.168.0.30-192.168.0.254 -m time --timestart 11:00 --timestop 13:00 -j ACCEPT
iptables -I FORWARD -m iprange --src-range 192.168.0.30-192.168.0.254 -m time --timestart 16:00 --timestop 22:00 -j ACCEPT
exit 0