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

相关推荐

  • 计算机网络基础知识与Linux网络配置

    本文主要内容是: 1.讲述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 2、IP地址的分类有哪些?子网掩码的表示形式及其作用 3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。 4、如何给网络接口配置多个地址,有哪些方式? 5、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方…

    Linux干货 2016-11-14
  • 心清冷其若冰,志皎洁其若云

    第一篇,当做测试也做开始。 心清冷其若冰,志皎洁其若云。 这闹哄哄的人间啊,仿佛是一堆杂货。无奇不有,无所不能。情感,城市,人际。每天走在这杂乱里,需要有一颗清澈而安静的心,来面对。 会累的。就算是拥有了许多,也是会累的。偶尔,我们也会在深夜里泪流满面吧。偶尔,我们也会心烦意乱的不知所措吧。 太多欲望的人间,热闹的上演着各种剧本。太多空洞的灵魂,喧嚣着各种声…

    Linux干货 2016-11-28
  • 第五周博客作业

      感觉进入了年底,明显的时间不够,不管怎么说,还是要努力跟上学习的进度,不能给自己松懈找借口!  1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub/grub.co…

    Linux干货 2017-01-03
  • 加油吧!少年!—至我和我M25期的伙伴

    引用 衣带渐宽终不悔,为伊消得人憔悴。—王国维《人间词话》 转眼已到了27岁的年纪,不知道自己是否还称得上少年。公交上让座被小朋友成为叔叔也都是很多年的事了。哪怕再有一颗少年心现在也要肩负起整个家庭的责任。 从毕业已工作了将近六个年头,无聊的工作平凡的薪水已经使我厌倦。闭上眼睛以后需要赡养四个老人,还要照顾孩子以后这些难题映入脑海。曾经以为遥远的…

    Linux干货 2017-07-11
  • shell脚本基础

    程序是由指令加数据组成 编程风格分为过程式和对象时 过程式:以指令为中心,数据服务于指令,适合小型程序 对象式:以数据为中心,指令服务于数据,社和大型程序 高级语言的执行方式分为编译型和解释型 编译型:先将高级语言通过编译器编译成二进制代码再执行 解释型:程序编写完成后不转换成二进制代码,在使用时才通过解释器解释运行,不生成二进制程序 shell就是一种解释…

    Linux干货 2016-08-18
  • lvs-nat集群

    lvs-nat算法 nat模型样式 vs服务器:公网地址 172.18.250.253 私网地址 192.168.57.129 (DIP) 各私网服务器网关指向服务器DIP 各私网服务器做集群:web (telnet,ssh) 私网服务器使用httpd实现 rs私网服务器1 centos7 ip:192.168.57.132 rs私网服务器2 centos6…

    Linux干货 2017-05-15

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-22 22:45

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