当前位置: 首页 > news >正文

iptables 防火墙技术详解

目录

前言

1 iptables概述

1.1 Netfilter与iptables关系

1.1.1 Netfilter

1.1.2 iptables

1.1.3 两者关系

2 iptables的表、链结构

2.1 四表五链结构介绍

2.1.1 基本概念

2.1.2 四表功能***

2.1.3 五链功能***

2.2 数据包过滤的匹配流程***

2.2.1 规则表应用顺序***

2.2.2 规则链匹配顺序

2.2.3 规则链内匹配顺序

2.2.4 数据包匹配流程详解

3 编写防火墙规则

3.1 iptables安装配置

3.1.1 关闭firewalld

3.1.2 安装iptables

3.1.3 设置开机启动

3.2 基本语法与控制类型

3.2.1 语法构成

3.2.2 注意事项不指定表名时,默认使用 filter 表

3.2.3 数据包控制类型

3.3 基本操作命令

3.3.1 常用管理参数

3.3.2 添加新规则

3.3.3 查看规则列表

3.3.4 删除清空规则

3.3.5 设置默认策略

3.4 规则的匹配条件

3.4.1 通用匹配

3.4.2 隐含匹配

3.4.3 拓展

3.4.4 显式匹配

4 总结


前言

        在企业网络环境中,各种应用系统(如Web网站、电子邮件系统、FTP服务器、数据库系统等)都需要通过网络为用户提供服务。如何有效保护这些服务器,过滤不必要的访问请求甚至恶意入侵,成为网络安全的重要课题。

        Linux系统中的iptables防火墙正是为解决这些问题而设计。它工作在网络层,对TCP/IP数据包实施精细化的过滤和限制,属于典型的包过滤防火墙(网络层防火墙)。基于内核实现的iptables具有卓越的性能和稳定性,在全球范围内获得了广泛应用。

        本文将系统介绍iptables防火墙的核心概念、结构原理、匹配机制和规则配置方法,帮助读者全面掌握这一重要的网络安全技术。

1 iptables概述

1.1 Netfilter与iptables关系

1.1.1 Netfilter
  • Linux防火墙功能由Netfilter组件提供

  • Netfilter工作在内核空间,集成在Linux内核中

  • 采用模块化设计,具有良好的可扩充性

  • 与IP协议栈无缝契合,支持数据包过滤、地址转换和处理操作

  • 官网文档:https://netfilter.org/documentation/

1.1.2 iptables
  • 属于用户空间(User Space)的防火墙管理体系

  • 管理Linux防火墙的命令行程序

  • 位于/sbin/iptables目录下

  • 使插入、修改和删除数据包过滤表中的规则变得容易

1.1.3 两者关系
  • netfilter:内核态的防火墙功能体系

  • iptables:用户态的防火墙管理工具

  • 后期简称为iptables,基于内核防火墙,内置raw、mangle、nat和filter四个规则表

2 iptables的表、链结构

2.1 四表五链结构介绍

2.1.1 基本概念
  • 规则表:容纳各种规则链的容器

  • 规则链:容纳各种防火墙规则的链条

  • 规则:对数据包进行过滤或处理的具体规则

  • 结构关系:表里有链,链里有规则

2.1.2 四表功能***
  1. raw表:决定是否对数据包进行状态跟踪

    • 包含链:OUTPUT、PREROUTING

  2. mangle表:修改数据包内容,做流量整形,设置标记

    • 包含链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

  3. nat表:负责网络地址转换,修改源/目标IP地址或端口

    • 包含链:OUTPUT、PREROUTING、POSTROUTING

  4. filter表:负责过滤数据包,决定是否放行

    • 包含链:INPUT、FORWARD、OUTPUT

2.1.3 五链功能***
  1. INPUT:处理入站数据包,匹配目标IP为本机的数据包

  2. OUTPUT:处理出站数据包

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

  4. PREROUTING路由选择前处理数据包,用于DNAT

  5. POSTROUTING路由选择后处理数据包,用于SNAT

2.2 数据包过滤的匹配流程***

2.2.1 规则表应用顺序***

raw → mangle → nat → filter

2.2.2 规则链匹配顺序
  1. 主机型防火墙

  • 入站数据:PREROUTING → INPUT → 本机应用程序
  • 出站数据:本机应用程序 → OUTPUT → POSTROUTING
  1. 网络型防火墙

  • 转发数据:PREROUTING → FORWARD → POSTROUTING
2.2.3 规则链内匹配顺序
  • 自上向下依次检查,找到匹配规则即停止(LOG策略除外)

  • 找不到匹配规则时,按该链的默认策略处理

  • 默认策略不参与链内规则的顺序编排

2.2.4 数据包匹配流程详解
  1. 入站数据流向:外界数据包 → PREROUTING → 路由选择 → INPUT → 应用程序

  2. 转发数据流向:外界数据包 → PREROUTING → 路由选择 → FORWARD → POSTROUTING

  3. 出站数据流向:本机数据包 → 路由选择 → OUTPUT → POSTROUTING

3 编写防火墙规则

3.1 iptables安装配置

3.1.1 关闭firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
sentenforce 0
3.1.2 安装iptables
yum -y install iptables iptables-services
3.1.3 设置开机启动
systemctl start iptables.service
systemctl enable iptables.service

3.2 基本语法与控制类型

3.2.1 语法构成

iptables 【-t 表名】【管理参数】【链名】【匹配条件】【-j 控制类型】

3.2.2 注意事项不指定表名时,默认使用 filter
  • 不指定链名时,默认指表内所有链

  • 除非设置链的默认策略,否则必须指定匹配条件

  • 参数、链名、控制类型使用大写字母

3.2.3 数据包控制类型
ACCEPT允许通过
DROP直接丢包,不回应
REJECT拒绝通过,回应
LOG记录日志信息后传递给下一条规则
SNAT修改数据包源地址
DNAT修改数据包目的地址
MASQUERADE伪装成非固定公网IP地址

3.3 基本操作命令

3.3.1 常用管理参数
选项功能描述示例
-A在指定链末尾追加规则iptables -A INPUT
-I在指定链中插入新规则iptables -I INPUT
-P指定默认规则iptables -P OUTPUT ACCEPT
-D删除规则iptables -t nat -D INPUT
-R修改、替换规则iptables -t nat -R INPUT
-L查看规则iptables -t nat -L
-n数字形式显示iptables -L -n
-v显示详细信息iptables -v -L
--line-number显示规则编号iptables -L --line-number
-F清除链中所有规则iptables -F
-X清空自定义链规则iptables -X
-Z清空链计数器iptables -Z
-S查看链的所有规则iptables -t nat -S
3.3.2 添加新规则
iptables -t filter -A INPUT -p icmp -j REJECT       
#在filter表 INPUT链 行末添加:禁止所有ICMP请求进入本机,并告知被拒者
解释:其他计算机将无法成功 ping 通你的服务器iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT        
#在filter表 INPUT链 第2行添加:允许所有目标端口为 22 的 TCP 请求进入本机
解释:开放了服务器的 SSH 远程登录端口,允许外部连接
3.3.3 查看规则列表
iptables -L INPUT --line-numbers
iptables -nL INPUT
iptables -vnL --line-numbers
3.3.4 删除清空规则
iptables -D INPUT 5
iptables -F INPUT
iptables -t nat -F
3.3.5 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

3.4 规则的匹配条件

3.4.1 通用匹配
  1. 协议匹配-p 协议名

  2. 地址匹配-s 源地址-d 目的地址

  3. 接口匹配-i 入站网卡-o 出站网卡

iptables -A FORWARD ! -p icmp -j ACCEPT
#在filter表 FORWARD链 行末添加:接收所有非ICMP请求进入本机iptables -A INPUT -s 192.168.80.11 -j DROP
#在filter表 INPUT链 行末添加:拒绝 IP地址为 192.168.80.11 的数据进入本机,并丢弃不回应iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP 
#在filter表 INPUT链 行首添加:拒绝 192.168.80.0/24网段的数据通过ens33网卡进入本机,并丢弃不回应
3.4.2 隐含匹配
  1. 端口匹配--sport 源端口--dport 目的端口

  2. TCP标记匹配--tcp-flags TCP标记

  3. ICMP类型匹配--icmp-type ICMP类型

iptables -A INPUT -p tcp --sport 1000:3000 -j REJECT
#在filter表 INPUT链 行末添加:拒绝所有从外部发起、且源端口号在1000到3000范围内的TCP连接,并告知被拒者iptables -A INPUT -p icmp --icmp-type 8 -j DROP        
#丢弃所有发往本机的 ICMP Echo Request 请求包,并丢弃不回应
3.4.3 拓展

  --icmp-type 8 vs  -p icmp

-p icmp -j DROP-p icmp --icmp-type 8 -j DROP
这会丢弃所有类型的 ICMP 包,包括 Echo Request (8)、Echo Reply (0)、Destination Unreachable (3) 等

只丢弃 ICMP Echo Request 包(即入站 ping 请求)。其他类型的 ICMP 包(如出站 ping 的回复、网络错误消息等)仍然被允许

影响: 你不仅无法被 ping 通,还可能影响路径 MTU 发现、网络诊断等关键功能,可能导致网络连接问题影响: 效果非常精准。你的服务器仍然可以正常 ping 通外部(因为能收到 Echo Reply (Type 0)),也能接收其他重要的网络控制消息,只是别人无法 ping 通你
3.4.4 显式匹配
  1. 多端口匹配-m multiport --sport/dport 端口列表

  2. IP范围匹配-m iprange --src-range IP范围

  3. MAC地址匹配-m mac --mac-source MAC地址

  4. 状态匹配-m state --state 连接状态

iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
#在filter表 INPUT链 行末添加:接受所有端口号为80,22,21,20,53的TCP数据进入本机iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
#在filter表 FORWARD链 行末添加:拒绝所有 新连接状态且没有syn标志 的TCP数据,并丢弃不回应

4 总结

        iptables作为Linux系统中最强大的防火墙工具,提供了灵活而精细的网络数据包控制能力。通过本文的系统学习,我们掌握了:

  1. 核心架构:理解了netfilter与iptables的关系,以及四表五链的结构设计理念

  2. 匹配机制:掌握了数据包在表和链间的流转流程匹配优先级

  3. 规则配置:学会了使用各种管理选项进行规则的添加、查看、删除和修改

  4. 匹配条件:熟悉了通用匹配隐含匹配显式匹配三种匹配方式的应用场景

        在实际生产环境中,iptables的合理配置对网络安全至关重要。建议遵循"默认拒绝,按需开放"的原则,结合具体的业务需求设计防火墙规则。同时,要注意规则的测试和验证,避免因配置失误导致的服务中断。通过持续学习和实践,能够更加熟练地运用iptables构建坚固的网络安全防护体系。

        重要提醒:在对远程服务器进行iptables配置时,务必先设置允许SSH连接的规则,然后再设置默认策略为DROP,防止因配置失误导致无法远程连接服务器。

http://www.dtcms.com/a/349837.html

相关文章:

  • 如何通过虚函数实现多态?
  • 文入门Ubuntu:从零到精通的Linux之旅
  • 数学建模-整数规划(IP)
  • FunASR语音识别框架流式识别模型切换
  • SpringBoot的条件装配原理
  • SpringBoot3集成Oauth2.1——10重启程序Token失效(RSA持久化)
  • Java项目-苍穹外卖_Day1
  • Visual Studio 2022调试Eigen库查看矩阵与向量的值
  • 大模型知识点之矩阵乘以向量
  • springboot:前后端调用(axios发送异步请求)
  • 那我现在有3个输入 9层神经元 每层神经元数为 3 9 3 5 6 2 3 9 8 请给出我所有的权重矩阵
  • 图论水题5
  • ansible的搭建与安装
  • BIO、NIO 和 AIO
  • 智慧城市SaaS平台/交通设施运行监测系统之桥梁运行监测、城市道路塌陷风险运行监测系统架构内容
  • v-slot 与 slot-scope区别
  • 开源零信任本地化部署实战指南:Keycloak + OpenZiti 完整方案
  • [element-plus] el-table在行单击时获取行的index
  • JAVA高级工程师--云服务模式多租户SAAS项目商业模式架构全景
  • 【数据可视化-98】2025年上半年地方财政收入Top 20城市可视化分析:Python + Pyecharts打造炫酷暗黑主题大屏
  • 【Java基础】快速掌握Java泛型机制:基本概念与具体应用
  • 工具系列:JsonViewKit
  • Frida 加密解密算法实现与应用指南
  • kafka 原理详解
  • 代码随想录算法训练营30天 | ​​01背包理论基础、416. 分割等和子集
  • Radxa Rock 5B vs Rock 5B+ 、香橙派、鲁班猫、正点原子及RK3588 的AI/音视频任务的选择
  • springboot项目每次启动关闭端口仍被占用
  • 第 93 场周赛:二进制间距、重新排序得到 2 的幂、优势洗牌、最低加油次数
  • Agent实战教程:LangGraph相关概念介绍以及快速入门
  • Reachability Query