iptables详解

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

链管理:

    -F: flush,清空规则链,省略链,表示清空指定表上的所有的链;

    -N:  new,创建新的自定义规则链;

    -X:  drop,删除用户自定义的空的规则链;

    -Z:   zero,清零,置零规则计数器;

    -P:  policy,为指定链设置默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;

    -E:  rename,重命名自定义链;注意:引用计数器不为0的自定义链,无法改名,也无法删除;


规则管理:    

    -A: append,将新规则追加于指定链的尾部;

    -I:  insert,将新规则插入至指定链的指定位置;

    -D:  delete,删除指定链上的指定规则

        有两种指定方式:

            1. 指定匹配条件

            2. 指定规则编号

    -R: replace,替换指定链上的指定规则;


查看规则:

    -L: list, 列出指定链上的所有规则;

        -n: numberic, 以数字格式显示地址的端口号;

        -v: verbose, 显示详细信息;

            还能用-vv,-vvv

            --line-numbers: 显示规则编号;

            -x: exactly, 显示计数器计数结果的精确值;


匹配条件:


    基本匹配:

        

[!] -s, --src, --source IP|Netaddr   检查报文中的源IP地址是否符合此处指定的地址范围;

[!] -d, --dst, --destination IP|Netaddr  检查报文中的目标IP是否符合此处指定的地址范围;

-p, --protocol {tcp|icmp|udp}: 检查报文中的协议,即ip首部中的protocols所标识的协议;

-i ,--in-interface IFACE: 数据报文的流入接口; 仅能用于PREROUTING,INPUT,FORWARD链上;

-o, --out-interface IFACE: 数据报文的流出接口;仅能用于FORWARD,OUTPUT及POSTROUTI

         NG上;


  扩展匹配:  -m macth_name --spec_options

        

        隐式扩展: 对-p 指明协议进行的扩展,可省略-m选项;

            -p tcp 

                --dport PORT[-PORT]: 目标端口,可以是单个端口或连续多个端口

--sport PORT[-PORT]: 源端口,…………

--tcp-flages LIST1 LIST2:  检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标志位必须为1,余下的必须为0,没有LIST1中指明的,不作检查;

SYN,ACK, FIN,RST,PSH, URG

--tcp-flags SYN,ACK,FIN,RST SYN

--syn  同上

-p udp

-p icmp

    --icmp-type 

可用数字表示其类型

0: echo-reply  回显应答

8: echo-request 回显请求


        显示扩展:必须使用-m 选项指定使用的扩展;(rpm -ql iptables | grep "\.so")

                帮助文档: 

                        centos 6: man iptables

centos 7: man iptables-extensions


                

        multiport扩展:

多端口匹配

以离散方式定义多端口匹配,最多指定15个;

[!] --source-ports,--sports port[,port|,port:port]... 指明多个源端口

[!] --destination-ports,--dports port[,port|,port:port]... 指明多个目标端口

[!] --ports port[,port|,port:port]...  不区分源和目标

#iptables -I INPUT -d 192.168.141.10 -p tcp -m multiport --dports 22,80 -j ACCEPT

#iptables -I OUTPUT -s 192.168.141.10 -p tcp -m multiport --sports 22,80 -j ACCEPT


    

        iprange扩展:

指明连续的(但一般是不能扩展为整个网络)IP地址范围时使用;

[!] --src-range from[-to]:  指明连续的源IP地址范围;

[!] --dst-range from[-to]:  指明连续的目标IP地址范围;


# iptables -I INPUT -d 192.168.141.10 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 192.168.141.190-192.168.141.200 -j ACCEPT

                # iptables -I OUTPUT -s 192.168.141.10 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 192.168.141.190-192.168.141.200 -j ACCEPT



        string扩展:

检查报文中出现的字符串

--algo {bm|kmp}

[!] --string pattern

# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT

time扩展

根据报文到达的时间与指定的时间范围进行匹配;

--datestart

--datesop

--timestart 

--timestop

--mothdays

--weekdays

例: 从0点到24点,不允许访问

iptables -I INPUT -d 192.168.141.10 -p tcp --dport 80 -m time --timestart 00:00 --timestop 23:59 -j REJECT


       connlimit扩展

根据每客户端IP(也可以是地址块)做并发连接数数量匹配

--connlimit-above n  : 连接的数量大于n

    # allow 2 telnet connections per client host

    iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT

        

                --connlimit-upto n: 连接的数量小于等于n


            # you can also match the other way around:

  iptables  -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT



        limit 扩展

    基于收发报文的速率做检查;

    令牌桶过滤器:

--limit-burst number

--limit rate[/second|/minute|/hour|/day]


        state扩展

            根据连接追踪机制来检查连接的状态;

    可追踪的连接状态:

                    NEW: 新发出的请求; 连接追踪模板中不存在此连接相关的信息条目,因此,将其识别为第一次发出的请求;

    ESTABLISHED: NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;

    RELATED: 相关的连接; 如FTP协议的命令连接与数据连接之间的关系;

    INVALIED: 无法识别的连接;


调整连接追踪功能所能够容纳的最大连接数量

                /proc/sys/net/nf_conntrack_max

已经追踪到并记录下的连接

/proc/net/nf_conntrack

不同协议或连接类型追踪的时长:

/proc/sys/net/netfilter


--state

#iptables -I INPUT -d 192.168.141.10 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

#iptables -I OUTPUT -s 192.168.141.10 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT


目标:

-j TARGET:  jump至指定的TARGET

    ACCEPT: 接受

    DROP:   丢度

    REJECT: 拒绝

    RETURN: 返回调用链

    REDIRECT: 端口重定向

    LOG:    记录日志

    MARK:   做防火墙标记

    DNAT:  目标地址转换

    SNAT:  源目标地址转换

    MASQUERADE: 地址伪装

自定义链: 由自定义链上的规则进行匹配检查




      本文转自limingyu0312  51CTO博客,原文链接:http://blog.51cto.com/limingyu/1958639,如需转载请自行联系原作者





相关文章
|
8月前
|
网络协议 网络安全 网络性能优化
|
安全 网络协议 Linux
扒一下一直不求甚解的 iptables
iptables 是用于配置 Linux 2.4.x 及更高版本包过滤规则集的用户空间命令行程序。它针对系统管理员。 由于网络地址转换 (NAT) 也是从包过滤规则集配置的,iptables 也用于此。 iptables 包还包括 ip6tables。ip6tables 用于配置 IPv6 包过滤器。
扒一下一直不求甚解的 iptables
|
网络协议 Linux 测试技术
iptables超全详解
数据包先经过PREOUTING,由该链确定数据包的走向:     1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;     2、若满足PREROUTING的nat表...
1860 0
|
网络协议 Linux 网络安全
|
网络协议 网络安全
|
网络协议 算法 网络安全
|
测试技术 Linux