发新话题
打印

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

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

经常看到一些网络中流传的 iptables 脚本在开头的位置大多是如下内容
复制内容到剪贴板
代码:
#!/bin/sh
#
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe  ip_nat_ftp
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
iptables -P INPUT DROP

摘自 http://bbs.chinaunix.net/viewthread.php?tid=712506
有的是这样的
复制内容到剪贴板
代码:
# 2.0 载入模组
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH EXTIF INIF INNET
modprobe ip_tables > /dev/null 2>&1
modprobe iptable_nat > /dev/null 2>&1
modprobe ip_nat_ftp > /dev/null 2>&1
modprobe ip_nat_irc > /dev/null 2>&1
modprobe ip_conntrack > /dev/null 2>&1
modprobe ip_conntrack_ftp > /dev/null 2>&1
modprobe ip_conntrack_irc > /dev/null 2>&1

摘自 http://linux.vbird.org/linux_server/0250simple_firewall.php#simple_firewall_script
网上流传的东西未必就都是正确的,针对上面一些误区,我来做一下详细说明
(上面第二个出自鸟哥的脚本,我们只讨论技术,没有得罪的意思 ^_^)



1、modprobe ip_tables
当 iptables 对 filter、nat、mangle 任意一个表进行操作的时候,会自动加载 ip_tables 模块
另外,iptable_filter、iptable_nat、iptable_mangle 模块也会自动加载,情形例如
复制内容到剪贴板
代码:
# lsmod
Module                  Size  Used by    Not tainted
iptable_mangle          2136   0  (autoclean) (unused)
iptable_filter          1708   0  (autoclean) (unused)
ip_tables              12832   2  [iptable_mangle iptable_filter]
8139too                13704   1
mii                     2544   0  [8139too]
reiserfs              183376   2  (autoclean)
raid1                  13068   1  (autoclean)
md                     44480   2  [raid1]
因此,脚本里不用写 modprobe ip_tables



2、modprobe ip_conntrack
ip_conntrack 是状态检测机制,state 模块要用到
当 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 时,ip_conntrack 自动加载,例如
复制内容到剪贴板
代码:
# lsmod
Module                  Size  Used by    Not tainted
ipt_state                536   1  (autoclean)
ip_conntrack           25096   0  (autoclean) [ipt_state]
iptable_filter          1708   1  (autoclean)
ip_tables              12832   2  [ipt_state iptable_filter]
8139too                13704   1
mii                     2544   0  [8139too]
reiserfs              183376   2  (autoclean)
raid1                  13068   1  (autoclean)
md                     44480   2  [raid1]
另外,modprobe ip_conntrack_ftp 时也会自动加载 ip_conntrack

因此,脚本里不用写 modprobe ip_conntrack



3、modprobe ip_conntrack_ftp
ip_conntrack_ftp 是本机做 FTP 时用的
ip_nat_ftp 是通过本机的 FTP 需要用到的(若你的系统不需要路由转发,没必要用这个)
当 modprobe ip_nat_ftp 时,系统自动会加载 ip_conntrack_ftp 模块,例如
复制内容到剪贴板
代码:
# lsmod
Module                  Size  Used by    Not tainted
ip_nat_ftp              2736   0  (unused)
iptable_nat            18040   4  [ip_nat_ftp]
ip_tables              12544  12  [iptable_filter iptable_nat]
ip_conntrack_ftp        3856   1
ip_conntrack           20268   3  [ip_nat_ftp iptable_nat ip_conntrack_ftp]
8139too                13704   1
mii                     2544   0  [8139too]
reiserfs              183376   2  (autoclean)
raid1                  13068   1  (autoclean)
md                     44480   2  [raid1]
因此,当需要用到 ip_nat_ftp 时,脚本里不用写 modprbe ip_conntrack 和 modprobe ip_conntrack_ftp



4、iptables -P OUTPUT DROP
http://phorum.study-area.org/vie ... 175c3f06d03f#145378
除非你明白 filter 中 OUTPUT 链的作用,除非你想限制 Linux 本机上网
否则,不要 iptables -P OUTPUT DROP!




5、先设置规则,还是先设置默认策略
不少脚本都是这样写的
复制内容到剪贴板
代码:
iptables -F xxx
iptables -X
iptables -P INPUT DROP
modprobe ip_nat_ftp
之后才是具体规则
iptables -P INPUT DROP 是什么意思?
设置默认规则为 DROP,也就是说如果数据包没有被链中规则匹配,则默认按默认规则处理
试想,假如你在远程调试一个脚本,当前 filter 表的 INPUT 链默认规则是 DROP,iptables -F 后意味着什么?
因此,我建议大家

先设置默认规则为 ACCEPT
然后添加具体链的规则
最后设置默认规则为 DROP
若用基于 RedHat(CentOS) 的发行版,可以用 service iptables stop 来卸载内核中与 iptables 和 netfilter 有关的东西
一个人活得精彩
封存于 0612141938(133)

TOP

呵呵,你到成IPTABLES专家了
what's this?

TOP

回复#1

所以调试脚本的时候最好 是在本机上
路漫漫其修远兮,吾将上下而求索

TOP

学习中...............

TOP

通过网络远程配置 iptables 不太可靠。万一弄错就一失足成千古恨了。还是真人出场通过本地控制台配置,或者通过串口远程配置比较保险。

[ 本帖最后由 neo 于 2007-2-1 11:02 编辑 ]

TOP

回复 #5 neo 的帖子

我已经被自己锁过四次了~

TOP

呵呵,那些脚本没有什么错误的吧!?要看实际情况的!还有,公司里一般配置都是INPUT DROP啊,并没有什么不对啊!我个人感觉那些脚本还是非常不错的!想想看,你的Kernel里的Iptables模块没有自动加载呢?呵呵!我很菜,只是随便发表一些愚见,对事不对人!

TOP

引用:
公司里一般配置都是INPUT DROP啊,并没有什么不对啊!
我前面提到的是 OUTPUT 链,而不是 INPUT 链,你看错了  
引用:
我个人感觉那些脚本还是非常不错的!想想看,你的Kernel里的Iptables模块没有自动加载呢?
首先,kernel 里加载的不是 iptables 模块,而是 netfilter 模块
其次,若不能自动加载,那只能说明你的 kernel 的 module depend 有问题,不会出现你所说的那种情况的
一个人活得精彩
封存于 0612141938(133)

TOP

发新话题