iptables学习使用笔记

本文档的Copyleft归rosetta所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性。
         最近在学习netfilter框架,少不了来学习它的控制工具iptables。
         先来了解一下iptables的历史。iptables 的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是 ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
       他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)。
        总得来说就是netfilter由内核实现, iptables只是用户层工具,用户通过iptables工具来配置规则,最终由netfilter使规则生效。明白了netfilter和iptables的关系后再去学习它们心理就有把握些了。
        
1,NetFilter在协议栈中定义了五个钩子函数:
        1.PREROUTING (路由前)
        2.INPUT (数据包流入口)
        3.FORWARD (转发管卡)
        4.OUTPUT(数据包出口)
        5.POSTROUTING(路由后)
     
          引用网上的一副图:
        NF_IP_PRE_ROUTING(ip_rcv)-------->NF_IP_FORWARD(ip_forward)--------->NF_IP_POST_ROUTING(ip_output)
                        |                                                       ^
                        |                                                        |
                       ∨                                                       |
                 NF_IP_LOCAL_IN                   NF_IP_LOCAL_OUT
              (ip_local_deliver)                           (ip_local_out)
2,iptables策略
         防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
        
3,实际例子iptables的使用。
        下面结合实际iptables例子,然后讲解其格式,更详细的可看man  iptables
        环境如下:
        实验主机:VMware CentOS release 5.4, IP:192.168.95.228/24
        控制主机:win7  IP:192.168.95.165/24

        首先在95.228中开启iptables服务,service iptables restart,并确保setup中的防火墙安全级别为启用。

        通用命令:
        1),查看当前规则列表:
                iptables -L -n -v --line-number(--line-number为了查看规则序号)
                iptables -L -t nat
         2), 清空规则
                iptables -F //清空全部规则
                或者使用iptables -F -t nat
                iptables -t nat -F PREROUTING //清空指定规则
        
        首先把实验主机默认规则设为DROP,丢弃所有数据包, 然后尝试使用ssh登陆和ping请求,无法完成登陆,无法ping通,现在相当于与世隔绝了。
        然后通过增加规则,使用控制主机可以ping通实验主机。
        设置DROP:
                   iptables -P INPUT DROP
                 iptables -P OUTPUT DROP
                 iptables -P FORWARD DROP
        设置过滤规则:
        iptables -t filter  -A INPUT -s 192.168.95.165/32 -d 192.168.95.228/42 -p tcp --dport 22 -j ACCEPT
        iptables -t filter -A OUTPUT -s 192.168.95.228/32 -d 192.168.95.165/32 -p tcp --sport 22 -j ACCEPT
        增加以上两条规则后,使用控制主机可以通过ssh登陆。

         iptables -t filter -A INPUT -s 192.168.95.165/32 -d 192.168.95.228/32 -p icmp -j ACCEPT
         iptables -t filter -A OUTPUT -s 192.168.95.228/32 -d 192.168.95.165/32 -p icmp -j ACCEPT
        增加以上两条规则后,使用控制主机可以ping通实验主机。

4,命令讲解
        1)、规则写法:      
        iptables定义规则的方式比较复杂:
        格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
                -t table :4个filter nat mangle raw
       filter:一般的过滤功能
       nat:用于nat功能(端口映射,地址映射等)
       mangle:用于对特定数据包的修改
       raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能           

 COMMAND:定义如何对规则进行管理
                chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
                CRETIRIA:指定匹配标准
                -j ACTION :指定如何进行处理
        2)、COMMAND
                  -A:追加,在当前链的最后新增一个规则
                 -I num : 插入,把当前规则插入为第几条。
                    -I 3 :插入为第三条
                 -R num:Replays替换/修改第几条规则
                 -D num:删除,明确指定删除第几条规则
           格式,在命令和NUM之前需要指定对哪条链操作,比如:iptables -D INPUT3
        3)通用匹配
              -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
                IP | IP/MASK | 0.0.0.0/0.0.0.0
                而且地址可以取反,加一个“!”表示除了哪个IP之外
            -d:表示匹配目标地址
            -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
            -i eth0:从这块网卡流入的数据
                流入一般用在INPUT和PREROUTING上
            -o eth0:从这块网卡流出的数据
                流出一般在OUTPUT和POSTROUTING上

        -p tcp :TCP协议的扩展。一般有三种扩展
            --dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
            --dport 21  或者 --dport 21-23 (此时表示21,22,23)
            --sport:指定源端口
             -p udp:UDP协议的扩展
         -p icmp:icmp数据报文的扩展
                --icmp-type:
                echo-request(请求回显),一般用8 来表示
                所以 --icmp-type 8 匹配请求回显数据包
                echo-reply (响应的数据包)一般用0来表示

        4)、-j ACTION
            常用的ACTION:
            DROP:丢弃
           REJECT:明示拒绝
            ACCEPT:接受
                custom_chain:转向一个自定义的链
            DNAT
            SNAT
            MASQUERADE:源地址伪装
            REDIRECT:重定向:主要用于实现端口重定向
            MARK:打防火墙标记的
            RETURN:返回
                在自定义链执行完毕后使用返回,来返回原规则链。

本文是按以下文章写的一个适合自己理解的学习笔记,而且不全面,原文写的比较详细。
http://blog.chinaunix.net/uid-26495963-id-3279216.html


        
        







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值