iptables基础

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能

iptables只是Linux防火墙的命令行管理工具而已,位于用户空间,真正实现防火墙功能的是 netfilter,位于内核空间,它是Linux内核中实现包过滤的内部结构

iptables的四表五链

iptables内置了4张表,分别为raw,managle,nat,filter,其实现的功能如下

  filter: 过滤,防火墙
  nat: 即network address translation, 网络地址转换
  mangle:拆解报文,做出修改,封装报文
  raw:连接追踪机制

这4张表的优先级是:raw–>mangle–>nat–>filter

iptables定义了5条链,分别是PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING,称为称为钩子函数。5条链的作用如下

  INPUT:进来的数据包应用此规则链中的策略
  OUTPUT:外出的数据包应用此规则链中的策略
  FORWARD:转发数据包时应用此规则链中的策略
  PREROUTING:对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
  POSTROUTING:对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

iptables可以在这5处地方写规则,当数据包经过每一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包

iptables表和链的关系
这里写图片描述
注:在CentOS 7中NAT表增加了INPUT链(CentOS 6没有),源地址转换(SNAT)也可以写在INPUT链上

数据包的流向路线

这里写图片描述

  流入:PREROUTING --> INPUT   ,即是图中①--->②
  流出:OUTPUT --> POSTROUTING ,即是图中⑤--->⑥
  转发:PREROUTING --> FORWARD --> POSTROUTING,即是图中 ①--->③--->④--->⑥

iptables的基本语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转给其它链处理)

-t 表名

 表名可以是filter, nat, mangle, raw,省略时为filter

命令选项

    链管理:
        -F:flush,清空规则链;省略链,表示清空指定表上的所有的链
        -N:new, 创建新的自定义规则链
        -X:delete-chain, 删除用户自定义的空的规则链
        -Z:zero,清零,置零规则计数器
        -P:Policy,为指定链设置默认策略;对filter表中的链而言,默认策略通常有ACCEPT, DROP, REJECT
        -E: rename,重命令自定义链;引用计数不为0的自定义链,无法改名,也无法删除
    规则管理:
        -A:append,将新规则追加于指定链的尾部
        -I:insert,将新规则插入至指定链的指定位置
        -D:delete,删除指定链上的指定规则
            有两种指定方式:
                (1) 指定匹配条件
                (2) 指定规则编号
        -R:replace,替换指定链上的指定规则
    查看:
        -L:list,列出指定链上的所有规则;
        -n: numberic,以数字格式显示地址和端口号
        -v: verbose,显示规则详细信息;
            -vv, -vvv  显示规则更详细信息
        --line-numbers:显示规则编号
        -x: exactly, 显示计数器计数结果的精确值  
    其它:
        -V:version,查看版本
        -h:help,获取帮助 

链名

链名可以是 PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING,也可以是自定义链

条件匹配

基本匹配:
            [!] -s, --src, --source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围,!表示取反
            [!] -d, --dst, --destination IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围,!表示取反
            -p, --protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议
            -i, --in-interface IFACE:数据报文的流入接口;仅能用于PREROUTING, INPUT及FORWARD链上
            -o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上

扩展匹配:格式为 -m macth_name --spec_options ,其中 macth_name 为扩展名, --spec_options为扩展的的选项,有隐式扩展和显示扩展两类

        隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m tcp|udp|icmp 选项
         -p tcp
                --dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口
                --sport PORT[-PORT]:源端口,可以是单个端口或连续多个端口
                --tcp-flags LIST1 LIST2:匹配指定的TCP标记,有两个参数列表,列表内部用逗号为分隔符,两个列表之间用空格分开,
                      LIST1用作参数检查,LIST2用作参数匹配。可用标志有:
                            SYN( 同步; 表示开始会话请求 ), ACK(应答),
                            FIN(结束; 结束会话),RST(复位;中断一个连接) ,
                            PSH(推送; 数据包立即发送),URG(紧急 ), 
                            ALL(指选定所有的标记),NONE(指未选定任何标记)                                                                           
                --syn:SYN标志设置为1,其它标志未设置,相当于--tcp-flags ALL SYN      

         -p udp
                --dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口
                --sport PORT[-PORT]:源端口,可以是单个端口或连续多个端口

         -p icmp
                --icmp-type,常用数字表示其类型:
                    0:echo-reply(回显应答,即ping应答)
                    8: echo-request(回显请求,即ping请求)

         显式扩展: 必须使用-m选项指定使用的扩展,常用的显示扩展有:
                multiport,iprange,string,time,connlimit,limit,state等

-j 目标动作或跳转

   ACCEPT: 接受
   DROP: 丢弃
   REJECT: 拒绝,使用--reject-with选项可以提示信息,有以下可用值
              icmp-net-unreachable
              icmp-host-unreachable
              icmp-port-unreachable
              icmp-proto-unreachable
              icmp-net-prohibited
              icmp-host-prohibited  
              icmp-admin-pro-hibited
           未做设置设置的话默认是icmp-port-unreachable
   RETURN: 返回调用链
   REDIRECT:端口重定向
             --to-ports
   LOG: 记录日志
        --log-level   记录日志级别,有debug,info,notice,warning,error,      crit,alert,emerg 
        --log-prefix   给记录日志加上标签,最多29个字符
   MARK:做防火墙标记
   DNAT:目标地址转换
         --to-destination  
   SNAT:源地址转换
         --to-source
   MASQUERADE:地址伪装
   自定义链:由自定义链上的规则进行匹配检查

iptables添加规则时的考量点

  a 要实现哪种功能:判断添加在哪张表上
  b 报文流经的路径:判断添加在哪个链上

iptables添加规则时遵循的法则

  a 同类规则(访问同一应用),匹配范围小的放上面;
  b 不同类规则(访问不同应用),匹配到报文频率较大的放上面;
  c 将那些可由一条规则描述的多个规则合并为一个

查看iptables规则
下面是CentOS 6安装好后的默认iptables规则

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
20736   26M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
   37  1936 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 13144 packets, 569K bytes)
 pkts bytes target     prot opt in     out     source               destination         

这些字段对应的含义如下

  pkts:由规则或链所匹配到的报文的个数
  bytes:由规则或链匹配到的所有报文大小之和
  taregt:匹配成功后采取的动作
  prot:规则对应的协议
  opt:规则对应的选项
  in:数据包流入接口
  out:数据包流出接口
  source:规则对应的源地址,可以是一个ip,也可以是一个网段,0.0.0.0/0表示任意地址
  destination:规则对应的目标地址,可以是一个ip,也可以是一个网段,0.0.0.0/0表示任意地址

下面来设置iptables常见简单策略(主机地址为172.16.8.20)

清空iptables规则(远程连接的话先确认INPUT,OUTPUT,FORWARD默认策略为ACCEPT)

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -X
[root@localhost ~]# iptables -Z

放行SSH端口

[root@localhost ~]# iptables -A INPUT -d 172.16.8.20 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 172.16.8.20 -p tcp --sport 22 -j ACCEPT

设置INPUT,OUTPUT,FORWARD默认策略为DROP

[root@localhost ~]# iptbales -P INPUT DROP
[root@localhost ~]# iptables -P FORWARD DROP
[root@localhost ~]# iptables -P OUTPUT DROP

设置主机能往外ping,外面主机无法ping进来

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p icmp --icmp-type 8 -j ACCEPT

放行本地会环接口

[root@localhost ~]# iptables -I INPUT 2 -i lo -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT 2 -o lo -j ACCEPT

放行DNS端口

[root@localhost ~]# iptables -A INPUT -d 172.16.8.20 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 172.16.8.20 -p udp --sport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -d 172.16.8.20 -p udp --sport 53 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 172.16.8.20 -p udp --dport 53 -j ACCEPT

保存iptables规则

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables

[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

重载iptables规则

[root@localhost ~]# iptables-restore < /etc/sysconfig/iptables

[root@localhost ~]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

这样一个简单基础的iptables 规则就建立起来了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值