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 0726作业

    1,课堂练习 显示当前日期,格式:2016-08-08 显示前天是星期几 设置当前日期为2008-08-08 08:00 使用字符端登陆时,显示当前登录终端号,主机名和当前时间 1,首先我们知道当前登录信息的配置文件在/etc/issue中 2,然后我们查询帮助看看issue的具体描述查到了相关的mingetty的命令当中关于当中的一些选项就是我们需要的三个…

    Linux干货 2016-08-04
  • 马哥教育20期面授2班第一周课程练习1

    计算机基础   1,计算机系统           硬件系统            主机部分:中央处理器CPU(运算器ALU、控制器CU);  &nb…

    Linux干货 2016-07-29
  • 操作系统—Systemd

    Systemd 概述:       CentOS 6和之前版本采用SysVinit的系统启动进程管理体系,一般用户都可通过在/etc/inittab文件的配置,来个性化自己的系统启动序列。但也经常会由于特殊环境的硬件等关系问题,造成其串行的启动进程控制流,因为可能任务的阻塞而影响启动过程。     &nbsp…

    Linux干货 2016-09-24
  • Linux之磁盘管理

    Linux之磁盘管理       linux系统中, 一切都是文件, 而这些文件都是存储在磁盘中, 因此对于磁盘的管理是非常重要的, Linux磁盘管理的好坏, 直接关系到整个系统的性能问题, 本文主要介绍了磁盘结构, 分区类型, 管理分区, 管理文件系统, 挂载设备, 管理虚拟内存这几大项的内容.    &…

    Linux干货 2016-08-29
  • N26-第五周博客

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@localhost ~]# grep "^[[:space:]].*$" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; [root…

    系统运维 2017-02-10
  • 第四周作业新

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ]# cp -r /etc/skel /home/tuser1             &nb…

    2017-02-20

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-22 22:45

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