免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 782 | 回复: 0
打印 上一主题 下一主题

netfilter/iptables 简介 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-16 22:05 |只看该作者 |倒序浏览

http://www.ibm.com/developerworks/cn/linux/network/s-netip/index.html
建立规则和链
      
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。
通过使用 netfilter/iptables 系统提供的特殊命令
        iptables ,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
      
      

        $ iptables  [-t table] command [match] [target]
      
      
表(table)
      

        [-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。
有三种可用的表选项:
        filter 、
        nat 和
        mangle 。该选项不是必需的,如果未指定,

        filter 用作缺省表。
      
      
filter 表用于一般的信息包过滤,它包含
        INPUT 、
        OUTPUT 和
        FORWARD 链。nat 表用于要转发的信息包,它包含
        PREROUTING 、
        OUTPUT 和
        POSTROUTING 链。
如果信息包及其头内进行了任何更改,则使用 mangle 表。
该表包含一些规则来标记用于高级路由的信息包,该表包含
        PREROUTING 和
        OUTPUT 链。
      
      
        注:
        PREROUTING 链由指定信息包一到达防火墙就改变它们的规则所组成,而
        POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
      
      
命令(command)
      
上面这条命令中具有强制性的 command 部分是
        iptables 命令的最重要部分。
它告诉
        iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。
以下是最常用的一些命令:
      
      

  •          
                -A 或
                --append :
             
    该命令将一条规则附加到链的末尾。
             
    示例:
             

                $ iptables -A INPUT -s 205.168.0.1 -j ACCEPT
             
    该示例命令将一条规则附加到
              INPUT 链的末尾,确定来自源地址 205.168.0.1 的信息包可以
              ACCEPT 。
            

  •          
                -D 或
                --delete :
             
    通过用
              -D 指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。
    下面的示例显示了这两种方法。
             
    示例:
             

                $ iptables -D INPUT --dport 80 -j DROP
                  
                                    $ iptables -D OUTPUT 3
                
             
    第一条命令从
              INPUT 链删除规则,它指定
              DROP 前往端口 80 的信息包。第二条命令只是从
              OUTPUT 链删除编号为 3 的规则。
            

  •          
                -P 或
                --policy :
             
    该命令设置链的缺省目标,即策略。
    所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。
             
    示例:
             

                $ iptables -P INPUT DROP
             
    该命令将
              INPUT 链的缺省目标指定为
              DROP 。这意味着,将丢弃所有与
              INPUT 链中任何规则都不匹配的信息包。
            

  •          
                -N 或
                --new-chain :
             
    用命令中所指定的名称创建一个新链。
             
    示例:
             

                $ iptables -N allowed-chain
             
            

  •          
                -F 或
                --flush :
             
    如果指定链名,该命令删除链中的所有规则,
    如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。
             
    示例:
             

                $ iptables -F FORWARD
                  
                                    $ iptables -F
                
             
            

  •          
                -L 或
                --list :
             
    列出指定链中的所有规则。
             
    示例:
             

                $ iptables -L allowed-chain
             
            

      
匹配(match)
      
iptables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。
匹配分为两大类:
        通用匹配
        特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。
下面是一些重要的且常用的通用匹配及其示例和说明:
      
      

  •          
                -p 或
                --protocol :
             
    该通用协议匹配用于检查某些特定协议。
    协议示例有
              TCP 、
              UDP 、
              ICMP 、用逗号分隔的任何这三种协议的组合列表以及
              ALL (用于所有协议)。
              ALL 是缺省匹配。可以使用
              ! 符号,它表示不与该项匹配。
             
    示例:
             

                $ iptables -A INPUT -p TCP, UDP
                  
                                    $ iptables -A INPUT -p ! ICMP
                
             
    在上述示例中,这两条命令都执行同一任务 — 它们指定所有
              TCP 和
              UDP 信息包都将与该规则匹配。
    通过指定
              ! ICMP ,我们打算允许所有其它协议(在这种情况下是
              TCP 和
              UDP ),
    而将
              ICMP 排除在外。
            

  •          
                -s 或
                --source :
             
    该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用
              ! 符号,表示不与该项匹配。缺省源匹配与所有 IP 地址匹配。
             
    示例:
             

                $ iptables -A OUTPUT -s 192.168.1.1
                  
                                    $ iptables -A OUTPUT -s 192.168.0.0/24
                  
                                    $ iptables -A OUTPUT -s ! 203.16.1.89
                
             
    第二条命令指定该规则与所有来自 192.168.0.0 到 192.168.0.24 的 IP 地址范围的信息包匹配。第三条命令指定该规则将与
    除来自源地址 203.16.1.89 外的任何信息包匹配。
            

  •          
                -d 或
                --destination :
             
    该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。
    该匹配还允许对某一范围内 IP 地址进行匹配,可以使用
              ! 符号,表示不与该项匹配。
             
    示例:
             

                $ iptables -A INPUT -d 192.168.1.1
                  
                                    $ iptables -A INPUT -d 192.168.0.0/24
                  
                                    $ iptables -A OUTPUT -d ! 203.16.1.89
                
             
            

      
目标(target)
      
我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。
除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:
      

  •          
                ACCEPT :
             
    当信息包与具有
              ACCEPT 目标的规则完全匹配时,
    会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。
    该目标被指定为
              -j ACCEPT 。
            

  •          
                DROP :
             
    当信息包与具有
              DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。
    该目标被指定为
              -j DROP 。
            

  •          
                REJECT :
             
    该目标的工作方式与
              DROP 目标相同,但它比
              DROP 好。和
              DROP 不同,
              REJECT 不会在服务器和客户机上留下死套接字。
    另外,
              REJECT 将错误消息发回给信息包的发送方。该目标被指定为
              -j REJECT 。
             
    示例:
             

                $ iptables -A FORWARD -p TCP --dport 22 -j REJECT
             
            

  •          
                RETURN :
             
    在规则中设置的
              RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。
    如果链是如
              INPUT 之类的主链,则使用该链的缺省策略处理信息包。
    它被指定为
              -jump RETURN 。示例:
             

                $ iptables -A FORWARD -d 203.16.1.89 -jump RETURN
             
            

      
还有许多用于建立高级规则的其它目标,如
        LOG 、
        REDIRECT 、
        MARK 、
        MIRROR

        MASQUERADE 等。
      
      
保存规则
      
现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。
但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。
所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则,
那么必须将该规则集保存在文件中。可以使用
        iptables-save命令来做到这一点:
      
      

        $ iptables-save > iptables-script
      
      
现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统,
都可以使用
        iptables-restore命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:
      
      

        $ iptables-restore iptables-script
      
      
如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化 shell 脚本中。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4847/showart_341355.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP