灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

  • 容器与编排

  • Nginx

  • 监控

  • 网络安全

    • Firewalld 企业运维实战:从入门到防DDoS
    • 常用 Linux iptables 规则速查
      • 1. iptables 基础概念
        • 1.1 四大表
        • 1.2 五链
        • 1.3 基本工作流程
      • 2. 基础操作命令
        • 2.1 查看与删除
        • 2.2 默认策略
        • 2.3 增删规则
        • 2.4 保存与恢复
      • 3. 常见规则示例
        • 3.1 SSH 安全
        • 3.2 Web 服务
        • 3.3 基础网络
        • 3.4 IP 黑白名单
      • 4. NAT 与端口转发
        • 4.1 SNAT(源地址转换)
        • 4.2 DNAT(目的地址转换)
      • 5. DDoS 防护规则
        • 5.1 连接速率限制
        • 5.2 SYN Flood 防护
        • 5.3 ICMP 防护
      • 6. 日志记录
        • 6.1 记录丢弃的包
        • 6.2 自定义日志级别
      • 7. 高级用法
        • 7.1 基于时间的规则
        • 7.2 基于 MAC 地址
        • 7.3 连接状态扩展
        • 7.4 端口集合
      • 8. 坑与边界
      • 9. 可复用要点
    • SSH 安全加固与企业运维实战
    • LDAP统一认证管理
    • 企业 Docker+OpenVPN+LDAP+OTP 快速搭建实战
  • 其他

  • Linux笔记
  • 网络安全
灯下哥谭
2024-06-12
目录

常用 Linux iptables 规则速查原创

# 常用 Linux iptables 规则速查

版本说明

本文基于 CentOS/RHEL 7+ 和 Ubuntu 18.04+ 测试。
如系统已切换至原生 nftables,规则需用 nft 语法改写。


# 1. iptables 基础概念

# 1.1 四大表

表 用途
filter 包过滤(默认表)
nat 网络地址转换
mangle 修改包头部字段
raw 连接跟踪前处理

# 1.2 五链

链 处理时机
INPUT 入站流量,到达本机
OUTPUT 出站流量,从本机发出
FORWARD 转发流量
PREROUTING 路由前 DNAT
POSTROUTING 路由后 SNAT

# 1.3 基本工作流程

入站包 → PREROUTING → 路由判断 → INPUT → 本机进程
                     ↓
转发包 → PREROUTING → FORWARD → POSTROUTING → 出站
                     ↓
出站包 → OUTPUT → POSTROUTING → 出站
1
2
3
4
5

# 2. 基础操作命令

# 2.1 查看与删除

# 查看当前规则(精简)
iptables -L -n

# 查看详细规则(含序号)
iptables -L -n -v --line-numbers

# 删除所有规则
iptables -F

# 删除用户自定义链
iptables -X

# 清空计数器
iptables -Z
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2.2 默认策略

# 设置默认策略为 DROP(推荐生产环境)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 恢复默认策略
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
1
2
3
4
5
6
7
8
9

# 2.3 增删规则

# 追加规则(末尾)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 插入规则(指定位置)
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

# 删除规则(按内容)
iptables -D INPUT -p tcp --dport 22 -j ACCEPT

# 按序号删除
iptables -D INPUT 3
1
2
3
4
5
6
7
8
9
10
11

# 2.4 保存与恢复

# Debian/Ubuntu
sudo sh -c "iptables-save > /etc/iptables/rules.v4"

# CentOS/RHEL
sudo iptables-save > /etc/sysconfig/iptables

# 恢复规则
sudo iptables-restore < /etc/iptables/rules.v4
1
2
3
4
5
6
7
8

# 3. 常见规则示例

# 3.1 SSH 安全

# 允许 SSH(新连接 + 已建立)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 仅允许特定网段 SSH
iptables -A INPUT -p tcp -s <TRUSTED_NETWORK> --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# 限制 SSH 连接速率(防暴力破解)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
1
2
3
4
5
6
7
8
9
10

# 3.2 Web 服务

# 允许 HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

# 多端口合并
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
1
2
3
4
5
6
7
8

# 3.3 基础网络

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 允许 ICMP(ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# 允许 DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
1
2
3
4
5
6
7
8
9
10
11

# 3.4 IP 黑白名单

# 禁止特定 IP
iptables -A INPUT -s <INTERNAL_IP_1>0 -j DROP

# 仅允许特定 IP 段
iptables -A INPUT -s <INTERNAL_NETWORK> -j ACCEPT
iptables -A INPUT -j DROP

# 禁止 IP 范围
iptables -A INPUT -m iprange --src-range <INTERNAL_IP_1>-192.0.2.20 -j DROP
1
2
3
4
5
6
7
8
9

# 4. NAT 与端口转发

# 4.1 SNAT(源地址转换)

# 开启 IP 转发
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

# 内网共享上网(MASQUERADE 自动获取出口 IP)
iptables -t nat -A POSTROUTING -s <LAN_SUBNET> -o eth0 -j MASQUERADE

# 固定 IP 的 SNAT
iptables -t nat -A POSTROUTING -s <LAN_SUBNET> -o eth0 -j SNAT --to-source 203.0.113.10
1
2
3
4
5
6
7
8
9

# 4.2 DNAT(目的地址转换)

# 端口转发:外部 3306 → 内部 MySQL
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination <GATEWAY_IP>0:3306
iptables -A FORWARD -p tcp --dport 3306 -d <GATEWAY_IP>0 -j ACCEPT

# 端口转发:422 → 22
iptables -t nat -A PREROUTING -p tcp --dport 422 -j DNAT --to <GATEWAY_IP>:22

# 流量分发(负载均衡示例)
iptables -t nat -A PREROUTING -p tcp --dport 443 -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination <GATEWAY_IP>:443
iptables -t nat -A PREROUTING -p tcp --dport 443 -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination <INTERNAL_PREFIX>.11:443
1
2
3
4
5
6
7
8
9
10

# 5. DDoS 防护规则

# 5.1 连接速率限制

# 限制每 IP 80 端口并发连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j REJECT

# 限制 HTTP 请求速率
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
1
2
3
4
5
6

# 5.2 SYN Flood 防护

# 限制 SYN 包速率
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
1
2
3

# 5.3 ICMP 防护

# 限制 ping 速率
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
1
2
3

# 6. 日志记录

# 6.1 记录丢弃的包

# 创建日志链
iptables -N LOGGING
iptables -A INPUT -j LOGGING

# 记录日志(带前缀,限制速率)
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

# 查看日志
tail -f /var/log/messages | grep IPTales
# 或
journalctl -k | grep -i iptables
1
2
3
4
5
6
7
8
9
10
11
12

# 6.2 自定义日志级别

# 记录但不丢弃
iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP-Request: " --log-level 6
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
1
2
3

# 7. 高级用法

# 7.1 基于时间的规则

# 工作时间(9:00-18:00)允许访问
iptables -A INPUT -p tcp --dport 80 -m time --timestart 09:00 --timestop 18:00 -j ACCEPT

# 凌晨拒绝所有 TCP
iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
1
2
3
4
5

# 7.2 基于 MAC 地址

# 仅允许特定 MAC 访问
iptables -A INPUT -p tcp --dport 22 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
1
2

# 7.3 连接状态扩展

# 允许相关/已建立的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 阻止无效连接
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
1
2
3
4
5

# 7.4 端口集合

# 允许多个端口
iptables -A INPUT -p tcp -m multiport --dports 22,80,443,3306 -j ACCEPT

# 允许端口范围
iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT
1
2
3
4
5

# 8. 坑与边界

  1. 默认策略为 ACCEPT 时慎用 -F:清空规则后,所有流量将直接放行。生产环境务必先设 DROP 默认策略。

  2. 规则顺序很重要:iptables 按顺序匹配,第一条符合条件的规则生效。限制性规则应放在前面。

  3. OUTPUT 默认 ACCEPT 的隐患:如果本机被入侵,恶意程序可以随意外发数据。建议生产环境 OUTPUT 也设为 DROP 或严格控制。

  4. SSH 规则放错位置的后果:如果先 DROP 所有 INPUT,再插入 SSH 规则时位置在 DROP 之后,SSH 将无法连接。建议先用 iptables -I 插入到最前面,或在 DROP 规则中排除 SSH 端口。

  5. NAT 与 filter 表的执行顺序:数据包先经过 nat 表(做地址转换),再经过 filter 表(做过滤)。因此 filter 规则中的源/目的 IP 已经是转换后的 IP。

  6. 保持连接状态:重启 iptables 后已建立的连接会中断。如需持久保存规则,使用 iptables-save 并配合 systemd 服务开机加载。

  7. 与 Firewalld 冲突:两者不能同时使用。CentOS 7+ 默认启用 Firewalld,如需使用 iptables,需先停用 Firewalld:systemctl stop firewalld; systemctl disable firewalld; yum install iptables-services。


# 9. 可复用要点

  1. 快速初始化脚本模板:

    #!/bin/bash
    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    
    # 放行本地
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
    # 放行 SSH(务必确认 IP 段)
    iptables -A INPUT -p tcp -s <YOUR_IP> --dport 22 -j ACCEPT
    
    # 保存
    iptables-save > /etc/sysconfig/iptables
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
  2. 生产环境检查清单:

    • 默认策略是否为 DROP
    • SSH 规则是否限制来源 IP
    • 是否开启连接状态跟踪
    • 规则是否已持久化
  3. 调试技巧:

    • 使用 -v 查看匹配的包数量
    • 使用 --line-numbers 定位规则位置
    • 使用 -C 测试规则是否存在:iptables -C INPUT -p tcp --dport 22 -j ACCEPT
#安全加固#iptables
上次更新: 9/11/2026

← Firewalld 企业运维实战:从入门到防DDoS SSH 安全加固与企业运维实战→

最近更新
01
DeepSeek Harness 实战 06|学习笔记:插件、工具、技能不在同一个维度上 原创
09-11
02
DeepSeek Harness 实战 05|让两个编码 Agent 共用一份长期记忆 原创
09-09
03
DeepSeek Harness 实战 04|学习笔记:从「已知限制」里读出三处设计张力 原创
09-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式