LinuxSir.cn,穿越时空的Linuxsir!

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

我发现某些iptables的规则会导致系统无法正常关机。

[复制链接]
发表于 2009-6-20 11:00:15 | 显示全部楼层 |阅读模式
刚刚开始学iptables,写了两个规则,但是发现一点奇怪的问题,

系统是debian stable,

当我使用下面这个规则时,一切正常,

规则1:
  1. ################################################################################
  2. #! /bin/sh
  3. cmd="iptables"
  4. in="INPUT"
  5. out="OUTPUT"
  6. for="FORWARD"
  7. d="DROP"
  8. a="ACCEPT"
  9. nic="eth0"
  10. ################################################################################
  11. $cmd -F
  12. $cmd -X
  13. $cmd -Z
  14. ################################################################################
  15. # default policy
  16. $cmd -P $in $d
  17. $cmd -P $for $d
  18. $cmd -P $out $a
  19. ################################################################################
  20. # INPUT
  21. # lo
  22. $cmd -A $in -i lo -j $a
  23. # related and established
  24. $cmd -A $in -i $nic -m state --state RELATED,ESTABLISHED -j $a
  25. ################################################################################
复制代码


但是我觉得这个规则有点宽松,于是又写了一个规则,就是下面的这个,

但是,如果我使用下面的规则时,在系统关机的时候会卡住,系统提示:stopping portmap daemon...

然后就一直卡在那里。 :yun:

规则2:
  1. ################################################################################
  2. #! /bin/sh
  3. cmd="iptables"
  4. in="INPUT"
  5. out="OUTPUT"
  6. for="FORWARD"
  7. d="DROP"
  8. a="ACCEPT"
  9. nic="eth0"
  10. dns1="my.dns.server.1"
  11. dns2="my.dns.server.2"
  12. dhcp="192.168.0.1"
  13. p=" "
  14. outport_tcp="21 22 80 443 587 995 7000"
  15. outport_udp="123 "
  16. ################################################################################
  17. $cmd -F
  18. $cmd -X
  19. $cmd -Z
  20. ################################################################################
  21. # default policy
  22. $cmd -P $in $d
  23. $cmd -P $for $d
  24. $cmd -P $out $d
  25. ################################################################################
  26. # INPUT
  27. # lo
  28. $cmd -A $in -i lo -j $a
  29. # related and established
  30. $cmd -A $in -i $nic -m state --state RELATED,ESTABLISHED -j $a
  31. # ftp
  32. $cmd -A $in -i $nic -p tcp --dport 1024:65535 -j $a
  33. ################################################################################
  34. # OUTPUT
  35. # loop
  36. for p in $outport_tcp
  37. do
  38.     $cmd -A $out -p tcp --destination-port $p -j $a
  39. done
  40. for p in $outport_udp
  41. do
  42.     $cmd -A $out -p udp --destination-port $p -j $a
  43. done
  44. # dns
  45. $cmd -A $out -p udp -d $dns1 --destination-port 53 -j $a
  46. $cmd -A $out -p tcp -d $dns1 --destination-port 53 -j $a
  47. $cmd -A $out -p udp -d $dns2 --destination-port 53 -j $a
  48. $cmd -A $out -p tcp -d $dns2 --destination-port 53 -j $a
  49. # dhcp
  50. $cmd -A $out -p udp -d $dhcp --destination-port 67 -j $a
  51. ################################################################################
复制代码


使用"ps -aux | grep port"以后发现,不管使用那个规则,portmap都是运行的,

也就是说不是规则2导致了这个daemon运行,portmap本身就会运行,

但是规则2会导致portmap这个daemon在关机时无法关闭, :yun:

目前正在运行规则1,

谁有空,帮我看看我的规则有没有什么问题。
发表于 2009-6-20 11:09:42 | 显示全部楼层
您不需要 nfs 的话,portmap 服务可安全禁用。

看您的规则真费劲,绕那么多弯弯。
把 iptables-save 结果贴出来多直观。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-20 11:13:28 | 显示全部楼层
Post by 聚焦深空;1999738
您不需要 nfs 的话,portmap 服务可安全禁用。

看您的规则真费劲,绕那么多弯弯。
把 iptables-save 结果贴出来多直观。


本来我是写的很简单的,

后来我看别人都写成脚本,我觉得这么写倍有面子,

不过我还是觉得奇怪,因为我的规则里面没有ntp的相关内容。
回复 支持 反对

使用道具 举报

发表于 2009-6-20 12:33:03 | 显示全部楼层
Post by fender010;1999742
本来我是写的很简单的,

后来我看别人都写成脚本,我觉得这么写倍有面子,

不过我还是觉得奇怪,因为我的规则里面没有ntp的相关内容。


大多数时候写成脚本和使用变量是为了便于维护,不是为了面子。不知是不是Debian系用久了也会让人习惯了复杂,有些时候不必要的复杂反而弄巧成拙。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-20 12:38:49 | 显示全部楼层
Post by 狱卒;1999781
大多数时候写成脚本和使用变量是为了便于维护,不是为了面子。不知是不是Debian系用久了也会让人习惯了复杂,有些时候不必要的复杂反而弄巧成拙。


最开始的时候我的规则文件就是一行一行的iptables命令,

后来觉得iptables这个词太长了,就算是有supertab这个vim插件也感觉不方便,

又看别人使用变量我就模仿了一下,

这些规则即使是使用iptables命令一行一行的输进去还是会导致关机时卡住,

我测试的时候是设置cmd="echo",然后在普通用户下sh iptables.sh,

其实根本用不到防火墙,我没有开什么服务(ntp通过ntp.conf限定了不能查询),

但是我觉得这个规则没有什么不合法的东西,不应该导致portmap这个daemon无法关闭。
回复 支持 反对

使用道具 举报

发表于 2009-6-20 12:55:05 | 显示全部楼层
Post by fender010;1999784
最开始的时候我的规则文件就是一行一行的iptables命令,

后来觉得iptables这个词太长了,就算是有supertab这个vim插件也感觉不方便,

又看别人使用变量我就模仿了一下,

这些规则即使是使用iptables命令一行一行的输进去还是会导致关机时卡住,

我测试的时候是设置cmd="echo",然后在普通用户下sh iptables.sh,

其实根本用不到防火墙,我没有开什么服务(ntp通过ntp.conf限定了不能查询),

但是我觉得这个规则没有什么不合法的东西,不应该导致portmap这个daemon无法关闭。

如果不使用nfs的话,portmap服务可以关闭,或许你的第二个脚本应该加入一条$cmd -A $out -o lo -j $a再试试。
回复 支持 反对

使用道具 举报

发表于 2009-6-20 15:17:58 | 显示全部楼层
加上这条应该可以解决你的问题。

iptable 的规则最好你能够让规则看起来很清晰,以后调整也很方便

iptables -I INPUT -i lo -j ACCEPT
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-20 16:31:31 | 显示全部楼层
Post by 狱卒;1999788
如果不使用nfs的话,portmap服务可以关闭,或许你的第二个脚本应该加入一条$cmd -A $out -o lo -j $a再试试。


用这个搞定了,。  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-20 16:32:43 | 显示全部楼层
Post by sipingal;1999812
加上这条应该可以解决你的问题。

iptable 的规则最好你能够让规则看起来很清晰,以后调整也很方便

iptables -I INPUT -i lo -j ACCEPT


谢谢了,用
  1. iptables -I INPUT -[color="Red"]o[/color] lo -j ACCEPT
复制代码
搞定了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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