• Linux - iptables防火墙


    目录

    一、iptables概述

    二、规则表与规则链结构(四表五链)

    1.简述

    2.四表(规则表)

    3.五链(规则链)

    三、数据链过滤的匹配流程

    四、iptables命令行配置方法

    1.命令格式

    2.基本匹配条件

    3.隐含匹配

    3.1.端口匹配

    3.2 TCP标志位匹配

    3.2 ICMP类型匹配

    3.3 显示匹配

    3.3.1 多端口匹配:

    3.3.2 IP范围匹配:

    3.3.3 mac地址匹配

    3.3.4 状态匹配

    五、SNAT与DNAT

    1.SNAT

    2.DNAT


    一、iptables概述

    iptables防火墙是Linux系统防火墙的一种,实际上由两个组件netfilter和iptables组成。

    netfilters与iptables的关系:

    netfilter:属于“内核态”的防火墙功能体系。是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

    iptables:属于“用户态”的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables文件下。

    netfilter/iptables后期简称为iptables。iptables是基于内核的防护墙,其中内置了raw、mangle、nat、filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

    二、规则表与规则链结构(四表五链)

    1.简述

    规则表(四表)的作用:容纳各种规则链。

    规则链(五链)的作用:容纳各种防火墙规则。

    总结:表中有链,链中有规则。

    2.四表(规则表)

    raw表:确定是否对该数据包进行状态跟踪。包含两个规则链 - OUTPUT、PREROUTING。

    mangle表:修改数据包内容,用于流量整形,给数据包设置标记。包含五个规则链 - INPUT、OUTPUT、FORWARD、PREROUING、POSTROUTING。

    nat表:负责网络地址转换,用来的修改数据包中的源、目标IP地址或端口。包含三个规则链 - OUTPUT、PREROUTING、POSTROUTING。

    filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

    数据包到达防火墙时,数据表之间的优先顺序:
    raw -> mangle -> nat -> filter

    3.五链(规则链)

    INPUT:处理入站数据包,匹配目标IP为本机的数据包。

    OUTPUT:处理出战数据包,匹配从本机发出的数据包。

    FORWARD:处理转发数据包,匹配流经本机的数据包。

    PREROUTING:在进行路由选择前处理数据包,用来修改目的地址,用来做DNET。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。

    POSTROUTIING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

    三、数据链过滤的匹配流程

    入站数据:PREROUTING -> INPUT -> 本机的应用程序

    出站数据:本机的应用程序 -> OUTPUT -> POSTROUTING

    转发数据:PREROUTING -> FORWARD -> POSTROUTING

    四、iptables命令行配置方法

    1.命令格式

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

    • 不指定表名时,默认指filter表
    • 不指定链名时,默认值表内所有链
    常用管理选项
    常用选项解释
    -A--apend 在指定表的末尾追加新规则
    -I--insert 在指定链的开头插入一条新规则,不指定序号时默认在开头插入新规则
    -R--replace 修改、替换指定链中某一条的规则,可指定序号或具体内容
    -P--policy 设置指定链的默认策略
    -D--delete 删除指定链中的某一条规则
    -F--flush 清空指定链中的所有规则,若为指定链名,则清空表中所有链
    -L--list 列出指定链中的所有规则,若为指定链名,则列出表中所有链
    -n--numeric 使用数字形式输出结果,如显示IP地址而不是主机名
    -v显示详细信息,包括每条规则的匹配包数量和匹配字节数
    --line-numbers查看规则时,显示序号
    常用的控制类型
    常用控制类型解释
    ACCEPT允许数据包通过
    DROP直接丢弃数据包,不给出任何回应信息
    REJECT拒绝数据包通过,会给数据发送端一个响应信息
    SNAT修改数据包的源地址
    DNAT修改数据包的目的地址
    REDIRECT重定向改变目的端口,将接受的包转发至本机的不同端口
    MASQUERADE伪装成一个非固定公网IP地址
    LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

    2.基本匹配条件

    基本匹配条件解释
    -p指定协议
    -s指定源地址
    -d指定目的地址
    -i指定入站网卡
    -o指定出站网卡

    3.隐含匹配

    需以特定的协议匹配作为前提。

    3.1.端口匹配

    匹配条件解释
    --sport源端口
    --dport目的端口

    例:

    iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

    ps:--sport 和 --dport 必须配合-p "协议类型"使用

    3.2 TCP标志位匹配

    标志位解释
    SYN同步位
    ACK确认位
    FIN结束位
    RST重置位
    URG紧急位
    PSH推送位

    例:

    iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT

    拒绝来自22端口的SYN之外的tcp包(只接收SYN包)

    3.2 ICMP类型匹配

    类型代码解释
    Echo-Reques8请求
    Echo-Reply0回显
    Destination-Unreachable3目标不可达

    例:

    iptables -A INPUT -p icmp --icmp-type 8 -j -DROP

    #禁止其他主机ping本机

    3.3 显示匹配

    要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。

    3.3.1 多端口匹配:

    -m multiport --sport 源端口列表

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

    例:

    iptables -A INPUT -p tcp -m multiport --dport 80,22,21 -j ACCEPT

    3.3.2 IP范围匹配:

    -m iprange --src-range 源ip范围

    -m iprange --dst-range 目的ip范围

    例:

    iptables -A  FORWARD -p udp -m iprange --src-range 192.168.80.100-19.2169.80.200

    3.3.3 mac地址匹配

    -m mace --mace-source "mac地址"

    3.3.4 状态匹配

    -m state --state "连接状态"

    常见的状态连接解释
    NEW与任何连接无关的,还没开始连接
    ESTABLISHED响应请求或者已建立连接的,连接态
    RELATED与已有连接有相关性的,衍生态,一般与ESTABLISHED 配合使用
    INVALID无效的封包,例如数据破损的封包状态

    例:

    iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

    五、SNAT与DNAT

    均需网关开启IP路由转发:

    临时打开 echo 1 > /proc/sys/net/ipv4/ip_forward 或 sysctl -w net.ipv4.ip_forward=1

    永久打开:

    1. vim /etc/sysctl.conf
    2. ....
    3. net.ipv4.ip_forward=1 #将此行写入配置文件
    4. sysctl -p #载入配置

    1.SNAT

    SNAT用于在网络中修改数据包的源地址。

    SNAT转换前提条件:

    • 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
    • Linux网关开启IP路由转发

    iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10

    2.DNAT

    DNAT用于在网络中修改数据包的目的地址,通常是为了保护内网服务器的安全。

    DNAT转换前提条件:

    • 局域网的服务器能够访问Internet
    • 网关的外网地址有正确的DNS解析记录
    • Linux网关开启IP路由转发

    iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11

  • 相关阅读:
    LeetCode-828. 统计子串中的唯一字符【哈希表,字符串,动态规划】
    echart双柱状图
    硬件工程师有没有35岁危机?
    ElasticSearch:文章检索
    使用StrictMode-StrictMode原理(1)
    Unity SKFramework框架(二十四)、Avatar Controller 第三人称控制
    3dmax中的 (Corona 9)cr渲染器怎么渲染?cr渲染器使用教程
    按压式按摩靠背的设计
    【MATLAB源码-第43期】基于matlab的turbo码误码率仿真比较不同迭代次数,采用logmap/sova算法。
    一种数字全息自动聚焦技术研究及实例分析
  • 原文地址:https://blog.csdn.net/2401_85983616/article/details/142141958