码迷,mamicode.com
首页 > 其他好文 > 详细

iptables详解

时间:2015-08-11 19:19:00      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:iptables

    防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在主机或网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。

1.iptables表

    1).filter:过滤
        INPUT、FORWARD和OUTPUT
    2).nat:地址转换
        PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)
    3).mangle:修改报文原数据

        PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING
    4).raw:
        PREROUTING、OUTPUT

2.iptables链

五个钩子函数(hook functions),也叫五个规则链。

    1).PREROUTING (路由决策前)

    2).INPUT (数据包流入口)

    3).FORWARD (转发管卡)

    4).OUTPUT(数据包出口)

    5).POSTROUTING(路由决策后)

    这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。

注意:

    iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 

    iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。用户不可以删除自定义非空链。

    规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

3.规则的写法

iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作

    -t TABLE :指定表

    COMMAND:定义如何对规则进行管理

    CHAIN:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的

    CRETIRIA:指定匹配条件

    -j ACTION :指定如何进行处理

4.COMMAND详解

    管理规则:
        -A:附加一条规则,添加在链的尾部
        -I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
        -D CHAIN [num]: 删除指定链中的第num条规则;
        -R CHAIN [num]: 替换指定的规则;
    管理链:
        -F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
        -P CHAIN: 设定指定链的默认策略;
        -N:自定义一个新的空链
        -X: 删除一个自定义的空链
        -Z:置零指定链中所有规则的计数器;
        -E oldname newname: 重命名自定义的链;
    查看类:
        -L: 显示指定表中的规则;
            -n: 以数字格式显示主机地址和端口号;
            -v: 显示链及规则的详细信息
            -vv:
            -x: 显示计数器的精确值
            --line-numbers: 显示规则号码

5.匹配条件详解

    通用匹配

         -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:指定源端口

        --tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)

            对于它,一般要跟两个参数:

        1.检查的标志位

        2.必须为1的标志位

        --tcpflags syn,ack,fin,rst syn   =    --syn

        表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn

            -p udp:UDP协议的扩展

                --dport

                --sport

            -p icmp:icmp数据报文的扩展

                --icmp-type:

        echo-request(请求回显),一般用8 来表示

        所以 --icmp-type 8 匹配请求回显数据包

        echo-reply (响应的数据包)一般用0来表示

        显示扩展

            state: 状态扩展
                结合ip_conntrack追踪会话的状态
                    NEW: 新连接请求
                    ESTABLISHED:已建立的连接
                    INVALID:非法连接
                    RELATED:相关联的
                -m state --state NEW,ESTABLISHED -j ACCEPT

            multiport: 离散的多端口匹配扩展
                --source-ports
                --destination-ports
                --ports
            -m iprange:地址范围匹配扩展
                --src-range
                --dst-range

            -m connlimit: 连接数限制
                ! --connlimit-above n

            -m limit
                --limit RATE     每时间单位允许多少个请求
                --limit-burst     一次最多允许多少个请求

            -m string:字符串过滤
                --algo {bm|kmp}    指定算法
                --string "STRING"    指定过滤的字符串

6.ACTION详解

    常用的ACTION:

    DROP:悄悄丢弃

        一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表

    REJECT:明示拒绝

    ACCEPT:接受

    custom_chain:转向一个自定义的链

    DNAT

    SNAT

    MASQUERADE:源地址伪装(外网地址动态获取时使用)

    REDIRECT:重定向:主要用于实现端口重定向

    MARK:打防火墙标记的

    RETURN:返回

        在自定义链执行完毕后使用返回,来返回原规则链

参考资料:

http://blog.chinaunix.net/uid-26495963-id-3279216.html

iptables详解

标签:iptables

原文地址:http://wangyongbin.blog.51cto.com/8964308/1683581

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!