• iptables系列教程(二)| iptables语法规则


    一个执着于技术的公众号

    iptables 命令基本语法

    iptables [-t table] command [链名] [条件匹配] [-j 目标动作]

    以下是对 iptables 命令的拆分讲解:

    -t table

    用来指明使用的表,有三种选项: filternatmangle。若未指定,则默认使用filter表

    command参数

    指定iptables 对我们提交的规则要做什么样的操作,以下是command常用参数:

    • -A

    Append,追加一条规则(放到最后)

    举例:
    
    iptables -A INPUT -j DROP #拒绝所有人访问服务器(作为最后一条规则)
    // 若未 -t 指定表,默认使用filter表
    

    • -I

    Insert,在指定的位置插入规则

     举例:
    
    iptables -I INPUT 2 -s 10.10.10.1 -j ACCEPT #允许10.10.10.1主机访问本机
    // 在 filter 表的 INPUT 链插入成第2条规则
    

    • -L

    List,查看规则列表

     具体参数:
    
    n:只显示 IP 地址和端口号码,不显示域名和服务名称
    v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
    x:在 v 的基础上,禁止自动单位换算(K、M)
    --line-number:可以查看到规则号
    
     举例:
    

    • -D

    Delete,从规则列表中删除规则

     举例:
    
    iptables -D INPUT 2
    // 删除 filter 表 INPUT 链中的第 2 条规则
    

    • -P

    Policy,设置某个链的默认规则

    举例:
    
    iptables -P INPUT DROP
    // 设置 filter 表 INPUT 链的默认规则是 DROP
    

    当数据包没有被任何规则匹配时,则按默认规则处理。


    • -F

    Flush,清空规则

      举例:
    
    iptables -F INPUT #清空filter 表中INPUT链上的规则
    iptables -F #清空filter 表中所有链上的规则
    iptables -t nat -F PREROUTING ##清空NAT表中PREROUTING链上的规则
    iptables -t nat -F #清空NAT表中所有链上的规则
     
    

    注意:-F 是清空链中规则,但并不影响 -P 设置的默认规则。因此在生产环境中,若指定默认规则为DROP,一旦执行iptables -F,很容易导致自己也无法连接服务器(-F 会把配置的明细ACCEPT规则删除,只留下默认规则拒接所有)。


    • -Z

    zero,将指定链的所有计数器归零。(如未指定,则认为是所有链)

    举例:
    
    iptables -Z INPUT
    //清除filter表INPUT链上的计数器
    

    条件匹配参数

    按网络接口匹配:

    • -i

    匹配数据进入的网络接口,此参数主要应用nat表,例如目标地址转换。

    • -o

    匹配数据流出的网络接口

    举例:
    
    -i eth0
    // 匹配从网络接口eth0进来的数据包
    
    -o eth1
    // 匹配从eth1流出的数据包
    

    按源及目的地址匹配

    • -s

    匹配源地址,可以是IP、网段、域名,也可空(代表任何地址)

    • -d

    匹配目标地址

    举例:
    
    -s 参数举例:
    iptables -A INPUT -s 10.10.10.10 -j DROP
    // 拒绝10.10.10.10主机访问本机
    
    -d 参数举例:
    iptables -A OUTPUT -d www.baidu.com -j DROP
    // 禁止本机访问百度
    

    按协议类型匹配

    • -p

    匹配协议类型,可以是TCP、UDP、ICMP等

      举例:
    
    iptables -A INPUT -s 10.10.10.10 -p icmp -j DROP
    // 禁止10.10.10.10主机ping通本机
    

    按源及目的端口匹配

    • --sport

    匹配源端口;可以是单个端口,也可以是端口范围

    • --dport

    匹配目的端口

    举例:
    
    -- sport 23
    //匹配源端口是23的数据包
    
     -- sport 2000:3000
    //匹配源端口是 2000-3000 的数据包
    
    -- sport :2000
    //匹配2000以下的数据包(包含2000)
    
    - --sport 1000:
    //匹配1000以上的数据包(包含1000)
    

    注意:--sport 和 --dport 必须配合 -p 参数使用,例如:

    iptables -A INPUT -p tcp –dport 80 -j ACCEPT
    //允许外部数据访问我的本地服务器80端口
    
    详细解释:
    1、这是一条从外部进入内部本地服务器的数据
    2、数据包的目的(dport)地址是22,就是要访问我本地的22端口
    3、允许以上的数据行为通过
    

    目的动作

    • -j ACCEPT

    允许数据包通过本链而不拦截它

    举例:
    
    iptables -A INPUT -j ACCEPT
    // 允许所有访问本机的数据包通过
    
    • -j DROP

    丢弃数据包;阻止数据包通过本链

    举例:
    
    iptables -A FORWARD -s 10.10.10.10 -j DROP
    // 阻止来自10.10.10.10 的数据包通过本机
    
    • -j SNAT

    源地址转换,支持转换为单IP,也支持转换到IP地址池

    举例:
    
    转换到单IP举例:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 18.18.18.18
    // 将内网 192.168.1.0/24 转换为公网18.18.18.18地址;SNAT,用于访问互联网
    
    转换到一组地址池:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 18.18.18.18-18.18.18.28
    //同上,只不过是转换到一组IP地址池
    
    • -j DNAT

    目的地址转换,支持转换为单IP,也支持转换到IP地址池

    举例:
    
    转换到单IP举例:
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.1
    //把从eth0口进来访问TCP/80端口的数据包目的地址改成192.168.1.1
    
    转换到一组地址池:
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.1-192.168.1.10
    
    • -j MASQUERADE

    动态SNAT转换(适用于动态 IP 场景 )

    举例:
    
     iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
    // 将源地址是 192.168.1.0/24 的数据包进行地址伪装,转换成 eth0 上的 IP 地址
    

    iptables 常用附加模块:

      按包状态匹配 (state)

    -m state --state 状态

    举例:
    
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    // 将目前已运行的服务端口全部放行!无风险,良心推荐使用
    

      按来源 MAC 匹配(mac)

    -m mac --mac-source MAC

    举例:
    
    iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
    // 拒绝来自某 MAC 地址的数据包进入本机
    

      按包速率匹配 (limit)

    -m limit --limit 匹配速率

      举例:
    
    iptables -A FORWARD -d 192.168.1.1 -m limit --limit 50/s -j ACCEPT
    iptables -A FORWARD -d 192.168.1.1 -j DROP
    

    limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,50/s 表示 1 秒中转发 50 个数据包,要想限制的话后面要再跟一条DROP规则

      多端口匹配 (multiport)

    -m multiport <--sports|--dports|--ports> 端口 1[,端口 2,..,端口 n]

    举例:
    
    iptables -A INPUT -p tcp -m multiport --dports 22,53,80,443 -j ACCEPT
    // 允许访问本机TCP/22,53,80,443端口
    

    注意:该参数必须与 -p 参数一起使用

    iptables 规则备份和恢复

    我们执行 iptables 命令时,规则只是保存在内存中,并没有保存到某一个文件中。因此系统重启之后,之前设定的规则就没有了,所以规则设定完毕,检查无误后要及时保存规则,使用命令:

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

    会看到提示,防火墙规则保存在/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件。所以如果要备份防火墙规则,复制该配置文件即可。例如:

    cp /etc/sysconfig/iptables /opt/myipt.rule
    

    如果需要恢复这些规则,使用以下命令:

    iptables-restore < /opt/myipt.rule
    service iptables save
    

    结语

    如果您觉得看完本文后有所收获, 还希望您随手帮忙点个在看 、或者分享转发。您的支持是我坚持分享的最大动力!


      往期精彩  

    ◆  必看 | Linux系列学习书籍免费送

    ◆  利用expect批量修改Linux服务器密码

    ◆  nginx+Keepalived 实现高可用集群

    ◆  干货 | LVM快照学习

    ◆  一文带你读懂nginx反向代理

    ◆  抓包工具tcpdump用法说明

    ◆  零成本 | 手把手教你搭建个人博客

    ◆  实战 | Hadoo大数据集群搭建

    【深度好文】终于有人把云计算、大数据和AI讲明白了

    ◆  亿级web系统负载均衡几种实现方式

    ◆  一文带你读懂zookeeper在大数据生态的应用


    十年磨一剑
  • 相关阅读:
    Atitit 索引技术--位图索引
    Atitit View事件分发机制
    Atitit 代码复用的理解attilax总结
    Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折
    Atitit事件代理机制原理 基于css class的事件代理
    Atitit  图像处理Depixelizing Pixel Art像素风格画的矢量化
    Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析
    Atitit常见的标准化组织与规范数量jcp ecma iso
    Atitit sql计划任务与查询优化器--统计信息模块
    Atitti 存储引擎支持的国内点与特性attilax总结
  • 原文地址:https://www.cnblogs.com/qinlulu/p/12961628.html
Copyright © 2020-2023  润新知