iptables防火墙入门:规则管理与实战示例

iptables防火墙入门:规则管理与实战示例

你刚买了一台服务器,想配防火墙。搜索了一下,看到iptables的命令行语法,头皮发麻。-A-D-t nat--dport……这些参数看着就不像人类能记住的。你想关掉一些端口,又怕把自己锁在外面。更麻烦的是,很多人配完防火墙自己先连不上服务器了。

今天把iptables的基本概念和常用命令讲清楚,让你能看懂、能上手。

先看一个数据

iptables是基于Netfilter框架的Linux内核级防火墙工具,至今仍是大多数Linux发行版的默认防火墙方案。它通过定义规则链(Chain)和规则(Rule)对网络流量进行精细化控制。在云原生时代,虽然出现了更现代化的替代方案,但iptables在存量系统和经典运维场景中仍占据主导地位

核心概念:表与链

在iptables里,规则按“表→链→规则”三层结构组织。表代表功能分类,链代表流量处理阶段,规则决定具体动作。

四张常用表

表名用途包含链
filter默认表,负责数据包的允许/拒绝INPUT、OUTPUT、FORWARD
nat网络地址转换(端口转发、IP伪装)PREROUTING、POSTROUTING、OUTPUT
mangle修改数据包头部(如TTL、QoS标记)五条链全有
raw绕过连接跟踪,提升性能PREROUTING、OUTPUT

普通用户最常用的是filter表(过滤流量)和nat表(端口转发)。

五条核心链

  • INPUT:处理进入本机的数据包(别人访问你的服务器)
  • OUTPUT:处理本机发出的数据包(你的服务器访问别人)
  • FORWARD:处理经过本机转发的数据包(把服务器当路由器用)
  • PREROUTING:路由决策前处理(常用于DNAT)
  • POSTROUTING:路由决策后处理(常用于SNAT)

重点:你配安全组用的是INPUT链,配端口转发用的是nat表的PREROUTING链。

常用命令

查看规则:

bash

iptables -L -v -n

-L列出规则,-v显示详细信息,-n用数字显示IP和端口(不解析域名)。

查看nat表规则:

bash

iptables -t nat -L -v -n

添加规则(追加到末尾):

bash

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许SSH连接(22端口)。

插入规则(放到最前面):

bash

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

删除规则(按内容):

bash

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

清空所有规则:

bash

iptables -F

实战示例

示例1:基础防火墙

bash

# 默认拒绝所有入站流量
iptables -P INPUT DROP
iptables -P FORWARD DROP

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

# 允许已建立的连接
iptables -A INPUT -m conntrack --ctstate 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

示例2:端口转发

bash

# 将外部访问80端口的流量转发到内网服务器
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8080 -j ACCEPT

保存规则(重要)

iptables规则默认是临时的。重启服务器或systemctl restart iptables后规则会丢失。

Debian/Ubuntu:

bash

apt install iptables-persistent
netfilter-persistent save

CentOS/RHEL:

bash

service iptables save

真实案例:配完自己连不上

一个朋友在服务器上配防火墙,iptables -P INPUT DROP然后只开了80和443端口。忘记开22端口,SSH连接直接被切断了。他只能去云厂商控制台用VNC登录,把22端口加上。

教训:改默认策略之前,一定先确保SSH端口已经放行。顺序应该是先加允许规则,再改默认策略。

最后一句

iptables的配置看似复杂,但核心就几件事:用filter表控入站,用nat表做转发,规则顺序决定匹配优先级。先配允许规则再改默认策略,不然你会把自己关在外面。

建议新手从简单规则开始:先允许SSH,再允许HTTP/HTTPS,最后把默认策略改成DROP。等熟悉了再尝试NAT和自定义链。

知识库

Linux系统性能监控:常用命令与指标解读

2026-7-1 16:28:08

实操指南知识库

从LAMP到MEAN:新一代Web开发栈完全指南

2024-11-21 11:31:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧