当前位置: 首页 > 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.dtcms.com/a/272422.html

相关文章:

  • 强缓存和协商缓存详解
  • 机器学习核心算法:PCA与K-Means解析
  • Java从入门到精通!第三天(数组)
  • Shell 中的重定向
  • C++实习面试题
  • 如何看待java开发和AI的关系?
  • GO启动一个视频下载接口 前端可以边下边放
  • 【PyTorch】PyTorch中的数据预处理操作
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)
  • 图解LeetCode:79递归实现单词搜索
  • Django+DRF 实战:自定义异常处理流程
  • 20.4 量子安全加密算法
  • 案例分享--福建洋柄水库大桥智慧桥梁安全监测(二)之数字孪生和系统平台
  • 机器学习13——支持向量机下
  • TCP传输控制层协议深入理解
  • 当CCLinkIE撞上Modbus TCP:照明控制系统的“方言战争”终结术
  • VIP可读
  • 线性回归与正则化
  • Django专家成长路线知识点——AI教你学Django
  • 【PTA数据结构 | C语言版】顺序栈的3个操作
  • 【深度学习系列--经典论文解读】Gradient-Based Learning Applied to Document Recognition
  • LINUX710 MYSQL
  • linux-用户与用户组管理
  • serialVersionUID
  • 配置 msvsmon.exe 以无身份验证启动
  • 力扣打卡第23天 二叉搜索树中的众数
  • 算法题(171):组合型枚举
  • Shusen Wang推荐系统学习 --召回 矩阵补充 双塔模型
  • 深度探索:实时交互与增强现实翻译技术(第六篇)
  • Win10用camke+gcc编译opencv库报错error: ‘_hypot‘ has not been declared in ‘std‘