iptables命令

Linux之iptables详解及tcpdump

Linux之iptables(四、网络防火墙及NAT)
iptables规则重启自动生效--永久生效

 

iptables命令
使用通用格式 
iptables [-t tables] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
————————————————
# iptables  [-t tables] [-AI 链] [-io 网络接口] [-p 协议] [-s 来源IP/网域] [-d 目标IP/网域]  -j [ACCEPT|DROP|REJECT|LOG] 
# iptables  [-t tables] [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源IP/网域] [--sport 埠口范围] [-d 目标IP/网域] [--dport 埠口范围] -j [ACCEPT|DROP|REJECT] 

COMMAND 

 


  1. 链管理

    1.1 -N :   new,自定义一条新的规则链
    ~]# iptables -N in_icmp

    1.2 -X : delete/drop, 删除自定义的规则链,指明名字删除一个, 不指明将删除多个
                 杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )            

    ~]# iptables -X in_icmp
    ~]# iptables -X -t nat   #也可以一个一个table的清除<清除具体某一个table的规则>

    1.3 -P : policy, 设置默认策略, 指明是黑名单还是白名单,对于filter表中的链而方, 其默认策略有:
         1.3.1 ACCEPT : 接受 
         1.3.2 DROP : 丢弃
         1.3.3 REJECT : 拒绝

    ~]# iptables -t filter -P FORWARD ACCEPT
    ~]# iptables -t filter -P FORWARD DROP

    1.4 -E : 重命名自定义链, 引用计数不为0的自定义链, 不能被重命名或者删除

    ~]# iptables -E OLD_NAME NEW_NAME
  2. 规则管理
    2.1 -A : append, 追加规则
    2.2 -I : insert, 插入规则,需要指明位置,省略时表示第一条
    2.3 -D : delete, 删除规则
         ** 指明规则号删除
         ** 指明规则本身
     

    #查看原有规则
    ~$ sudo iptables-save -t filter
    # Generated by iptables-save v1.4.14 on Tue May 19 01:51:33 2020
    *filter
    :INPUT ACCEPT [23230:2572269]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [29398:3001269]
    COMMIT
    # Completed on Tue May 19 01:51:33 2020
    
    #添加一个规则
    
    ~$ sudo iptables -A INPUT -p tcp --syn -m state --state NEW -j ACCEPT
    
    #再次查看
    umbra@UMB-BOX-094143:/etc/umbra$ sudo iptables-save -t filter
    # Generated by iptables-save v1.4.14 on Tue May 19 01:52:58 2020
    *filter
    :INPUT ACCEPT [1071:109891]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [1938:184341]
    -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT
    COMMIT
    # Completed on Tue May 19 01:52:58 2020
    
    #删除这个规则
    ~$ sudo iptables -D INPUT -p tcp --syn -m state --state NEW -j ACCEPT
    #查看删除结果
    ~$ sudo iptables-save -t filter
    # Generated by iptables-save v1.4.14 on Tue May 19 01:53:54 2020
    *filter
    :INPUT ACCEPT [92:9212]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [161:15459]
    COMMIT
    # Completed on Tue May 19 01:53:54 2020
    
    



    2.4 -R : replace, 替换指定链上的指定规则
         ** 指明替换号
         ** 指明替换规则本身
    2.5 -F : flush, 清空指定的规则链 

    ~]# iptables -F  # 不指明链, 清除所有的已订定的规则
    ~]# iptables -F -t filter # 也可以指明某个table的清除<清除具体某一个table的规则>
    ~]# iptables -F -t nat

    2.6 -Z : zero, 置零
        ** 匹配到的报文个数
        ** 匹配到的所有报文的大小之和(字节数)

    将所有的 chain 的计数与流量统计都归零
    #清除本机防火墙 (filter)的计数与流量统计
    ~]# iptables -Z 
    ~]# iptables -Z -t filter
    #清除本机防火墙 (nat)的计数与流量统计
    ~]# iptables -Z -t nat

     

  3. 查看
     3.1 -L : list, 列出指定链上的所有规则 
           3.1.1 -n : numberic ,以数据格式显示地址和端口
           3.1.2 -v : verbose ,详细信息 
              vv
              vvv
          3.1.3 -x : exactly(精确的),显示计数器结果的精确值
          3.1.4 --line-numbers : 显示规则的序号


chain

  1. PREROUTING
  2. INPUT
  3. FORWARD
  4. OUTPUT
  5. POSTROUTING

匹配条件
 

  1. 基本匹配条件
      无需加载任何模块,由iptables/netfilter自行提供
    1.1 [!]-s  address[/mask][,...]
      检查报文中源IP地址, 是否符合此处指定的地址或范围
    1.2 [!]-d  address[/mask][,...]
      检查报文中的目标IP地址,是否符合此处指定的地址或范围
    1.3 [!]-p  protocol
      
    表明在传输层应用的协议,其可以有tcp,udp,udplite,icmp,icmpv6, esp,ah,sctp,mh 或者all
    1.4 [!]-i   in-interface name
      只能应用于数据报文流入的接口,INPUT,FORWARD and PREROUTING chains
    1.5 [!]-o  out-interface name
      只能应用于数据报文流出的接口,OUTPUT,FORWARD POSTROUTING
  2. 隐匿扩展
      不需要手动加载扩展模块,因为它们是对协议的扩展,所以但凡使用-p指明了协议,就表示已经指明了要扩展的模块
    2.1 tcp
        
    2.1.1 [!]--sport  port[:port]
     
            匹配报文的源端口,可以是连续的端口范围
         
    2.1.2  [!]--dport  port[:port]
              
    匹配报文的目标端口,可以是连续的端口范围
        
    2.1.3 [!]--tcp-flags  mask comp
              
    mask : 必须要检查的标识位,必须以,号分隔
              comp : 必须为1的标识位,必须以,号分隔
    --tcp-flags syn,ack,fin,rst syn : 
    #表示要检查的标识位为syn,ack,fin,rst. 但syn必须为1,余下的必须为0,其是匹配每一次握手
     iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
     iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
     iptables -A INPUT -p tcp !--syn -m state --state NEW -j DROP 
                                      #不是TCP第一次握手,但状态又是new的报文
         2.1.4 --syn
       
             匹配第一次握手,相当于 --tcp-flags syn,ack,fin,rst  syn


    2.2 udp
        
    2.2.1  [!]--sport port[:port]
         
         匹配报文的源端口,可以是端口范围
         2.2.2  [!]--dport port[:port]
              匹配报文的目标端口,可以是连续的端口范围


    2.3 icmp
         
    2.3.1  [!] --icmp {type[/code] | typename}
     ~]# iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT 
              --icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号, 
                                        例如 8  代表 echo request 的意思。
    
    范例:让 0,3,4,11,12,14,16,18 的 ICMP type 可以进入本机: 
    [root@www ~]# vi somefile 
    #!/bin/bash 
    icmp_type="0 3 4 11 12 14 16 18" 
    for typeicmp in $icmp_type 
    do 
      iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT 
    done 
         
    [root@www ~]# sh  somefile 

显示扩展
     必须使用-m选项手动加载模块, 其扩展模块路径为:/lib/xtables,其中大写的为目标扩展,小写的为规则扩展
     获取扩展选项帮助 : 
Centos 6 : man iptables                Centos 7 : man iptables-extensions

3.1 multiport扩展 : 以离散方式定义多端口匹配,但最多指定15个端口
   
    3.1.1  [!] --sports port[,port | ,port:port]  
           
 指定多个源端口        
   
  3.1.2  [!] --dports port[,port | ,port:port]
             
指定多个目标端口
 
      3.1.3   --ports port[,port | ,port:port]
           
  指定多个目标及源端口

示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -j ACCEPT

3.2 state扩展
         
      3.2.1 

       根据连接追踪机制,查检连接的状态, 跟TCP没有关系,是内核中netfilter实现, 能实现tcp,udp,icmp的连接追踪,内核会记录每一个连接(放置在内存中),谁,通过什么协议, 访问什么服务, 访问的时间,这种机制被称之为conntrack机制.也正是有了state扩展,iptables成为了有连接追踪的防火墙,安全性是更高. 是由state扩展提供,库文件为/lib/xtables/libxt_conntrack.so . 追踪连接功能在内核的内存空间中,把出去和进来的连接通过模板建立关联关系. 追踪本机的请求和响应之间的关系,状态如下几种:
   
  3.2.2   STATE 

  •        NEW : 新发起的请求
  •        ESTABLISHED : new状态之后,连接追踪模板中为其建立的条目失效之前期间内所有的通信状态
  •        RELATED : 相关的连接,如FTP协议中的命令连接与数据连接之间的关系
  •        INVALID : 无效的连接,如tcp状态全为1或者全为0的连接
  •        UNTRACKED : 未进行追踪的连接

    3.2.3 [!] --state STATE : 多个state可以使用,号分隔
    iptables -A INPUT -d 172.168.100.67 -p tcp -m multiport --dport 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -s 172.16.100.67 -p tcp -m multiport --sport 22,80 -m state --state ESTABLISHED -j ACCEPT
    
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

     

 


target的分类
 

  •        ACCEPT : 接受
  •        DROP : 丢弃
  •        REJECT : 拒绝
  •        RETURN : 返回调用链
  •        REDIRECT : 端口重定向
  •        LOG : 记录日志

                      --log-level LEVEL : 日志的等级
                      --log-prefix FREFIX : 日志的提示语句的前缀
                                         

iptables -A INPUT -d 172.16.36.61 -p tcp --dport 21 -j LOG --log-prefix "netfilter log"
  •      MASK : 做防火墙标记
  •      DNAT : 目标地址转换
  •      SNAT : 源地址转换
  •      MASQUERADE : 地址伪装
  •      用户自定义链

     

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值