LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1206|回复: 7

如何控制局域网中某台机器只能收发E-Mail

[复制链接]
发表于 2005-3-10 11:47:01 | 显示全部楼层 |阅读模式
Linux服务器一台,双网卡:
eth0:内网,IP:192。168。1。250
eth1:外网,连接ADSL猫,没设IP,我是通过pppoe来上网的。
打开IP转发后,在iptables的nat表中增加下面一条命令其他机器就可以上网了
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE

可现在我想让192.168.1.200这台机器只能收发邮件而不能浏览网页上FTP之类的,该怎么写iptables命令
发表于 2005-3-10 13:10:55 | 显示全部楼层
试着运行一下下面的命令,更改一下FORWARD链,看是否有效.
iptables -A FORWARD -s 192.168.1.200 -p tcp --dport smtp -j ACCEPT
iptables -A FORWARD -s 192.168.1.200 -p tcp --dport pop3 -j ACCEPT
iptables -A FORWARD -s 192.168.1.200 -j DROP
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-12 14:12:48 | 显示全部楼层
现在有这样一个问题:
在iptables中的FORWARD链中,如果把他设置成默认ACCEPT,要过滤掉某些IP包只需要在其下添加DROP规则就可以;但是如果我把FORWARD设置成默认为DROP的话,要放行某些IP包在其下添加ACCEPT规则却不行。这是为什么呢
回复 支持 反对

使用道具 举报

发表于 2005-3-12 20:14:15 | 显示全部楼层
为何不把你的脚本贴出来呢?大家也好分析呀 !
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-13 11:49:48 | 显示全部楼层
*filter
:INPUT DROP [23879:2168611]
:FORWARD ACCEPT [623228:435409819]
:OUTPUT ACCEPT [773076:40220995]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -p icmp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21:23 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --dport 5631:5632 -j ACCEPT
-A INPUT -s 192.168.1.0/255.255.255.0 -p tcp -m tcp --dport 137:139 -j ACCEPT
-A INPUT -s 192.168.1.0/255.255.255.0 -p udp -m udp --dport 137:139 -j ACCEPT
COMMIT
# Completed on Sat Mar 12 13:06:21 2005
# Generated by iptables-save v1.2.11 on Sat Mar 12 13:06:21 2005
*nat
REROUTING ACCEPT [31017:2553743]
OSTROUTING ACCEPT [65:7408]
:OUTPUT ACCEPT [43:6264]
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination
192.168.1.200:80
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 5631:5632 -j DNAT --to-destination
192.168.1.201:5631-5632
-A POSTROUTING -s 192.168.1.200/255.255.255.248 -o ppp0 -j MASQUERADE
COMMIT

上面是我的iptables脚本
比如说我只想让200-207的IP可以自由上网不受限制,其他的IP呢根把他要什么服务我就在FORWARD中开放那项服务,没开放的他就不能使用。如果我把脚本改成下面的样子就不行:

*filter
:INPUT DROP [23879:2168611]
:FORWARD DROP [623228:435409819]
:OUTPUT ACCEPT [773076:40220995]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -p icmp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21:23 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --dport 5631:5632 -j ACCEPT
-A INPUT -s 192.168.1.0/255.255.255.0 -p tcp -m tcp --dport 137:139 -j ACCEPT
-A INPUT -s 192.168.1.0/255.255.255.0 -p udp -m udp --dport 137:139 -j ACCEPT
-A FORWARD -s 192.168.1.200/29 -p tcp -j ACCEPT
-A FORWARD -s 192.168.1.0/26 -p tcp -m multiport --dport 25,110 -j ACCEPT

COMMIT
# Completed on Sat Mar 12 13:06:21 2005
# Generated by iptables-save v1.2.11 on Sat Mar 12 13:06:21 2005
*nat
REROUTING ACCEPT [31017:2553743]
OSTROUTING ACCEPT [65:7408]
:OUTPUT ACCEPT [43:6264]
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination
192.168.1.200:80
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 5631:5632 -j DNAT --to-destination
192.168.1.201:5631-5632
-A POSTROUTING -s 192.168.1.200/255.255.255.248 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.1.0/26 -o ppp0 -j MASQUERADE
COMMIT
回复 支持 反对

使用道具 举报

发表于 2005-3-13 21:46:19 | 显示全部楼层
当你的filter表中的FORWARD 链的默认规则是DROP,那么凡是FORWARD数据包在你的FORWARD链中没有找到相应的规则就会被DROP,对吧,但是看你的FORWARD链中的规则只有两条:

-A FORWARD -s 192.168.1.200/29 -p tcp -j ACCEPT
-A FORWARD -s 192.168.1.0/26 -p tcp -m multiport --dport 25,110 -j ACCEPT
第一条规则是当源ip是192.168.1.200-192.168.1.207之间的,并且为tcp协议的数据包就ACCEPT,但是你要知道上网的时候除了tcp协议数据包还有其它协议的包,比如当你进行DNS查询的时候要使用udp(目地端口为53),如果你不对udp协议数据包ACCEPT ,那么根据你的默认规则就是DROP,这样的话你的机器只能打ip地址上网,如果打域名就会出现unknow host ...,还有很多的协议包,icmp。
所以我想如果你想要你指定的机器上网,是否可以不指定协议而直接这样:
-A FORWARD -s 192.168.1.100/29 -j ACCEPT
请试试看,不管成功与否,望回复一下。
随便问一下你加的第二条FORWARD规则,我不太明白你用它做什么?请说明一下
-A FORWARD -s 192.168.1.0/26 -p tcp -m multiport --dport 25,110 -j ACCEPT
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 10:09:10 | 显示全部楼层
不行,把FORWARD链设为默认DROP,再在FORWARD链中添加ACCEPT的规则就是不行;
但如果把FORWARD链设为默认ACCEPT,再在FORWARD链中添加DROP的规则就可以起作用了。
实在不是知道这是为什么
-A FORWARD -s 192.168.1.0/26 -p tcp -m multiport --dport 25,110 -j ACCEPT
上面这条语句的作用就是让1-62的IP只能收发邮件

实在无法用先禁止一切,再开放所要的服务那我只能先开放所有FORWARD规则,再禁止除25,110端口之外的所有其他端口了,可是用multiport和!该怎么用一句iptables命令来写
iptables -A FORWARD -p tcp -s 192.168.1.0/26 -m multiport --dport ! 25,110 -j DROP
这样写好象不对啊
回复 支持 反对

使用道具 举报

发表于 2005-3-14 14:12:46 | 显示全部楼层
Post by jxgzoyke
不行,把FORWARD链设为默认DROP,再在FORWARD链中添加ACCEPT的规则就是不行;
但如果把FORWARD链设为默认ACCEPT,再在FORWARD链中添加DROP的规则就可以起作用了。
实在不是知道这是为什么
-A FORWARD -s 192.168.1.0/26 -p tcp -m multiport --dport 25,110 -j ACCEPT
上面这条语句的作用就是让1-62的IP只能收发邮件

实在无法用先禁止一切,再开放所要的服务那我只能先开放所有FORWARD规则,再禁止除25,110端口之外的所有其他端口了,可是用multiport和!该怎么用一句iptables命令来写
iptables -A FORWARD -p tcp -s 192.168.1.0/26 -m multiport --dport ! 25,110 -j DROP
这样写好象不对啊

-A FORWARD -s 192.168.1.100/29 -j ACCEPT
-A FORWARD -d 192.168.1.100/29 -j ACCEPT
加上上面的两句试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表