iptables:一些网络中流传的 iptables 脚本的误区

经常看到一些网络中流传的iptables脚本在开头的位置大多是如下内容

#!/bin/sh

#
modprobeipt_MASQUERADE
modprobeip_conntrack_ftp
modprobeip_nat_ftp
iptables-F
iptables-tnat-F
iptables-X
iptables-tnat-X
iptables-PINPUTDROP

摘自http://bbs.chinaunix.net/viewthread.php?tid=712506
有的是这样的

#2.0载入模组
PATH=/sbin:/bin:/usr/sbin:/usr/bin
exportPATHEXTIFINIFINNET
modprobeip_tables>/dev/null2>&1
modprobeiptable_nat>/dev/null2>&1
modprobeip_nat_ftp>/dev/null2>&1
modprobeip_nat_irc>/dev/null2>&1
modprobeip_conntrack>/dev/null2>&1
modprobeip_conntrack_ftp>/dev/null2>&1
modprobeip_conntrack_irc>/dev/null2>&1



网上流传的东西未必就都是正确的,针对上面一些误区,我来做一下详细说明
(上面第二个出自鸟哥的脚本,我们只讨论技术,没有得罪的意思^_^)



1、modprobeip_tables
当iptables对filter、nat、mangle任意一个表进行操作的时候,会自动加载ip_tables模块
另外,iptable_filter、iptable_nat、iptable_mangle模块也会自动加载,情形例如
#lsmod
ModuleSizeUsedbyNottainted
iptable_mangle21360(autoclean)(unused)
iptable_filter17080(autoclean)(unused)
ip_tables128322[iptable_mangleiptable_filter]
8139too137041
mii25440[8139too]
reiserfs1833762(autoclean)
raid1130681(autoclean)
md444802[raid1]

因此,脚本里不用写modprobeip_tables[/color]



2、modprobeip_conntrack
ip_conntrack是状态检测机制,state模块要用到
当iptables-AINPUT-mstate--stateRELATED,ESTABLISHED-jACCEPT时,
ip_conntrack自动加载,例如
#lsmod

ModuleSizeUsedbyNottainted
ipt_state5361(autoclean)
ip_conntrack250960(autoclean)[ipt_state]
iptable_filter17081(autoclean)
ip_tables128322[ipt_stateiptable_filter]
8139too137041
mii25440[8139too]
reiserfs1833762(autoclean)
raid1130681(autoclean)
md444802[raid1]

另外,modprobeip_conntrack_ftp时也会自动加载ip_conntrack

[color=red]因此,脚本里不用写modprobeip_conntrack[/color]



3、modprobeip_conntrack_ftp
ip_conntrack_ftp是本机做FTP时用的
ip_nat_ftp是通过本机的FTP需要用到的(若你的系统不需要转发,没必要用这个)
当modprobeip_nat_ftp时,系统自动会加载ip_conntrack_ftp模块,例如

#lsmod
ModuleSizeUsedbyNottainted
ip_nat_ftp27360(unused)
iptable_nat180404[ip_nat_ftp]
ip_tables1254412[iptable_filteriptable_nat]
ip_conntrack_ftp38561
ip_conntrack202683[ip_nat_ftpiptable_natip_conntrack_ftp]
8139too137041
mii25440[8139too]
reiserfs1833762(autoclean)
raid1130681(autoclean)
md444802[raid1]

因此,当需要用到ip_nat_ftp时,脚本里不用写modprbeip_conntrack和modprobeip_conntrack_ftp


4、iptables-POUTPUTDROP
除非你明白filter中OUTPUT链的作用,除非你想限制Linux本机上网

否则,不要iptables-POUTPUTDROP!



5、先设置规则,还是先设置默认策略
不少脚本都是这样写的

iptables-Fxxx

iptables-X

iptables-PINPUTDROP

modprobeip_nat_ftp

之后才是具体规则
iptables-PINPUTDROP是什么意思?
设置默认规则为DROP,也就是说如果数据包没有被链中规则匹配,则默认按默认规则处理
试想,假如你在远程调试一个脚本,当前filter表的INPUT链默认规则是DROP,iptables-F后意味着什么?
因此,我建议大家
[color=red]
先设置默认规则为ACCEPT
然后添加具体链的规则
最后设置默认规则为DROP
若用基于RedHat(CentOS)的发行版,可以用serviceiptablesstop来卸载内核中与iptables和netfilter有关的东西

Tags:  iptables端口映射 iptablesnat linuxiptables iptables

延伸阅读

最新评论

发表评论