iptables

iptables简介

  iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

iptables基础

  规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。

iptables和netfilter:

  虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。

  • netfilter:netfilter组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

  • iptables:iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

iptables的规则表和链

  表(tables):提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
  链(chains):数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

i2.png

规则链:

  • PREROUTING(路由前):对数据包作路由选择前应用此链中的规则,所有的数据包进来的时侯都先由这个链处理。

  • INPUT(输入队列):进来的数据包应用此规则链中的策略。

  • FORWARD(输出队列):转发数据包时应用此规则链中的策略。

  • OUTPUT(转发队列):外出的数据包应用此规则链中的策略。

  • POSTROUTING(路由后):对数据包作路由选择后应用此链中的规则,所有的数据包出来的时侯都先由这个链处理。

规则表:

  • Filter表:过滤数据包, 对应三个链INPUT、FORWARD、OUTPUT。

  • Nat表:用于网络地址转换(IP、端口),对应三个链PREROUTING、POSTROUTING、OUTPUT。

  • Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS,对应五个链PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。

  • Raw表:决定数据包是否被状态跟踪机制处理,对应两个链OUTPUT、PREROUTING。

  同一链上的不同的表的规则的应用优先级(高–>低): raw——mangle——nat——filter

iptables的报文流向

  1、当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2、如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3、如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

i1.png

管理和设置iptables规则

iptables的基本语法格式:

  iptables [-t table] SUBCOMMAND chain [matches...] [-j target]  

  iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

命令选项:

    链管理:
        -N:new,新增一条自定义链
        -X:delete,删除自定义的空链
        -P:policy,设置链的默认策略
            ACCEPT:允许数据包通过
            DORP:直接丢弃数据包,不给任何回应信息
            REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息
        -E:renname,重命名自定义的未被引用(引用计数为0)的链

    规则管理:
        -A:append,追加,默认为最后一个
        -I:insert,插入,默认为第一个
        -D:delete,删除,指定链中的某一条规则,可以按规则序号和内容删除
        -R:replace,替换,指定链中的某一条规则,可以按规则序号和内容替换
        -F:flush,清空
        -Z:zero,置0,将所有表的所有链的字节和数据包计数器清零
        -S:selected,以iptables-save命令的格式显示链上的规则

    查看:
        -L:list,列出规则
        -n:numeric,以数字格式显示地址和端口
        -v:verbose,详细信息,-vv,-vvv
        -x:exactly,显示计数器的精确值而非单位换算后的结果
        --line-numbers:显示链上的规则编号

        组合:-nvL

匹配条件:

    基本匹配:netfilter自带的匹配机制
        [!] -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
            IP | IP/MASK | 0.0.0.0/0.0.0.0
        [!] -d:目标地址匹配
        [!] -i:限制报文流入的接口,只能用于PRETOUTING,INPUT及FORWD
        [!] -o:限制报文流出的接口,只能用于OUTPUT,FORWARD及POSTROUTING

            注:加"!"表示取反

    扩展匹配:需要加载扩展模块,经由扩展模块引入的匹配机制,-m matchname
        隐式扩展:可以不用使用-m选项专门加载相应模块,前提是要使用-p选项指明可匹配何种协议
            [!] -p:限制协议,tcp,udp,icmp,icmpv6,esp,ah,sctp,mh or "all"
                tcp:隐含指明了"-m tcp",有专用选项:
                    [!] --sport port[:port]:匹配报文中的tcp首部的源端口,可以是端口范围
                    [!] --dport port[:port]:匹配报文中的tcp首部的目标端口,可以是端口范围
                    [!] --tcp-flags mask comp:检查报文中的mask指明的tcp标志位,而这些标志位comp中必须为1

                udp:隐含指明的"-m udp",有专用选项:
                    [!] --sport port[:port]:匹配报文中的udp首部的源端口,可以是端口范围
                    [!] --dport port[:port]:匹配报文中的udp首部的目标端口,可以是端口范围

                icmp:隐含指明了"-m icmp",有专用选项:
                    [!] --icmp-type {type[/code]|typename}
                        type/code:
                            0/0:echo reply
                            8/0:echo request

        显式扩展:必须由-m选项专门加载相应模块
            multiport:多端口匹配,以离散方式定义多端口匹配,最多可以指定15个端口
                [!] --sports port[,port|,port:port]...
                [!] --dports port[,port|,port:port]...
                [!] --ports port[,port|,port:port]...

                示例:
                    iptables -I INPUT -s 0/0 -d 10.1.8.93 -p tcp -m multiport --dport 22,80 -j ACCEPT

            iprange:指明一段连续的ip地址范围作为源地址或目标地址匹配
                [!] --src-range from[-to]:源地址范围
                [!] --dst-range from[-to]:目标地址范围

            string:对报文中的应用层数据做字符串匹配检测
                --algo {bm|kmp}:(bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
                [!] --string pattern:给定要检查的字符串模式
                [!] --hex-string pattern:给定要检查的字符串模式

                示例:
                    iptables -I OUTPUT -d 0/0 -s 10.1.8.93 -p tcp -m string -algo bm --string "old" -j REJECT

            time:根据收到的报文的时间/日期与指定的时间/日期范围进行匹配
                --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]:起始日期时间
                --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间

                --timestart hh:mm[:ss]:起始时间
                --timestop hh:mm[:ss]:结束时间

                [!] --monthdays day[,day...]:匹配一个月中的哪些天
                [!] --weekdays day[,day...]:匹配一周的哪些天

            connlimit:根据客户端主机做并发连接数限制,及每客户端最多可同时发起的连接数量
                --connlimit-upto n:连接数量小于等于n则匹配
                --connlimit-above n:连接数量大于n则匹配

                示例:
                    iptables -A INPUT -s 0/0 -d 172.18.100.6 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT

            limit:基于令牌桶算法对报文的速率做匹配
                -limit rate[/second|/minute|/hour|/day]
                --limit-burst number

                示例:
                    ptables -R INPUT 3 -d 172.18.100.6 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT

目标动作:

    ACCERT
    DORP
    REJECT
    RETURN:返回调用的链
    REDIRECT:端口重定向
    LOG:日志
    MARK:防火墙标记
    DNAT:目标地址转换
    SNAT:源地址转换
    MASQERADE:地址伪装

规则的有效期限

  iptables命令添加的规则,手动删除之前,其生效期限为kernel的生命周期。

保存规则:
  CentOS 6:

    # service iptables save

    # iptables-save > /etc/sysconfig/iptables

    # iptables-save > /PATH/TO/SOME_RULL_FILE

   CentOS 7:

    # iptables -S > /PATH/TO/SOME_RULL_FILE

    # iptables-save > /PATH/TO/SOME_RULL_FILE       

重载预存的规则:
    # iptables-restore < /PATH/TO/SOME_RULL_FILE

  CentOS 6:
    service iptables restart
      会自动从/etc/sysconfig/iptables文件中重载规则        

自动生效规则文件中的规则:
  1、把iptables命令放在脚本文件中,让脚本文件开机自动运行
    /etc/rc.d/rc.local
      /usr/bin/iptables.sh

  2、用规则文件保存规则,开机自动重载命令
    /etc/rc.d/rc.local
      iptables-restore < /PATH/TO/SOME_RULL_FILE

  

 

原创文章,作者:641348038@qq.com,如若转载,请注明出处:http://www.178linux.com/68774

(0)
641348038@qq.com641348038@qq.com
上一篇 2017-02-16
下一篇 2017-02-16

相关推荐

  • N25第七周博客作业

    第七周博客作业 1、 创建一个10G分区,并格式为ext4文件系统; fdisk/dev/sdb à nàpàlast扇区:+10Gàwàpartx -a /dev/sdb   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; mke2fs  -t ext4 -b 2…

    Linux干货 2017-02-20
  • Linux发展史

    Linux 操作系统是UNIX操作系统的一种克隆系统。它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长。下文简要介绍了Linux发展史。 1969年,美国贝尔实验室的Ken.Thompson和D…

    Linux干货 2016-10-17
  • 0805课堂练习与作业

    练习1 1、找出ifconfig命令结果中本机的所有IPv4地址 2、查出分区空间使用率的最大百分比值 3、查出用户UID最大值的用户名、UID及shell类型 4、查出/tmp的权限,以数字方式显示 5、统计当前连接本机的每个远程主机IP的连接数,并按从大 到小排序 练习2 1、显示/proc/meminfo文件中以大小s开头的行;(要求:使 用两种方式)…

    Linux干货 2016-08-07
  • N25_第二周作业

      1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相关示例演示。  cp命令:                                  &nbsp…

    Linux干货 2016-12-13
  • 文本处理三剑客之Gawk ✧

        AWK可以说是一种语言,他有着自己的语法,可以实现函数定义,变量赋值,条件选择(循环,判断,选择)…总之是值得深入研究一下的。     AWK的起源:是个报告生成器,可以格式化文本输出内容,它的命名是由Aho,Weinberger,Kernighan三位作者首…

    Linux干货 2016-09-21
  • 马哥教育网络班21期-第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;     #fdisk /dev/sdb (n;p;1;+10G;w)     #partx -a -n 1 /dev/sdb     (1…

    Linux干货 2016-08-22

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-22 22:45

    很详细的iptables介绍,这部分很多同学缺少这样的总结,在工作实际中遇到问题就比较难排查,虽说实际工作通常关闭了,但是掌握这部分知识还是非常重要的,很赞。