当前位置: 首页 > news >正文

Linux - firewall 防火墙

🔥 什么是 firewalld?

  firewalld 是一个动态管理防火墙的守护进程(daemon),它提供了一个 D-Bus 接口来管理系统或用户的防火墙规则。与传统的静态 iptables 不同,firewalld 支持:

  • 区域(Zones)
  • 服务(Services)
  • 端口/协议控制
  • NAT、IP伪装、端口转发等高级功能

        适用于 RHEL/CentOS/Fedora/SUSE/openSUSE 等主流 Linux 发行版。


🧱 firewalld 的核心概念

1. 区域(Zone)

  firewalld 将网络连接划分为不同的“区域”,每个区域有不同的信任级别和默认策略。

Zone Name

Description

drop

最低信任度,丢弃所有未明确允许的包

block

拒绝所有入站连接(带 ICMP 拒绝响应)

public

公共网络,默认配置,用于外部环境

external

外部网络,启用了 NAT

dmz

隔离区,只允许特定服务访问

work

工作网络,信任部分内部设备

home

家庭网络,信任较多内部设备

internal

内部网络,高度信任

trusted

最高信任,允许所有流量

        可以通过命令查看当前默认区域:

sudo firewall-cmd --get-default-zone

2. 服务(Service)

        预定义的服务是一组端口和协议的组合,例如:

  • ssh
  • http
  • https
  • ftp
  • samba
  • 自定义服务(可添加)

        查看所有支持的服务:

sudo firewall-cmd --get-services

3. 端口(Port)

        可以按协议(TCP/UDP)开放指定端口,例如:

sudo firewall-cmd --add-port=8080/tcp

4. 运行时 vs 永久设置

  • 运行时设置:重启后失效。
  • 永久设置:加上 --permanent 参数保存,重启后依然生效。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

🛠️ 常用命令详解

一,基本命令

  firewalld 是一个动态管理 Linux 系统防火墙的工具,它使用 firewall-cmd 命令进行配置。以下是一些常用的 firewall-cmd 命令及其说明:

1. 启动 firewalld 服务

sudo systemctl start firewalld

2. 停止 firewalld 服务

sudo systemctl stop firewalld

3. 重启 firewalld 服务

sudo systemctl restart firewalld

4. 启用 firewalld 服务开机自启动

sudo systemctl enable firewalld

5. 禁用 firewalld 服务开机自启动

sudo systemctl disable firewalld

6. 查看 firewalld 服务状态

sudo systemctl status firewalld

二,基本防火墙操作

1. 查看防火墙状态

sudo firewall-cmd --state

2. 查看当前区域信息

sudo firewall-cmd --get-active-zones

3. 查看接口所属区域

sudo firewall-cmd --get-zone-of-interface=interface_name

示例:查看 eth0 接口所属区域

sudo firewall-cmd --get-zone-of-interface=eth0

4. 列出所有区域

sudo firewall-cmd --list-all-zones

三,配置防火墙规则

1. 添加服务到区域(立即生效,不持久化)

sudo firewall-cmd --zone=zone_name --add-service=service_name

示例:在 public 区域添加 HTTP 服务

sudo firewall-cmd --zone=public --add-service=http

2. 添加服务到区域(持久化)

sudo firewall-cmd --zone=zone_name --add-service=service_name --permanent

示例:在 public 区域持久化添加 HTTP 服务

sudo firewall-cmd --zone=public --add-service=http --permanent

3. 移除服务(立即生效,不持久化)

sudo firewall-cmd --zone=zone_name --remove-service=service_name

示例:在 public 区域移除 HTTP 服务

sudo firewall-cmd --zone=public --remove-service=http

4. 移除服务(持久化)

sudo firewall-cmd --zone=zone_name --remove-service=service_name --permanent

示例:在 public 区域持久化移除 HTTP 服务

sudo firewall-cmd --zone=public --remove-service=http --permanent

四,端口管理

1. 添加端口(立即生效,不持久化)

sudo firewall-cmd --zone=zone_name --add-port=port/protocol

示例:在 public 区域添加 TCP 端口 8080

sudo firewall-cmd --zone=public --add-port=8080/tcp

2. 添加端口(持久化)

sudo firewall-cmd --zone=zone_name --add-port=port/protocol --permanent

示例:在 public 区域持久化添加 TCP 端口 8080

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

3. 移除端口(立即生效,不持久化)

sudo firewall-cmd --zone=zone_name --remove-port=port/protocol

示例:在 public 区域移除 TCP 端口 8080

sudo firewall-cmd --zone=public --remove-port=8080/tcp

4. 移除端口(持久化)

sudo firewall-cmd --zone=zone_name --remove-port=port/protocol --permanent

示例:在 public 区域持久化移除 TCP 端口 8080

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent

五,其他常用命令

1. 重新加载防火墙配置

sudo firewall-cmd --reload

2. 列出当前区域所有规则

sudo firewall-cmd --zone=zone_name --list-all

示例:列出 public 区域的所有规则

sudo firewall-cmd --zone=public --list-all

3. 查看所有可用服务

sudo firewall-cmd --get-services

4. 添加 IP 地址到信任区域

sudo firewall-cmd --zone=trusted --add-source=ip_address

示例:信任 192.168.1.100 IP 地址

sudo firewall-cmd --zone=trusted --add-source=192.168.1.100

5. 移除 IP 地址从信任区域

sudo firewall-cmd --zone=trusted --remove-source=ip_address

示例:移除 192.168.1.100 IP 地址

sudo firewall-cmd --zone=trusted --remove-source=192.168.1.100

这些命令可以帮助您管理和配置 firewalld 防火墙,确保系统的网络安全。

六 查看状态和基本信息

# 查看是否运行
sudo firewall-cmd --state# 查看当前默认区域
sudo firewall-cmd --get-default-zone# 查看当前活动的区域及其接口
sudo firewall-cmd --get-active-zones# 查看当前区域的所有规则
sudo firewall-cmd --list-all

✅ 添加规则(服务 / 端口 / 协议)

开放服务
# 添加 SSH 服务(临时)
sudo firewall-cmd --add-service=ssh# 永久添加 HTTP 服务
sudo firewall-cmd --permanent --add-service=http# 重新加载配置
sudo firewall-cmd --reload
开放端口
# 开放单个端口
sudo firewall-cmd --permanent --add-port=8080/tcp# 开放端口范围
sudo firewall-cmd --permanent --add-port=5000-6000/udp# 删除端口
sudo firewall-cmd --permanent --remove-port=8080/tcp

🔄 修改默认区域

# 设置默认区域为 public
sudo firewall-cmd --set-default-zone=public

🌐 IP 地址过滤(黑白名单)

白名单(允许某个 IP)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
黑名单(拒绝某个 IP)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.200" reject'

📦 NAT 和端口转发

启用 masquerade(IP伪装):

sudo firewall-cmd --permanent --add-masquerade

将 80 端口转发到 8080:

sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080

将 80 端口转发到另一台主机:

sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100

📄 富规则(Rich Rules)

富规则提供了更细粒度的控制方式,例如:

# 允许来自 192.168.1.0/24 的 SSH 访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'# 拒绝特定 MAC 地址访问
sudo firewall-cmd --permanent --add-rich-rule='rule source mac="aa:bb:cc:dd:ee:ff" drop'

📋 日志记录

开启日志记录:

sudo firewall-cmd --permanent --add-log-denied=all

选项包括:

  • all:所有被拒绝的数据包
  • unicast:单播数据包
  • broadcast:广播数据包
  • multicast:多播数据包

📂 配置文件路径

  • 服务定义文件:/usr/lib/firewalld/services/
  • 区域定义文件:/usr/lib/firewalld/zones/
  • 用户自定义配置:/etc/firewalld/

🧪 示例:配置 Web 服务器防火墙

# 启用 firewalld
sudo systemctl enable firewalld --now# 设置默认区域为 public
sudo firewall-cmd --set-default-zone=public# 永久开放 HTTP 和 HTTPS 服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https# 开放 8080 端口用于测试应用
sudo firewall-cmd --permanent --add-port=8080/tcp# 添加 IP 白名单
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'# 限制 SSH 到特定 IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'# 拒绝其他所有 SSH 请求
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" reject'# 重载配置
sudo firewall-cmd --reload

📚 总结:firewalld 优势

优点

描述

动态更新

不需要重启服务即可修改规则

区域划分

更灵活地适应不同网络环境

易于维护

提供了服务抽象,简化配置

支持 Rich Rules

细粒度控制访问权限

图形界面支持

GNOME/KDE 下有图形化工具

http://www.lryc.cn/news/584258.html

相关文章:

  • Spring MVC 1
  • C语言<数据结构-链表>
  • 基于Catboost算法的茶叶数据分析及价格预测系统的设计与实现
  • CH9121T电路及配置详解
  • 《Stata面板数据分析:数据检验、回归模型与诊断技术 - 以NLSW工资研究(公开数据)为例》
  • 时间显示 蓝桥云课Java
  • 数据分析中的拉链表解析
  • 整数反转(C++)
  • JDK的Closure闭包详解
  • x86汇编语言入门基础(三)汇编指令篇3 位移运算
  • expect 安装入门手册
  • window显示驱动开发—XR_BIAS 和 BltDXGI
  • 图书管理系统(完结版)
  • windows11桌面部分区域无法点击
  • Netron的基本使用介绍
  • Django+DRF 实战:自定义异常处理流程
  • QT数据交互全解析:JSON处理与HTTP通信
  • 原生微信小程序研发,如何对图片进行统一管理?
  • 记录今天学习Comfyui的感受
  • JDK 1.7 vs JDK 1.8
  • QT5使用cmakelists引入Qt5Xlsx库并使用
  • 公网 IP 不稳定?用多点 Ping 策略监控真实可达率
  • MyBatis集成Logback日志全攻略
  • Java---IDEA
  • 开源 Canvas 和 WebGL 图形库推荐与对比
  • Yolov模型参数对比
  • 基于大模型的膀胱癌全周期精准诊疗方案研究
  • python自动化面试问题——关于python
  • Using Spring for Apache Pulsar:Transactions
  • Alibaba Druid主要配置