首页 > 代码库 > iptables基础知识

iptables基础知识

iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得它很复杂,但是一旦你理解iptables的工 作原理,你会发现其实它很简单。

首先介绍iptables的结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成。如下图所示。 iptables基础知识详解图: IPTables Table, Chain, and Rule Structure

            技术分享

 

一、iptables的表与链
iptables具有Filter, NAT, Mangle, Raw四种内建表。
1. Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
    INPUT链 – 处理来自外部的数据。
    OUTPUT链 – 处理向外发送的数据。
    FORWARD链 – 将数据转发到本机的其他网卡设备上。

2. NAT表
NAT表有三种内建链:
    PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
    POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
    OUTPUT链 – 处理本机产生的数据包。

3. Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
    PREROUTING
    OUTPUT
    FORWARD
    INPUT
    POSTROUTING

4. Raw表
Raw表用于处理异常,它具有2个内建链:
    PREROUTING chain
    OUTPUT chain

5.小结
下图展示了iptables的三个内建表:

     技术分享

 

二、IPTABLES 规则(Rules)
牢记以下三点式理解iptables规则的关键:
    Rules包括一个条件和一个目标(target)
    如果满足条件,就执行目标(target)中的规则或者特定值。
    如果不满足条件,就判断下一条Rules。

目标值(Target Values)
下面是你可以在target里指定的特殊值:
    ACCEPT – 允许防火墙接收数据包
    DROP – 防火墙丢弃包
    QUEUE – 防火墙将数据包移交到用户空间
    RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。

 

 iptables定义规则的方式比较复杂:
    格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
          -t table :    3个filter nat mangle
          COMMAND:定义如何对规则进行管理
          chain:       指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
         CRETIRIA:   指定匹配标准
        -j ACTION : 指定如何进行处理

详解COMMAND:
1.链管理命令(这都是立即生效的)
    -P :设置默认策略的(设定默认门是关着的还是开着的)
        默认策略一般只有两种
        iptables -P INPUT (DROP|ACCEPT)  默认是关的/默认是开的
        比如:
          iptables -P INPUT DROP      //这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
    -F: FLASH,清空规则链的(注意每个链的管理权限)
        iptables -t nat -F PREROUTING
        比如:
     iptables -t nat -F      // 清空nat表的所有链
    -N:NEW 支持用户新建一个链
            iptables -N inbound_tcp_web      //表示附在tcp表上用于检查web的。
    -X: 用于删除用户自定义的空链
            使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
    -E:用来Rename chain主要是用来给用户自定义的链重命名
            -E oldname newname
    -Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
            iptables -Z :清空
 
2.规则管理命令
         -A:追加,在当前链的最后新增一个规则
         -I num : 插入,把当前规则插入为第几条。
           比如: -I 3 :插入为第三条
         -R num:Replays替换/修改第几条规则
            格式:iptables -R 3 …………
         -D num:删除,明确指定删除第几条规则
        
3.查看管理命令 “-L”
    附加子命令
    -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
    -v:显示详细信息
    -vv
    -vvv :越多越详细
    -x:在计数器上显示精确值,不做单位换算
    --line-numbers : 显示规则的行号
    -t nat:显示所有的关卡的信息
 
详解匹配标准
1.通用匹配:源地址目标地址的匹配
    -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
          IP | IP/MASK | 0.0.0.0/0.0.0.0
         而且地址可以取反,加一个“!”表示除了哪个IP之外
    -d:表示匹配目标地址
    -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
    -i eth0:从这块网卡流入的数据
        流入一般用在INPUT和PREROUTING上
    -o eth0:从这块网卡流出的数据
        流出一般在OUTPUT和POSTROUTING上
        
2.扩展匹配
2.1隐含扩展:对协议的扩展
    -p tcp :TCP协议的扩展。一般有三种扩展
        --dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,
                             比如:--dport 21  或者 --dport 21-23 (此时表示21,22,23)
        --sport:指定源端口
        --tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
            对于它,一般要跟两个参数:
              1.检查的标志位
              2.必须为1的标志位
            --tcpflags syn,ack,fin,rst syn   =    --syn
            //表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。
       对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
    -p udp:UDP协议的扩展
            --dport
            --sport
    -p icmp:icmp数据报文的扩展
            --icmp-type:
              echo-request(请求回显),一般用8 来表示
              所以 --icmp-type 8 匹配请求回显数据包
              echo-reply (响应的数据包)一般用0来表示
                  
2.2显式扩展(-m)
     扩展各种模块
      -m multiport:表示启用多端口扩展
      之后我们就可以启用比如 --dports 21,23,80
                  
        
详解-j ACTION
    常用的ACTION:
    DROP:悄悄丢弃    // 一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
    REJECT:明示拒绝
    ACCEPT:接受
        custom_chain:转向一个自定义的链
    DNAT
    SNAT
    MASQUERADE:源地址伪装
    REDIRECT:重定向:主要用于实现端口重定向
    MARK:打防火墙标记的
    RETURN:返回
        在自定义链执行完毕后使用返回,来返回原规则链。

 

三、练习
 1.清空所有iptables规则
iptables -F

2.配置默认链策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

3.新增iptables规则,接收目标端口为22的数据包
iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT

4.只允许46.166.150.22访问本机的80端口。如果要设置其他ip或端口,改改即可。
iptables -I INPUT -s 46.166.150.22 -p TCP --dport 80 -j ACCEPT

 4.拒绝所有其他数据包
iptables -A INPUT -j DROP
 
 
5.假如我们允许自己ping别人,但是别人ping自己ping不通如何实现呢?
分析:对于ping这个协议,进来的为8(ping),出去的为0(响应).我们为了达到目的,需要8出去,允许0进来
  在出去的端口上:iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
  在进来的端口上:iptables -A INPUT   -p  icmp --icmp-type 0 -j ACCEPT

 

iptables基础知识