• [Linux]-iptables防火墙原理及其应用


     简介

    (netfilter, 位于Linux内核中的包过滤功能体系  ,称为Linux防火墙的“内核态”)

    iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制,iptables防火墙基于内核编码实现,具有非常稳定的性能和高效率;

    iptables属于“用户态”的防火墙管理体系

    ptables和netfilter的关系:

            iptables只是Linux防火墙的管理工具,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

    规则链与规则表

    规则表:
      1.filter表——三个链:INPUT、FORWARD、OUTPUT
        作用:过滤数据包  内核模块:iptables_filter.
      2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
        作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
      3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
        作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle
      4.Raw表——两个链:OUTPUT、PREROUTING
        作用:决定数据包是否被状态跟踪机制处理  内核模块:iptable_raw


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

    规则表之间的顺序
           raw ——> mangle ——> nat ——> filter


    规则链之间的顺序
        入站:PREROUTING ——> INPUT: 数据包到达防火墙后首先被PREROUTING链处理(是否修改数据包地址等),然后进行路由选择(判断数据包发往何处),如果数据包的目标地址是防火墙本机(如:Internet用户访问网关的Web服务端口),那么内核将其传递给INPUT链进行处理(决定是否允许通过等)。
        出站:OUTPUT ——> POSTROUTING:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链(是否修改数据包的地址等)进行处理。
        转发:PREROUTING ——> FORWARD ——> POSTROUTING:来自外界的数据包到达防火墙后首先被PREROUTTING链处理,然后再进行路由选择;如果数据包的目标地址是其他的外部地址(如局域网用户通过网关访问QQ服务器),则内核将其传递给FORWARD链进行处理(允许转发,拦截,丢弃),最后交给POSTROUTING链(是否修改数据包的地址等)进行处理。


    规则链内的匹配顺序
        按顺序依次检查,匹配即停止(LOG策略例外)
        若找不到相匹配的规则,则按该链的默认策略处理

    iptables管理工具的使用

    iptables [ - t 表名 ]  管理选项  [链名]  [匹配条件]  [-j 控制类型]

    注意:

       不指定表名时,默认指filter表
       不指定链名时,默认指表内的所有链
       除非设置链的默认策略,否则必须指定匹配条件
       选项、链名、控制类型使用大写字母,其余均为小写

    控制类型:

      ACCEPT:允许通过
        DROP:直接丢弃,不给出任何回应
        REJECT:拒绝通过,必要时会给出提示
        LOG:记录日志信息,然后传给下一条规则继续匹配

    拒绝发给本机使用ICMP协议的数据包:iptable -t filter -I INPUT -p icmp -j REJECT

    • -A:在链的末尾追加一条规则
    • -I:在链的开头(或指定序号)插入一条规则
    • -L:列出所有的规则条目
    • -n:以数字形式显示地址、端口等信息
    • -v:以更详细的方式显示规则信息
    • --line-numbers:查看规则时,显示规则的序号
    • -D:删除链内指定序号(或内容)的一条规则
    • -F:清空所有的规则
    • -P:为指定的链设置默认规则

    规则的匹配条件

      通用匹配:

    • 协议匹配:-p 协议名
    • 地址匹配:-s 源地址、-d 目的地址
    • 接口匹配:-i 入站网卡、-o 出站网卡

        隐含匹配:

    • 端口匹配:--sport 源端口、--dport 目的端口
    • TCP标记匹配:--tcp-flags 检查范围 被设置的标记
    • ICMP类型匹配:--icmp-type ICMP类型

        显示匹配:

    • 多端口匹配:-m multiport --sports 源端口列表

                                  -m multiport --dports 目的端口列表

    • IP范围匹配:-m iprange --src-range IP范围
    • MAC地址匹配:-m mac --mac-source MAC地址
    • 状态匹配:-m state --state 连接状态

     

    SNAT转换:

      将内网的192.168.10.0/24网段映射到公网地址,实现共享上网(源地址转换)

    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 218.29.30.31

    DNAT转换:

        将内网服务器的80端口映射到公网地址的80端口(目标地址转换)

    iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1
     
  • 相关阅读:
    Lucene 全文检索
    Redis 集群
    Redis 初步接触
    Mybatis
    FastJson 介绍
    JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载
    持续集成与Devops关系
    GIT命令行统计代码提交行数
    一种简单的REST API接口加密实现,只允许自己的产品调用后台,防止接口被刷
    Beyond Compare 4.X 破解方法(亲测有效)
  • 原文地址:https://www.cnblogs.com/chenwz/p/7911695.html
Copyright © 2020-2023  润新知