iptables基础详解

一.iptables基础认知
二.iptables使用格式
  一.iptables简介
   1.Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或LAN、服务器或连接 LAN 和因特网的代理服务器, 则Iptables有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
   2.netfilter/iptables过滤防火墙系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。虽然netfilter/iptables包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
   3.netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。通俗的理解为防火墙框架,承载并生效规则。
   4.iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。俗称为规则管理工具。
    netfilter:功能
       filter(“防火”):包过滤
NAT:Network Address Translation
mangle:拆解报文,做出修改,而后重新封装
raw:关闭nat表上启用的连接追踪机制
     iptables:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
     允许用户自定义规则链;它们需要手动关联至指定的”钩子“;
    功能(表)<–>钩子
filter:input, forward, output
nat:prerouting, input, output, postrouting
mangle:prerouting, input, forward, output, postrouting
raw:prerouting, output
       优先级(由高而低):raw –> mangle –> nat –> filter
  iptables原理:

    iptables的原理主要是对数据包的控制,看下图:

     iptables基础详解

  
(1) 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
(2)如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会到    它。本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出。
(3)如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达       POSTROUTING链输出。
  规则、表和链
 1.规则(rules)
   规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处     理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议       (TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义      的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是      添加、修改和删除这些规则。
 2.链(chains)
    链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数      条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定      义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规        则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
  3.表(tables)

    表(tables)提供特定的功能,iptables内置了4个表,即raw表、filter表、nat表和mangle表,分别用于实现包     过滤,网络地址转换和包重构的功能。

        iptables基础详解

     
   (1)RAW表
    只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进。一但使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数包的链接跟踪处理了。
   (2)filter表
    主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。Filter表是默认的表,如果没有指定哪个表,iptables就默认使用fileter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),FORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改。(过滤,“防火墙”意义的核心所在)
   (3)nat表
     主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT(修改路由之前本地生成的数据包)
    (4) mangle表
      主要用于对指定数据包进行更改,在内核版本xx后的linux版本中该表包含的链为:INPUT(处理进入的数据包),FORWORD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),(修改即将到来的数据包)
   4.规则表之间的优先顺序:
     Raw—mangle—nat—filter
    规则链之间的优先顺序(分三种情况):
     第一种情况:入站数据流向
   从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
     第二冲情况:转发数据流向
  来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
     第三种情况:出站数据流向
   防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
   iptables是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的IP判断是否需要转送出去,接着就会跳到INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则链的过滤,并依照前述流程继续进行下一个规则链的过滤(注意:这一点与ipchains不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables可以进行纵横交错式的过滤(tables)而非链状过滤(chains)。ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(nat:postrouting)。
 二.iptables使用格式
   1.iptables命令格式
   iptables [-t 表] -命令 匹配 操作
  (1)-t 表
     表选项用于指定命令应用于哪个iptables内置表。
  (2)命令
     命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,如下表所示
        命令
     -P   –policy               《链名》 定义默认策略
     -L   –list                 《链名》 查看iptables规则列表
                                     -v, –verbose:详细信息
                                          -vv
                                     -n, –numeric:数字格式显示主机地址和端口号
                                     -x: –exact:显示计数器的精确值,而非圆整后的数据
                                     –line-numbers:列出规则时,显示其在链上的相应的编号
                                    -S  –list-rules [chain]:显示指定链的所有规则
     -A   –append               《链名》 在规则列表的最后增加一条规则
     -I   –insert               《链名》 在指定的位置插入一条规则
     -D   –delete chain rulenum 《链名》 根据规则编号删除规则
     -D   –delete chain rule-specification 根据规则本身删除规则
     -R   –replace              《链名》 替换规则列表中的某条规则
     -F   –flush                《链名》 删除表中所有规则
     -Z   –zero                 《链名》 将表中数据包计数器和流量计数器归零
                                   注意:每个规则都有两个计数器
                                       packets:被本规则所匹配到的所有报文的个数
                                       bytes:  被本规则所匹配到的所有报文的大小之和
     -X   –delete-chain         《链名》 删除用户自定义的引用计数为0的空链
     -v   –verbose              《链名》 与-L他命令一起使用显示更多更详细的信息
     -N   –new-chain chain:    《链名》 新建一个自定义的规则链:
     -E   –rename-chain old-chain new-chain 重命令链
   (3)匹配规则
     匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下表所示
      基本匹配                                            说明
     -i  –in-interface        网络接口名》     指定数据包从哪个网络接口进入
     -o  –out-interface       网络接口名》     指定数据包从哪个网络接口输出
     -p  –proto               协议类型         指定数据包匹配的协议,如TCP、UDP和ICMP等
     -s  –source              源地址或子网》   指定数据包匹配的源地址
         –sport               源端口号》       指定数据包匹配的源端口号
         –dport               目的端口号》     指定数据包匹配的目的端口号
     -m  –math                匹配的模块       指定数据包规则所用的过滤模块
     扩展匹配条件:
         隐式扩展:在使用-p选项指明了特定的协议时,无需再同时使用-m选项指明扩展模块的扩展机制: 
         显示扩展:必须使用-m选项指明要调用的扩展模块的扩展机制:
         隐式扩展:
             -p tcp:可直接使用tcp扩展模块的专用选项:
               [!] –source-port,–sport port[:port] 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 ;
               [!] –destination-port,–dport port[:port]   匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 ;
  [!] –tcp-flags mask comp  匹配报文中的tcp协议的标志位;Flags are: SYN ACK FIN RST URG PSH ALL NONE;
mask:要检查的FLAGS list,以逗号分隔;
comp:在mask给定的诸多的FLAGS中,其值必须为1的FLAGS列表,余下的其值必须为0;
–tcp-flags SYN,ACK,FIN,RST  SYN
–tcp-flags ALL ALL
–tcp-flags ALL NONE
[!] –syn: –tcp-flags SYN,ACK,FIN,RST  SYN
             -p udp:可直接使用udp协议扩展模块的专用选项:
                 [!] –source-port,–sport port[:port]
    [!] –destination-port,–dport port[:port]
              [!] –icmp-type {type[/code]|typename}
                     0/0: echo reply
                     8/0: echo request
          显示扩展:必须使用-m选项指明要调用的扩展模块的扩展机制:
              1、multiport
以离散或连续的 方式定义多端口匹配条件,最多15个;
[!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;
[!] –destination-ports,–dports port[,port|,port:port]…:指定多个目标端口;
# iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -j ACCEPT
 2、iprange
以连续地址块的方式来指明多IP地址匹配条件;
[!] –src-range from[-to]
[!] –dst-range from[-to]
# iptables -I INPUT -d 172.16。0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -m iprange –src-range 172.16.0.61-172.16.0.70 -j REJECT
 3、time
This  matches  if the packet arrival time/date is within a given range.
–timestart hh:mm[:ss]
–timestop hh:mm[:ss]
[!] –weekdays day[,day…]
[!] –monthdays day[,day…]
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–kerneltz:使用内核配置的时区而非默认的UTC;
 4、string
This modules matches a given string by using some pattern matching strategy. 
–algo {bm|kmp}
[!] –string pattern
[!] –hex-string pattern
–from offset
–to offset
~]# iptables -I OUTPUT -m string –algo bm –string “gay” -j REJECT
5、connlimit 
Allows  you  to  restrict  the  number  of parallel connections to a server per client IP address (or client address block).
–connlimit-upto n
–connlimit-above n
~]# iptables -I INPUT -d 172.16.0.7 -p tcp –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT
6、limit 
This  module  matches  at  a limited rate using a token bucket filter. 
–limit rate[/second|/minute|/hour|/day]
–limit-burst number
~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp –icmp-type 0 -j ACCEPT

7、state
     The “state” extension is a subset of the “conntrack” module.  “state” allows access to the connection tracking state for this packet.
[!] –state state
INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
NEW: 新连接请求;
ESTABLISHED:已建立的连接;
INVALID:无法识别的连接;
RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;
UNTRACKED:未追踪的连接;
state扩展:
内核模块装载:
nf_conntrack
nf_conntrack_ipv4
手动装载:
nf_conntrack_ftp 
追踪到的连接:
/proc/net/nf_conntrack
调整可记录的连接数量最大值:
/proc/sys/net/nf_conntrack_max
超时时长:
/proc/sys/net/netfilter/timeout
   iptables执行规则时,是从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则,执行后根据本规则的动作(accept,reject,log,drop等),决定下一步执行的情况,后续执行一般有三种情况。
   一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。
  一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行
  一种是中止所有规则队列的执行。
  2.iptables规则的动作
  iptables处理动作(跳转目标):
     -j targername [per-targer-option]
        简单target:ACCEPT(接受),DROP(丢弃)
        扩展target:
           REJECT
              –reject-with type
        LOG
          –log-level
          –log-perfix
    用户自定义链做为target:
   REJECT    拦阻该数据包,并返回数据包通知对方,可以返回的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。 范例如下:
   iptables基础详解
   LOG  将数据包相关信息记录在/var/log中,详细位置请查阅/etc/syslog.conf配置文件,进行完此处理动作后,将会继续比对其它规则。列如:
   iptables基础详解
  3.保存和载入规则
    保存:iptables-save > /PATH/TO/SOME_RULE_FILE
     重载:iptables-restore < /PATH/FROM/SOME_RULE_FILE
     -n,–noflush:不清除原有规则
     -t,–test:  仅分析生成规则集,但不提交
      CentOS 6:
          保存规则:
             service iptables save
             保存规则于/etc/sysconfig/iptables文件,覆盖保存:
          重载规则:
             service iptables restart
             默认重载/etc/sysconfig/iptables文件中的规则
          配置文件:/etc/sysconfig/iptables-config
       CentOS 7:
         (1) 自定义Unit File,进行iptables-restore
        (2)firewalldfuwu
        (3)自定义脚本
   规则优化的思路:
      使用自定义链管理特定应用的相关规则,模块化管理规则
            (1) 优先放行双方向状态为ESTABLISHED的报文;
(2) 服务于不同类别的功能的规则,匹配到报文可能性更大的放前面;
(3) 服务于同一类别的功能的规则,匹配条件较严格的放在前面;
(4) 设置默认策略:白名单机制
(a) iptables -P,不建议;
(b) 建议在规则的最后定义规则做为默认策略;

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

(0)
上一篇 2017-05-03 20:05
下一篇 2017-05-03 20:38

相关推荐

  • sed用户小结

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed [-nefri] ‘command’ 输入文本  …

    Linux干货 2016-08-12
  • 马哥教育网络班21期+第4周作业

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

    Linux干货 2016-08-02
  • N22-第一周作业

    1、描述计算机的组成及其功能    组成:        硬件:            CPU:运算器、控制器、寄存器、缓存     &nb…

    Linux干货 2016-08-15
  • ArchLinux折腾记

    刚接触linux的时候, 听到前辈说到这样一个系统,  说是linux 技能纯熟才能驾驭的了ArchLinux , 最近正好有个半天闲, 于是抽空,  佐以官方文档,  来认认真真的折腾一下ArchLinux Contents ArchLinux简介  准备工作  分区设置  基本功能安装 &nbs…

    Linux干货 2016-09-29
  • 马哥教育网络班21第五周练习作业

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

    Linux干货 2016-08-08
  • 磁盘文件系统基础(一)

    磁盘的主要硬件单元有:     1、磁头:通过电磁感应的方式对磁盘数据进行读写。     2、磁道:在磁盘自传过程中磁头划过的圆形轨迹,这些轨迹是肉眼看不见的特色磁化区域。     3、扇区:磁盘上的每个磁道被等分为若干个圆弧,这些圆弧被称…

    Linux干货 2016-10-27