QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2377|回复: 9

请问Iptables中NAT端口转换对应的问题

[复制链接]
发表于 2004-11-8 09:57:32 | 显示全部楼层 |阅读模式
现在为安全起见,需要把外网访问的端口范围整体偏移1000,一一对应,即外网访问1023端口,则转换到内网中的23端口,访问1021端口
则转换到21端口。使用Iptables如何实现?
我使用 下面命令,实现不了:
iptables -t nat -A PREROUTING -p tcp -d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-200
这条规则只是把1001-1200的目的端口转换为1-200中随机的一个,一般是从空闲端口中选取小的端口。
我测试得出,第一次,目的端口是1023,则转换为1,再来一个,端口是1021,则转换为2。

另外,问一下,如果转换前后的端口范围不一样,如下面Iptables 会导致什么样的现象呀?
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-100
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-300
望各位多多帮助。
发表于 2004-11-8 12:29:27 | 显示全部楼层
现在为安全起见,需要把外网访问的端口范围整体偏移1000,一一对应,即外网访问1023端口,则转换到内网中的23端口,访问1021端口
则转换到21端口。使用Iptables如何实现?
我使用 下面命令,实现不了:
iptables -t nat -A PREROUTING -p tcp -d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-200

要“一一对应”只能一条一条的加。

另外,问一下,如果转换前后的端口范围不一样,如下面Iptables 会导致什么样的现象呀?
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-100
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-300

只有第一条匹配的起作用。
回复

使用道具 举报

发表于 2004-11-8 12:39:55 | 显示全部楼层
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-100
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-300

按顺序执行,如果包复合其中的一条规则就不会在往下走了..因此就是楼上说的只有第一条起作用
回复

使用道具 举报

 楼主| 发表于 2004-11-8 13:23:33 | 显示全部楼层
我解释一下:
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-100
iptables -t nat -A PREROUTING -p tcp \
-d 211.96.22.25 --dport 1001:1200 -j DNAT --to- destination 192.168.1.1:1-300
我问的是上面两条分别会导致什么样的现象,不是两条规则都配置了。

另:如果要实现一一对应,转换前后端口号又不相同的情况真得只有一条一条的配置吗?那肯定是不可实现的,效率太低了。
回复

使用道具 举报

发表于 2004-11-8 13:34:11 | 显示全部楼层
这条规则只是把1001-1200的目的端口转换为1-200中随机的一个,一般是从空闲端口中选取小的端口。

这不是很明白吗? 只不过是“端口池”大小的问题而已。

另:如果要实现一一对应,转换前后端口号又不相同的情况真得只有一条一条的配置吗?那肯定是不可实现的,效率太低了。

你可以用脚本循环啊。
回复

使用道具 举报

 楼主| 发表于 2004-11-8 13:58:33 | 显示全部楼层
to:dannvcat
引用:
另:如果要实现一一对应,转换前后端口号又不相同的情况真得只有一条一条的配置吗?那肯定是不可实现的,效率太低了。

你可以用脚本循环啊。


用脚本循环,也只是把那么多的规则写道Netfilter中去比较方便吧。但是Iptables的规则还是增大了很多,我的防火墙运行起来后,还是要一条一条的匹配,效率还是很低呀
回复

使用道具 举报

发表于 2004-11-8 18:09:18 | 显示全部楼层
呵呵,我还以为你说的“效率”是指打字 :-)

LINUX 重定向的效率如何自己体会;至于这么多条规则,则是因你的古怪要求而起的。真的有必要吗? “为安全起见”,如此于安全有何好处? 就算是真有必要,需要开200个端口?


规则匹配的效率,要看你的编写技巧了。常用的放最前面,我想这个不需我说你也知道。
对于特殊规则、可以归类处理的规则,开新链处理。比如:[code:1]#定义新链 dant_chain
iptables -t nat -N dnat_chain
#到 211.96.22.25:1001 端口的 TCP 包重定向到 192.168.1.1:1
iptables -t nat -A dnat_chain -p tcp -d 211.96.22.25 --dport 1001 -j DNAT --to- destination 192.168.1.1:1
#211.96.22.25:1002 --> 192.168.1.1:2
iptables -t nat -A dnat_chain -p tcp -d 211.96.22.25 --dport 1002 -j DNAT --to- destination 192.168.1.1:2
  .
  .
  .

# 主链里,到 1001-1200 端口的 TCP 包转给自定义链 dnat_chain 处理,否则继续
iptables -t nat -A PREROUTING -p tcp -d 211.96.22.25 --dport 1001:1200 -j dnat_chain
  .
  .
  .
[/code:1]

这样可以减少主链的匹配次数。
还可以把端口范围划小一点,比如每 50 个开一个新链……

另外,主链的规则最好明确定义适用接口,如 -i eth0。
回复

使用道具 举报

 楼主| 发表于 2004-11-9 09:11:00 | 显示全部楼层
谢谢dannycat
回复

使用道具 举报

发表于 2004-11-14 09:06:32 | 显示全部楼层
楼主开这么多端口是不是很不安全。如果真想实现一一对应。既外网80--内网80
外网21--内网21也只需要打开对应的端口没必要把101-200这么多端口都打开。(不知道是不为可实验)
  
回复

使用道具 举报

 楼主| 发表于 2004-11-15 09:34:43 | 显示全部楼层
感谢大家的支持!
我的要求只是一个例子而已,不是一定要打开这么多端口,但是打开连续端口这种要求是肯定存在的,比如对于VOIP的应用,如果是使用H323协议的话,IAD处于防火墙之后,防火墙就需要根据VOIP的话路数打开UDP 7000之后的连续端口,还有其他一些端口。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-7 03:44 , Processed in 0.036004 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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