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

相关推荐

  • 查找 -数据结构

    几种查找算法:顺序查找,折半查找,分块查找,散列表 一、顺序查找的基本思想:  从表的一端开始,向另一端逐个按给定值kx 与关键码进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与kx 相同的关键码,则查找失败,给出失败信息。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效…

    Linux干货 2015-07-28
  • 将两个局域网用openvpn连接起来

    考虑到我们做集群的时候需要用到可能有20台机器,可能我的要求跟别人的不一样的,我需要做20台左右的集群,不仅仅是会,而且需要非常熟练的搭建,最后通过脚步一键自动化部署安装。 目前我有两台电脑,一台可以运行7台,另一台可以运行12台左右,刚好可以满足的我的要求,但是我两台电脑都是设置的nat模式的网络,为什么我非要配置nat模式呢,根据集群架构思想,为了保证架…

    Linux干货 2017-05-01
  • 第一周

    #blog text 1. 描述计算机的组成及其功能。 2. 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 3. 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 4. 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、pow…

    Linux干货 2016-12-04
  • 学习Linux,记得有困难,找“男人”。

      对于Linux初学者而言,较短时间内需要涉及到几十个命令,而且每个命令还可辅以短选项、长选项…让初学者在实践时苦不堪言。   一头雾水时,请找Super"man"!  "man"的使用非常简单,命令行直接输入man COMMAND,如#man ls。此处的COMMAND均指…

    Linux干货 2016-01-15
  • MySQL管理应用入门(一)

    什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。 在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。 例如, 企业或事业单位的人事部…

    Linux干货 2017-07-08
  • centos 7.3二进制安装mariadb10.2.8

    1 rpm -qa mariadb* 2 getent passwd mysql useradd -d /app/mysqldb -r -m -s /sbin/nologin mysql 3 tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/cd /usr/local/ln -s mariadb…

    Linux干货 2017-10-16

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-22 22:45

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