天天看点

【好文备份】--可以定时控制网段的上网/关网(nat)

用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

继续阅读