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

Linux iptables 防火墙

Linux iptables 防火墙入门教程(一):基础概念与规则配置

在互联网环境中,企业服务器面临着各类网络访问请求,既有正常的用户访问,也有潜在的恶意入侵。Linux 系统自带的 iptables 防火墙,凭借其内核级的高效性能和灵活的规则配置能力,成为保护服务器安全的重要工具。本文将从 iptables 的核心架构入手,详细讲解其表链结构、匹配流程,并通过实操演示规则的添加、查看、删除等基础操作,帮助初学者快速掌握 iptables 的使用方法。

一、iptables 概述:内核与用户态的协作

iptables 并非单一组件,而是由 内核态的 netfilter用户态的 iptables 工具 共同组成的防火墙体系,二者分工明确:

1.1 netfilter:内核空间的“防火墙核心”

netfilter 是 Linux 内核 2.4.x 之后集成的子系统,工作在 内核空间(Kernel Space),是防火墙功能的“执行者”。它具备以下特性:

  • 模块化设计:支持通过扩展模块实现过滤、地址转换、流量整形等功能;
  • 与 IP 协议栈无缝契合:直接对流经内核的 TCP/IP 数据包进行处理;
  • 内置规则表:通过表、链结构组织规则,实现对数据包的精准控制。

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

1.2 iptables:用户空间的“规则管理器”

iptables 是一款命令行工具,工作在 用户空间(User Space),是运维人员操作防火墙的“入口”。它的核心作用是:

  • 向 netfilter 的规则表中添加、修改、删除规则;
  • 查看当前规则配置,监控规则匹配情况;
  • 无需重启服务,规则配置后立即生效。

1.3 核心表结构:四表五链

为了高效组织规则,iptables 内置了 4 个规则表5 个规则链,形成“表里有链、链里有规则”的分层结构:

  • :按规则用途分类(如过滤、地址转换),默认包含 4 个表;
  • :按数据包处理时机分类(如入站、转发、出站),每个表包含不同的链;
  • 规则:定义对数据包的处理逻辑(如允许、丢弃),按顺序匹配执行。

二、iptables 核心架构:四表五链详解

2.1 四大规则表(按用途划分)

表名核心作用包含链应用场景
raw决定是否对数据包进行“状态跟踪”,优先级最高OUTPUT、PREROUTING极少用,多用于特殊场景
mangle修改数据包内容(如添加标记),用于流量整形INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING流量控制、QoS 配置
nat网络地址转换(修改源/目标 IP/端口)OUTPUT、PREROUTING、POSTROUTING内网访问公网(SNAT)、端口映射(DNAT)
filter核心表,负责数据包过滤(允许/拒绝),默认表INPUT、FORWARD、OUTPUT日常服务器安全防护

注:实际运维中,filter 表(过滤)和 nat 表(地址转换)使用频率最高,rawmangle 表多用于复杂场景。

2.2 五大规则链(按处理时机划分)

链名处理时机应用场景
INPUT处理入站数据包(目标 IP 为本机)控制外部对本机服务的访问(如 SSH、Web)
OUTPUT处理出站数据包(本机向外部发送)控制本机对外的访问(极少配置)
FORWARD处理转发数据包(流经本机但目标非本机)网络型防火墙(如路由器转发)
PREROUTING数据包路由选择前处理,可修改目标地址DNAT(端口映射)、修改目标 IP
POSTROUTING数据包路由选择后处理,可修改源地址SNAT(内网访问公网)、IP 伪装

2.3 数据包匹配流程:从进入到处理

数据包流经 iptables 时,会按“表优先级”和“链顺序”依次匹配,核心流程如下:

1. 表的优先级顺序

rawmanglenatfilter(优先级从高到低,前一个表处理完后,再进入下一个表)。

2. 不同场景的链匹配顺序
  • 主机型防火墙(数据包目标为本机):
    PREROUTING(raw→mangle→nat) → 路由选择 → INPUT(mangle→filter) → 本机应用程序
    (出站时:本机应用程序 → OUTPUT(raw→mangle→nat→filter) → POSTROUTING(mangle→nat))

  • 网络型防火墙(数据包需转发):
    PREROUTING(raw→mangle→nat) → 路由选择 → FORWARD(mangle→filter) → POSTROUTING(mangle→nat)

3. 链内规则匹配原则
  • 自上向下按顺序匹配,“匹配即停止”LOG 动作除外,仅记录日志,不终止匹配);
  • 若未找到匹配规则,按链的 默认策略 处理(默认策略为 ACCEPT,即允许)。

三、iptables 实操:安装与基础规则配置

3.1 环境准备:安装 iptables(CentOS 7 为例)

CentOS 7 默认使用 firewalld 防火墙,需先关闭并安装 iptables

# 1. 关闭 firewalld 并禁止开机启动
systemctl stop firewalld.service
systemctl disable firewalld.service# 2. 安装 iptables 及服务管理工具
yum -y install iptables iptables-services# 3. 启动 iptables 并设置开机启动
systemctl start iptables.service
systemctl enable iptables.service

3.2 核心语法:规则配置的通用格式

iptables 命令的语法严格遵循以下结构,缺一不可(部分参数可省略,有默认值):

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
参数说明
参数含义与注意事项
-t 表名指定操作的表(如 filternat),默认操作 filter
管理选项规则操作(如添加、查看、删除),需大写(如 -A-L-D
链名指定操作的链(如 INPUTFORWARD),默认操作表内所有链
匹配条件数据包的特征(如 IP、端口、协议),需小写(如 -s 192.168.1.1-p tcp
-j 控制类型匹配后的处理动作,需大写(如 ACCEPTDROPREJECT

3.3 常用控制类型:数据包的处理动作

控制类型作用适用场景
ACCEPT允许数据包通过,终止匹配放行正常访问(如 SSH、Web)
DROP直接丢弃数据包,不返回任何响应(“静默拒绝”)防御恶意扫描、攻击
REJECT拒绝数据包,返回响应(如“端口不可达”)需告知客户端“访问被拒绝”的场景
LOG记录日志到 /var/log/messages,不终止匹配,需配合其他动作使用审计、排查异常访问
SNAT修改数据包源 IP(如内网 IP → 公网 IP)内网主机通过公网 IP 上网
DNAT修改数据包目标 IP/端口(如公网端口 → 内网服务器)端口映射(如外网访问内网 Web)
MASQUERADE动态伪装源 IP(适用于公网 IP 不固定的场景,如拨号上网)家庭路由器、临时网络

3.4 基础操作:添加、查看、删除规则

3.4.1 查看规则:了解当前配置

查看规则是运维的第一步,常用命令如下:
在这里插入图片描述

规则字段解读(以 -vnL INPUT 输出为例):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination         1        0     0 ACCEPT     tcp  --  ens33  *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  • pkts/bytes:匹配到的数据包数量/总字节数;
  • target:处理动作(如 ACCEPT);
  • prot:匹配的协议(如 tcp);
  • in/out:入站/出站网卡(* 表示所有网卡);
  • source/destination:源/目标 IP/网段(0.0.0.0/0 表示所有地址)。
3.4.2 添加规则:允许/拒绝访问

添加规则使用 -A(追加到链末尾)或 -I(插入到链指定位置,默认插入到开头):

# 示例 1:允许所有主机访问本机 22 端口(SSH)
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT# 示例 2:拒绝 192.168.80.100 访问本机 80 端口(Web)
iptables -I INPUT 2 -s 192.168.80.100 -p tcp --dport 80 -j DROP
# -I INPUT 2:插入到 INPUT 链第 2 条规则;-s:指定源 IP# 示例 3:禁止所有主机 ping 本机(ICMP 协议)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# --icmp-type 8:ICMP 请求(ping 请求);类型 0 为 ping 响应

在这里插入图片描述

3.4.3 删除规则:清理无用配置

删除规则有两种方式:按“规则序号”删除(推荐)、按“规则内容”删除:

# 方式 1:按序号删除(先通过 --line-numbers 查看序号)
iptables -D INPUT 2  # 删除 INPUT 链第 2 条规则# 方式 2:按内容删除(需完整匹配规则)
iptables -t filter -D INPUT -p icmp --icmp-type 8 -j DROP

在这里插入图片描述

3.4.4 清空规则与重置默认策略
# 1. 清空 filter 表所有链的规则(-F:flush)
iptables -F# 2. 清空 nat 表所有链的规则
iptables -t nat -F# 3. 重置链的默认策略(-P:policy)
iptables -P INPUT DROP    # INPUT 链默认拒绝所有数据包
iptables -P FORWARD DROP  # 转发链默认拒绝(网络型防火墙常用)
iptables -P OUTPUT ACCEPT # 出站链默认允许

警告:若远程操作服务器,设置 INPUT 链默认策略为 DROP 前,需先添加允许 SSH(22 端口)的规则,否则会断开远程连接!

3.5 常见匹配条件:精准控制数据包

iptables 的匹配条件分为三类:通用匹配、隐含匹配、显式匹配,覆盖大部分场景需求。

1. 通用匹配(无需依赖模块,直接使用)
匹配条件示例
协议匹配 -piptables -A INPUT -p tcp -j ACCEPT(允许 TCP 协议)
源 IP 匹配 -siptables -A INPUT -s 192.168.80.0/24 -j ACCEPT(允许 80 网段)
目标 IP 匹配 -diptables -A FORWARD -d 10.0.0.0/8 -j DROP(拒绝转发到 10 网段)
入站网卡 -iiptables -A INPUT -i ens33 -p tcp --dport 80 -j ACCEPT(仅允许 ens33 网卡的 80 端口访问)
2. 隐含匹配(需依赖特定协议,如 TCP/UDP)
# 端口范围匹配(--dport:目标端口;--sport:源端口)
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT  # 允许 FTP 端口(20-21)
iptables -A INPUT -p udp --sport 53 -j ACCEPT     # 允许 DNS 响应(UDP 53 端口)# TCP 状态匹配(--state:连接状态)
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# ESTABLISHED:已建立的连接;RELATED:与已建立连接相关的连接(如 FTP 数据连接)
3. 显式匹配(需通过 -m 指定扩展模块)
# 多端口匹配(-m multiport:多端口模块)
iptables -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT  # 允许 SSH、Web 端口# IP 范围匹配(-m iprange:IP 范围模块)
iptables -A INPUT -p tcp -m iprange --src-range 192.168.80.100-192.168.80.200 --dport 80 -j DROP
# 拒绝 80.100-200 范围的 IP 访问 80 端口# MAC 地址匹配(-m mac:MAC 模块,仅适用于局域网)
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP  # 拒绝特定 MAC 地址访问

四、总结与注意事项

  1. 规则顺序很重要:链内规则按“自上而下”匹配,优先配置“精确允许”规则,再配置“默认拒绝”;
  2. 远程操作防断连:设置 INPUT 链默认 DROP 前,务必先允许 SSH(22 端口);
  3. 规则生效与保存:iptables 规则默认临时生效,重启后丢失,需通过 iptables-save 保存(后续文章会讲解);
  4. 生产环境建议:默认策略设为 DROP,仅开放必要端口(如 22、80、443),避免“一刀切”允许所有访问。

通过本文的学习,你已掌握 iptables 的核心架构和基础规则配置。下一篇文章将深入讲解 nat 表的地址转换(SNAT/DNAT)、规则保存与备份、以及常见场景的完整配置案例(如 Web 服务器防护、内网访问公网),敬请关注!

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

相关文章:

  • Linux网络编程基础API
  • [灵动微电子六步换向(方波控制)方案MM32BIN560C] 六步换向实现和规律
  • PostgreSQL诊断系列(2/6):锁问题排查全攻略——揪出“阻塞元凶”
  • RK3568 Linux驱动学习——pinctrl和gpio子系统
  • onnx入门教程(四)——ONNX 模型的修改与调试
  • Day24: NumPy 奥德赛:用科学计算的魔法征服数据宇宙!
  • 32.Ansible平台搭建
  • 2024年09月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • NFC线圈设计计算
  • 力扣热题——前K个高频元素
  • 记一次Arrays.asList集合删除的错误
  • Java vs Kotlin 在实际开发中的主要区别与面试题总结
  • 太阳光模拟器在国防军工中的应用
  • k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)
  • K8s Pod驱逐机制详解与实战
  • SpringBoot防重放攻击的5种实现方案
  • 什么是数据库?现代数据库类型、示例与应用(2025)
  • 深入理解 iptables:Linux 防火墙从入门到精通
  • Vue3使用 DAG 图(AntV X6)
  • 2024年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Spring Boot 3.5 新特性
  • C++ namespace
  • 国内外大模型体验与评测:洞察智能时代的核心驱动力一、引言
  • DataX HdfsWriter 插件文档
  • 实现自己的AI视频监控系统-第二章-AI分析模块2
  • Java全栈开发面试实战:从基础到微服务的完整技术解析
  • Oracle数据库如何修改字段中的两个字符
  • CF2133C 下界(The Nether)
  • 敏捷价值实证:亚马逊如何用敏捷破解技术项目的“价值迷雾”?
  • 学习做动画3.八方移动