找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5331

积分

0

好友

722

主题
发表于 2 小时前 | 查看: 5| 回复: 0

你是否曾被 iptables 复杂的规则链绕晕,或者在调试 firewalld 时不小心把自己锁在了服务器外面?Linux 防火墙是系统的第一道防线,但其命令体系确实有些庞杂。本文将核心的分类与常用命令整理成册,方便你随时查阅,让防火墙从“拦路虎”变成你的好帮手。

一、Linux防火墙核心机制

1.1 防火墙定义与核心作用

Linux 防火墙实际上是内核级的流量过滤工具。它通过预设规则,对进出系统的数据包进行放行、拒绝或转发。其核心目的,是在风险区域与安全区域之间建立隔离——阻止未授权访问、过滤掉不安全的服务,并为安全监控提供数据支持。

这套机制的核心,是 Linux 内核中的 netfilter 网络过滤模块。它负责数据包最底层的过滤、转发等处理,模块路径通常位于 /lib/modules/(内核版本)/kernel/net/netfilter 。我们常用的各类防火墙管理工具,都是基于这个模块提供的接口进行规则配置的。

1.2 Linux防火墙主要分类

我们常用的 Linux 防火墙工具主要分三类,适配不同发行版与场景,核心区别就在于操作的便捷性:

  • firewalld:动态防火墙。 CentOS 7 及以上版本、 Fedora 等 RedHat 系发行版默认自带。它支持规则实时生效,不用重启服务就能应用新配置,采用“区域(Zone)”管理机制,配置灵活,适用于大多数生产和日常场景。
  • iptables:传统底层防火墙工具,基于 netfilter 模块,几乎所有 Linux 发行版都能用。它能直接操作内核防火墙规则,支持精细的流量控制(如 NAT 转换、复杂过滤规则),但规则默认临时生效,需手动进行持久化配置,语法相对繁琐。
  • ufw:Ubuntu 等 Debian 系发行版默认的简化防火墙工具,本质上是 iptables 的一个前端封装,命令简洁易懂,非常适合初学者快速上手。

1.3 核心概念补充

(1)firewalld 核心概念

  • 区域firewalld 通过区域对网络接口和流量进行分组。不同区域对应不同安全级别,如 drop(强制丢弃所有流量)、block(拒绝并返回响应)、public(公共网络,规则严格)、trusted(信任所有流量)等。未指定时,使用设定的默认区域。
  • 规则类型:分为临时规则(重启防火墙后失效)和永久规则(需重载配置生效,用 --permanent 参数区分)。
  • 富规则:用于实现更精细的控制,比如针对特定源地址、端口并记录日志的复杂规则。

(2)iptables 核心概念

  • :不同的规则集合。最常用的是 filter 表(默认表,用于流量过滤)和 nat 表(用于网络地址转换)。
  • :表里的规则集合,对应数据包处理的不同节点。核心链包括 INPUT(入站)、OUTPUT(出站)、FORWARD(转发)。
  • 目标:规则匹配后执行的动作,如 ACCEPT(放行)、DROP(悄悄丢弃)、REJECT(拒绝并返回错误信息)。

二、Linux防火墙常用命令速查

以下按 firewalldiptablesufw 分类整理核心操作命令。

2.1 firewalld 常用命令(CentOS 7+ 首选)

(1)服务基础管理

  • 查看运行状态:firewall-cmd --state (输出 running 表示在跑,not running 表示没跑)
  • 查看详细状态:systemctl status firewalld
  • 启动服务:systemctl start firewalld
  • 开机自启:systemctl enable firewalld
  • 停止服务:systemctl stop firewalld
  • 禁用自启:systemctl disable firewalld
  • 重启服务(会中断连接):systemctl restart firewalld
  • 重载配置(不中断连接,修改规则后必用):firewall-cmd --reload

(2)区域相关操作

  • 查看所有区域:firewall-cmd --get-zones
  • 查看默认区域:firewall-cmd --get-default-zone
  • 设置默认区域:firewall-cmd --set-default-zone=public
  • 查看激活区域:firewall-cmd --get-active-zones
  • 查看某区域详细配置:firewall-cmd --zone=public --list-all
  • 将网卡绑定到区域:firewall-cmd --zone=public --add-interface=eth0 --permanent

(3)端口与服务管理

  • 查看临时开放的端口:firewall-cmd --list-ports
  • 查看永久开放的端口:firewall-cmd --permanent --list-ports
  • 临时开放 TCP 80 端口:firewall-cmd --zone=public --add-port=80/tcp
  • 永久开放 TCP 80 端口:firewall-cmd --zone=public --add-port=80/tcp --permanent (之后别忘了 reload
  • 永久开放一个端口范围:firewall-cmd --zone=public --add-port=18881-18885/tcp --permanent
  • 永久移除端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
  • 查询端口是否开放:firewall-cmd --zone=public --query-port=80/tcp
  • 开放预定义服务(如 http):firewall-cmd --zone=public --add-service=http --permanent

(4)富规则配置

  • 允许特定 IP 访问 22 端口:firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
  • 拒绝特定网段访问 80 端口:firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject'

(5)其他常用操作

  • 开启 IP 转发:编辑 /etc/sysctl.conf,添加 net.ipv4.ip_forward = 1,然后执行 sysctl -p 使其生效。
  • 启用伪装(用于内网访问公网):firewall-cmd --add-masquerade --permanent
  • 端口转发(将 80 转发至 8080):firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

2.2 iptables 常用命令(传统底层工具)

(1)服务与规则查看

  • 查看 filter 表规则(简洁):iptables -L
  • 查看 filter 表规则(详细,不解析 IP 与端口):iptables -L -n -v
  • 查看 nat 表规则:iptables -t nat -L -n -v
  • 查看规则并显示行号:iptables -L -n --line-numbers
  • 清空 filter 表所有规则:iptables -F
  • 重置计数器:iptables -Z

(2)核心规则配置

  • 设置默认策略(入站丢包,出站放行):iptables -P INPUT DROP && iptables -P OUTPUT ACCEPT
  • 放行本地回环接口:iptables -A INPUT -i lo -j ACCEPT
  • 放行已建立及关联连接:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 放行特定 IP 入站:iptables -A INPUT -s 192.168.1.100 -j ACCEPT
  • 放行特定端口(如 SSH 22):iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 拒绝特定 IP 入站(悄悄丢弃):iptables -A INPUT -s 10.0.0.5 -j DROP

(3)规则删改与持久化

  • 按行号删除(如删 INPUT 链第 3 条):iptables -D INPUT 3
  • 按内容删除:iptables -D INPUT -p tcp --dport 22 -j ACCEPT
  • 保存规则(CentOS 7):iptables-save > /etc/sysconfig/iptables
  • 恢复规则:iptables-restore < /etc/sysconfig/iptables

2.3 ufw 常用命令(Ubuntu 默认)

  • 启用(默认拒绝入站):ufw enable
  • 查看状态:ufw status
  • 放行端口:ufw allow 22ufw allow 80/tcp
  • 拒绝端口:ufw deny 3306
  • 放行特定 IP:ufw allow from 192.168.1.100
  • 删除规则:ufw delete allow 80/tcp
  • 重置所有规则:ufw reset

三、运维避坑指南

  1. 二选一原则firewalldiptables 绝不要同时启用,这会直接导致规则冲突、网络异常。启用一个前,务必停掉另一个。
  2. 临时规则的陷阱:任何临时规则在服务或系统重启后都会消失。在生产环境中,记得在测试无误后立即加上 --permanent 参数并重载。
  3. 别把自己关在门外:操作远程服务器防火墙时,务必先配置一条放行你自己 IP 的规则,再去设置全局拒绝策略。这能避免因误封 SSH 端口而永远失去连接。
  4. 顺序即命运iptables 的规则是顺序匹配的,第一条命中后便不再继续。配置时,必须将更具体的规则放在较宽泛的规则前面。

在云栈社区,我们后续还会深入更多关于 运维与系统脚本 的实战话题,比如如何用脚本自动化检测并备份防火墙策略,欢迎保持关注。




上一篇:AI的正反馈,是如何把重度抑郁的我一步步拉回桌前的
下一篇:硅谷投资人:投了 OpenAI 和 Anthropic,她说信息交换式对话正在消亡
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-19 23:39 , Processed in 0.778880 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表