深入理解 iptables:Linux 防火墙从入门到精通

前言

[一、iptables 核心概念解析](#一、iptables 核心概念解析)

[1.1 Netfilter 与 iptables 的关系](#1.1 Netfilter 与 iptables 的关系)

核心区别:

[1.2 iptables 的工作原理](#1.2 iptables 的工作原理)

[二、iptables 的表与链架构详解](#二、iptables 的表与链架构详解)

[2.1 四张表的功能与作用](#2.1 四张表的功能与作用)

[2.2 五条链的处理时机](#2.2 五条链的处理时机)

[2.3 数据包处理流程详解](#2.3 数据包处理流程详解)

规则表优先级顺序:

三种数据流向:

规则匹配机制:

[三、iptables 实战配置指南](#三、iptables 实战配置指南)

[3.1 环境准备与安装](#3.1 环境准备与安装)

[在 CentOS/RHEL 7+ 中切换至 iptables:](#在 CentOS/RHEL 7+ 中切换至 iptables:)

[3.2 基础语法结构](#3.2 基础语法结构)

注意事项:

[3.3 常用控制类型说明](#3.3 常用控制类型说明)

[3.4 规则管理实战示例](#3.4 规则管理实战示例)

查看现有规则:

添加规则示例:

删除和清空规则:

设置默认策略:

[3.5 高级匹配条件详解](#3.5 高级匹配条件详解)

通用匹配:

隐含匹配(需指定协议):

显式匹配(使用扩展模块):

[3.6 实用配置案例](#3.6 实用配置案例)

基础服务器保护:

[NAT 转发配置(网关服务器):](#NAT 转发配置(网关服务器):)

防止常见攻击:

四、维护与故障排除

[4.1 规则保存与恢复](#4.1 规则保存与恢复)

[4.2 常见问题排查](#4.2 常见问题排查)

[4.3 监控与日志分析](#4.3 监控与日志分析)

五、相关参数表

表选择参数

规则管理选项

查看选项

基本匹配条件

基本动作

结语

前言

在当今互联网环境中,企业通过各种应用系统(如 Web 服务器、电子邮件系统、FTP 服务、数据库系统等)为用户提供网络服务。然而,网络安全威胁日益增多,如何有效保护这些服务器,过滤不必要的访问甚至恶意入侵,成为了每个系统管理员必须面对的问题。

Linux 系统中的防火墙工具------iptables,正是解决这一问题的强大武器。本文将深入介绍 iptables 的基本概念、表链结构、数据包处理流程以及详细的规则配置方法,帮助你构建坚实可靠的网络防护体系。


一、iptables 核心概念解析

1.1 Netfilter 与 iptables 的关系

Linux 防火墙功能主要由 Netfilter 组件提供,这是一个集成在内核中的子系统,负责实际的数据包过滤和处理工作。

核心区别:
  • Netfilter:工作在内核空间(Kernel Space),是实际的防火墙功能体系,由一系列信息包过滤表组成,包含内核用来控制信息包过滤处理的规则集。

  • iptables :工作在用户空间(User Space),是管理防火墙规则的命令行工具,位于 /sbin/iptables,用于插入、修改和删除数据包过滤表中的规则。

简单理解:Netfilter 是引擎,iptables 是方向盘和操控台。

1.2 iptables 的工作原理

iptables 工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙。它会对请求的数据包头部信息进行分析,根据预设的规则进行匹配,决定数据包的命运(放行、拒绝或修改)。


二、iptables 的表与链架构详解

2.1 四张表的功能与作用

iptables 包含四个内置表,每个表都有其特定的用途:

表名 功能描述 包含的链
raw 决定是否对数据包进行状态跟踪 OUTPUT, PREROUTING
mangle 修改数据包内容,用于流量整形 INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING
nat 网络地址转换,修改源/目标IP或端口 OUTPUT, PREROUTING, POSTROUTING
filter 过滤数据包,决定是否放行(最常用) INPUT, FORWARD, OUTPUT

2.2 五条链的处理时机

链名 处理时机 典型应用
INPUT 处理目标为本机的数据包 保护本机服务
OUTPUT 处理本机发出的数据包 控制出站流量
FORWARD 处理经本机转发的数据包 路由器功能
PREROUTING 路由选择前处理数据包 DNAT(目的地址转换)
POSTROUTING 路由选择后处理数据包 SNAT(源地址转换)

2.3 数据包处理流程详解

规则表优先级顺序:
复制代码
raw` → `mangle` → `nat` → `filter
三种数据流向:
  1. 入站数据流(目标为本机):

    text

    复制代码
    PREROUTING → INPUT → 应用程序
  2. 出站数据流(本机发出):

    text

    复制代码
    应用程序 → OUTPUT → POSTROUTING
  3. 转发数据流(经本机转发):

    text

    复制代码
    PREROUTING → FORWARD → POSTROUTING
规则匹配机制:
  • 自上而下逐条匹配,遵循"匹配即停止"原则

  • LOG 操作是个例外,记录日志后继续匹配下一条规则

  • 若无匹配规则,则执行链的默认策略(默认通常为 ACCEPT)


三、iptables 实战配置指南

3.1 环境准备与安装

在 CentOS/RHEL 7+ 中切换至 iptables:

bash

复制代码
# 停止并禁用 firewalld
systemctl stop firewalld
systemctl disable firewalld
​
# 安装 iptables 服务
yum install -y iptables iptables-services
​
# 启动并设置开机自启
systemctl start iptables
systemctl enable iptables
​
# 保存当前规则
service iptables save

3.2 基础语法结构

bash

复制代码
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
注意事项:
  • 不指定表名时,默认为 filter

  • 不指定链名时,默认为表内的所有链

  • 选项、链名、控制类型使用大写字母

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

3.3 常用控制类型说明

控制类型 说明 使用场景
ACCEPT 允许数据包通过 放行合法流量
DROP 直接丢弃数据包 静默拒绝访问
REJECT 拒绝并发送响应 明确拒绝访问
LOG 记录日志信息 调试和审计
SNAT 修改源地址 出口地址转换
DNAT 修改目的地址 入口地址转换
MASQUERADE 动态IP伪装 拨号网络环境

3.4 规则管理实战示例

查看现有规则:

bash

复制代码
# 查看 filter 表所有规则(带编号)
iptables -L -n --line-numbers
​
# 查看 nat 表规则(数字格式显示)
iptables -t nat -nL
​
# 查看详细计数信息
iptables -vnL
添加规则示例:

bash

复制代码
# 允许 SSH 连接(插入到第2条位置)
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
​
# 允许本地回环接口
iptables -A INPUT -i lo -j ACCEPT
​
# 允许已建立的连接和相关的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
​
# 拒绝所有 ping 请求
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
删除和清空规则:

bash

复制代码
# 按编号删除规则
iptables -D INPUT 3
​
# 按内容删除规则
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
​
# 清空所有规则(慎用!)
iptables -F
​
# 清空特定表的规则
iptables -t nat -F
设置默认策略:

bash

复制代码
# 设置默认拒绝所有入站连接
iptables -P INPUT DROP
​
# 设置默认允许所有出站连接
iptables -P OUTPUT ACCEPT
​
# 设置默认拒绝所有转发
iptables -P FORWARD DROP

重要提示:设置默认策略为 DROP 前,务必先放行必要的管理连接(如 SSH),否则可能导致无法远程管理服务器!

3.5 高级匹配条件详解

通用匹配:

bash

复制代码
# 基于源地址匹配
iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
​
# 基于目标地址匹配
iptables -A OUTPUT -d 10.0.0.0/8 -j DROP
​
# 基于网络接口匹配
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
​
# 基于协议匹配
iptables -A INPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A INPUT -p icmp -j DROP
隐含匹配(需指定协议):

bash

复制代码
# 端口匹配
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # 目的端口
iptables -A INPUT -p udp --sport 53 -j ACCEPT    # 源端口
​
# 端口范围匹配
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT
​
# ICMP 类型匹配
iptables -A INPUT -p icmp --icmp-type 8 -j DROP      # 禁止 ping
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT    # 允许 ping 回复
显式匹配(使用扩展模块):

bash

复制代码
# 多端口匹配
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
​
# IP 范围匹配
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
​
# MAC 地址匹配
iptables -A INPUT -m mac --mac-source 00:1A:2B:3C:4D:5E -j DROP
​
# 连接状态匹配(最常用)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
​
# 限制连接速率
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

3.6 实用配置案例

基础服务器保护:

bash

复制代码
# 清空所有规则
iptables -F
​
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
​
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
​
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
​
# 开放必要端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT   # HTTPS
​
# 允许 ICMP (ping)
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
​
# 记录并拒绝其他所有入站连接
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
iptables -A INPUT -j DROP
NAT 转发配置(网关服务器):

bash

复制代码
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
​
# SNAT:内网通过公网IP上网
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
​
# DNAT:将公网IP端口映射到内网服务器
iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80
iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 22 -j DNAT --to-destination 192.168.0.101:22
防止常见攻击:

bash

复制代码
# 防止 SYN 洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
​
# 防止 Ping 洪水攻击
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
​
# 阻止无效数据包
iptables -A INPUT -m state --state INVALID -j DROP
​
# 防止端口扫描
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

四、维护与故障排除

4.1 规则保存与恢复

bash

复制代码
# 保存当前规则(CentOS 6/7)
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
​
# 恢复规则
iptables-restore < /etc/sysconfig/iptables
​
# 备份规则
iptables-save > iptables-backup-$(date +%Y%m%d).rules

4.2 常见问题排查

  1. 规则不生效:检查规则顺序,确认没有更早的匹配规则

  2. 无法远程连接:检查是否误删了 SSH 规则

  3. 服务无法访问:确认相关端口的规则已正确配置

  4. 性能问题:将常用规则放在前面,减少匹配时间

4.3 监控与日志分析

bash

复制代码
# 查看实时日志
tail -f /var/log/messages | grep IPTABLES
​
# 统计规则匹配次数
iptables -L -v -n
​
# 重置计数器
iptables -Z

五、相关参数表

表选择参数

参数 说明 示例
-t filter 过滤表(默认) iptables -t filter -L
-t nat 网络地址转换表 iptables -t nat -L
-t mangle 包修改表 iptables -t mangle -L
-t raw 原始数据包表 iptables -t raw -

规则管理选项

选项 说明 示例
-A 在链尾追加规则 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-I 在指定位置插入规则 iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
-D 删除规则 iptables -D INPUT 3
-R 替换规则 iptables -R INPUT 1 -p tcp --dport 80 -j DROP
-F 清空链中所有规则 iptables -F INPUT
-Z 清空计数器 iptables -Z INPUT
-N 创建新链 iptables -N MY_CHAIN
-X 删除自定义空链 iptables -X MY_CHAIN
-P 设置链默认策略 iptables -P INPUT DROP

查看选项

选项 说明 示例
-L 列出规则 iptables -L
-n 数字格式显示 iptables -nL
-v 详细信息显示 iptables -vL
--line-numbers 显示规则行号 iptables -L --line-numbers
-x 显示精确计数值 iptables -L -x
--modprobe 自动加载模块 iptables --modprobe=ip_tables -L

基本匹配条件

参数 说明 示例
-p 协议匹配 -p tcp, -p udp, -p icmp, -p all
-s 源地址匹配 -s 192.168.1.1, -s 192.168.1.0/24
-d 目标地址匹配 -d 10.0.0.1, -d 10.0.0.0/8
-i 入站网卡匹配 -i eth0, -i lo
-o 出站网卡匹配 -o eth1, -o ppp0
-m 加载扩展模块 -m state, -m multiport

基本动作

动作 说明 示例
ACCEPT 接受数据包 -j ACCEPT
DROP 丢弃数据包 -j DROP
REJECT 拒绝并发送错误 -j REJECT
RETURN 返回调用链 -j RETURN
LOG 记录日志 -j LOG

结语

iptables 是 Linux 系统中功能强大、灵活性高的防火墙工具,通过深入理解其表链结构、数据包处理流程和规则配置方法,你可以构建出适合各种场景的网络安全防护体系。

在实际应用中,建议遵循"最小权限原则",只开放必要的服务和端口,定期审查和优化防火墙规则,结合日志监控和分析,不断提升网络安全性。

相关推荐
奇妙-17 分钟前
创龙3576ububuntu系统设置静态IP方法
linux
Jayyih1 小时前
嵌入式系统学习Day23(进程)
linux·运维·服务器
Johny_Zhao1 小时前
Conda、Anaconda、Miniconda对比分析
linux·网络安全·信息安全·kubernetes·云计算·conda·shell·containerd·anaconda·yum源·系统运维·miniconda
墨雨听阁1 小时前
8.26网络编程——Modbus TCP
网络·网络协议·学习·tcp/ip
尘似鹤2 小时前
freeModbus TCP收发数据一段时间后,出现掉线情况(time out问题)
网络·tcp/ip·modbus
大数据小墨2 小时前
在Arch Linux上设置SDDM自动登录Hyprland
linux
shylyly_2 小时前
Linux->多线程3
java·linux·开发语言·阻塞队列·生产者消费者模型
小王努力学编程2 小时前
从零开始的 Docker 之旅
linux·运维·服务器·docker·容器·容器编排·镜像制作
神秘人X7072 小时前
Ansible自动化运维介绍与安装
运维·自动化·ansible
望获linux2 小时前
【实时Linux实战系列】基于实时Linux的音频实时监控系统
大数据·linux·服务器·网络·数据库·操作系统·嵌入式软件