【Linux】iptables常用指令

一、iptables 核心基础概念

1.iptables 的作用

iptables 是 Linux 系统上最常用的 防火墙工具,用于配置内核的 netfilter 包过滤框架

ufw是基于iptables 进行封装的。

2.iptables 核心概念
概念 解释
表(Table) 按功能分类的规则集合,核心有 4 个:filter(过滤)、nat(地址转换)、mangle(修改数据包)、raw(原始数据包)
链(Chain) 表内的规则执行顺序,内置链:INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING(路由前)、POSTROUTING(路由后)
匹配条件 筛选数据包的依据(如协议、IP、端口、网卡)
目标动作(Target) 匹配后执行的操作(如 ACCEPT、DROP、REJECT、SNAT、DNAT 等)
3.数据包流转流程(表与链的执行顺序)
(1).入站数据包(目标是本机)
shell 复制代码
网卡接收 → PREROUTING(raw→mangle→nat) → 路由判断 → INPUT(mangle→filter) → 本机进程
(2).转发数据包(本机是路由器)
shell 复制代码
网卡接收 → PREROUTING(raw→mangle→nat) → 路由判断 → FORWARD(mangle→filter) → POSTROUTING(mangle→nat) → 网卡发出
(3).出站数据包(本机发起)
shell 复制代码
本机进程 → OUTPUT(raw→mangle→nat→filter) → 路由判断 → POSTROUTING(mangle→nat) → 网卡发出

二、iptables 命令基本语法

shell 复制代码
iptables [选项] [表名] [链名] [匹配条件] -j [目标动作]
1. 核心选项
选项 作用
-A Append,追加规则到链的末尾(不会覆盖现有规则)
-I Insert,插入规则到链的指定位置(默认插在首位,如 -I INPUT 3 插在第 3 位)
-D Delete,删除链中的规则(可指定规则序号或完整规则)
-R Replace,替换链中的指定规则
-L List,列出链中的所有规则(常用 -L -n 以数字显示 IP / 端口,避免解析)
-F Flush,清空链中的所有规则(慎用!)
-P Policy,设置链的默认策略(如 iptables -P INPUT DROP,默认拒绝所有入站)
-N New,创建自定义链(如 iptables -N MY_CHAIN)
-X Delete chain,删除自定义链(需先清空链内规则)
-Z Zero,清空链的计数器(统计数据包数量 / 字节数)
2. 表名指定(-t)
表名 作用 常用链
filter(默认) 数据包过滤(核心) INPUT、OUTPUT、FORWARD
nat 网络地址转换 PREROUTING、POSTROUTING、OUTPUT
mangle 修改数据包属性(TTL/MARK) 所有链
raw 关闭连接追踪(高并发优化) PREROUTING、OUTPUT

注意:不指定 -t 时,默认使用 filter 表。

3. 常用匹配条件
条件 作用 示例
-p 指定协议(tcp/udp/icmp/all) -p tcp(匹配 TCP 协议)
-s 源 IP / 网段 -s 192.168.1.100(指定源 IP)
-d 目的 IP / 网段 -d 10.0.0.0/24(指定目的网段)
--sport 源端口(仅 tcp/udp) --sport 8080(源端口 8080)
--dport 目的端口(仅 tcp/udp) --dport 80:443(端口 80 到 443)
-i 入站网卡(仅 INPUT/FORWARD/PREROUTING) -i eth0(仅匹配 eth0 入站流量)
-o 出站网卡(仅 OUTPUT/FORWARD/POSTROUTING) -o eth1(仅匹配 eth1 出站流量)
--icmp-type ICMP 类型(ping 相关) --icmp-type 8(匹配 ping 请求)
-m multiport 多端口匹配(需先指定 -m multiport) -m multiport --dports 80,443,8080
-m state 连接状态匹配(NEW/ESTABLISHED/RELATED) -m state --state ESTABLISHED(匹配已建立的连接)
4. 常用目标动作(-j)
动作 作用 适用场景
ACCEPT 允许数据包通过 放行合法流量
DROP 丢弃数据包(无回应) 静默拒绝(如屏蔽恶意 IP)
REJECT 拒绝数据包(返回错误信息) 明确拒绝(如告知对方端口不可达)
SNAT 源地址转换(内网→外网) -j SNAT --to-source 公网IP
DNAT 目的地址转换(外网→内网) -j DNAT --to-destination 内网IP:端口
MASQUERADE 动态 SNAT(适用于公网 IP 动态分配) -j MASQUERADE(路由器 NAT)
MARK 给数据包打标记(mangle 表常用) -j MARK --set-mark 100
RETURN 返回到主链继续执行规则 自定义链中结束后返回主链

三、常用命令示例(新手必掌握)

shell 复制代码
# 查看filter表INPUT链规则(指定表和链)
iptables -t filter -L INPUT -n

# 拒绝所有访问8090端口的TCP流量(默认filter表)
iptables -A INPUT -p tcp --dport 8090 -j DROP

# 允许特定IP(192.168.1.100)访问8090端口(TCP)
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 8090 -j ACCEPT

四、规则保存与恢复(避免重启失效)

shell 复制代码
# 方式1:手动保存/恢复
iptables-save > /etc/iptables.rules  # 保存规则到文件
iptables-restore < /etc/iptables.rules  # 从文件恢复规则

# 方式2:Debian/Ubuntu(持久化)
apt install iptables-persistent -y  # 安装持久化工具
# 保存规则(自动写入/etc/iptables/rules.v4)
iptables-save > /etc/iptables/rules.v4

# 方式3:CentOS/RHEL 7+(firewalld兼容)
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT
firewall-cmd --reload  # 重载规则

五、Docker 环境下的特殊逻辑

  • docker 会自动在 iptables 的 filter 表中创建专属链(如 DOCKER、DOCKER-USER、DOCKER-ISOLATION-STAGE-1/2),所有容器的端口映射、网络隔离规则都会放在这些链中,且 **DOCKER-USER 链是官方推荐的用户自定义规则入口 **(优先级高于 Docker 自动生成的规则)。如果直接修改 INPUT 链,可能会被 Docker 自动规则覆盖。
  • 所有针对 Docker 容器端口的过滤规则,都加到 filter 表的 DOCKER-USER 链(而非 INPUT/PREROUTING);
shell 复制代码
# 1. 允许特定IP访问80端口(Docker容器暴露的80端口)
iptables -t filter -I DOCKER-USER -p tcp -s 你的目标IP --dport 80 -j ACCEPT

# 2. 拒绝所有访问8090端口的TCP流量(包括Docker容器的8090端口)
iptables -t filter -A DOCKER-USER -p tcp --dport 8090 -j DROP
相关推荐
Saniffer_SH2 小时前
【高清视频】笔记本电脑出现蓝屏、死机、慢、不稳定是这样连接分析M.2 SSD的
运维·服务器·网络·人工智能·驱动开发·嵌入式硬件·fpga开发
宴之敖者、2 小时前
Linux——编译器-gcc/g++
linux·运维·服务器
七七powerful2 小时前
docker 搭建wtsap代理
运维·docker·容器
DianSan_ERP2 小时前
从数据到决策:京东接口如何驱动供应链数字化升级
大数据·运维·服务器·数据库·人工智能·性能优化·架构
时光不弃青栀2 小时前
Windows服务器无法复制粘贴文件
运维·服务器·windows
ZFB00012 小时前
【麒麟桌面系统】V10-SP1 2503 系统知识——开机启动无Grub界面
linux·运维·kylin
云飞云共享云桌面2 小时前
上海模具制造工厂10人用一台共享电脑做SolidWorks设计
linux·运维·服务器·网络·自动化
Shanxun Liao3 小时前
Docker vlmcsd 完整管理指南
运维·docker·容器
無法複制3 小时前
Centos7安装MySQL8.0
linux·mysql