Linux systemd 服务管理与 Firewall 防火墙配置

Linux systemd 服务管理与 Firewall 防火墙配置

一、systemd 服务管理

systemd 是 Linux 系统的初始化系统和服务管理器,负责系统启动、服务管理、进程监控等核心功能。通过 systemctl 命令可对系统服务进行全面管理。

1. systemd 核心概念

  • 服务(Service):系统中运行的后台程序(如 httpd、firewalld),以 .service 配置文件定义运行规则。
  • 目标(Target):类似传统运行级别的概念,定义系统的运行状态(如 multi-user.target 对应多用户命令行模式,graphical.target 对应图形界面模式)。
  • systemctl 命令:管理服务的核心工具,支持启动、停止、查看状态等操作。

2. systemctl 常用命令

|---------------------------|--------------------------------|-----------------------------|
| 命令格式 | 功能说明 | 示例 |
| systemctl status <服务名> | 查看服务当前状态(运行 / 停止、日志等) | systemctl status firewalld |
| systemctl start <服务名> | 启动服务(立即生效,临时) | systemctl start httpd |
| systemctl stop <服务名> | 停止服务(立即生效,临时) | systemctl stop httpd |
| systemctl restart <服务名> | 重启服务(适用于配置变更后) | systemctl restart sshd |
| systemctl reload <服务名> | 重新加载配置(不中断服务,优先于 restart) | systemctl reload nginx |
| systemctl enable <服务名> | 开机自动启动服务(永久生效) | systemctl enable firewalld |
| systemctl disable <服务名> | 禁止开机启动服务(永久生效) | systemctl disable firewalld |
| systemctl mask <服务名> | 屏蔽服务(禁止手动 / 自动启动,比 disable 严格) | systemctl mask postfix |
| systemctl unmask <服务名> | 解除屏蔽服务 | systemctl unmask postfix |

3. 服务状态说明

systemctl status <服务名> 输出中的关键状态:

  • active (running):服务正在运行。
  • inactive (dead):服务已停止。
  • failed:服务启动失败(需查看日志排查原因)。
  • enabled:开机自动启动;disabled:开机不启动。

二、Firewall 防火墙管理

Firewall(firewalld)是 CentOS 7+ 默认的动态防火墙工具,基于内核 netfilter 模块实现网络访问控制,支持 zone(区域)和富规则(rich rule)等灵活配置。

1. 防火墙核心概念

  • netfilter 模块:内核中的网络过滤框架,负责数据包的过滤、转发、NAT 等操作,是防火墙的底层依赖。
  • Zone(区域):预定义的安全区域,通过分类网络接口和规则简化防火墙配置。每个区域对应不同的信任级别,默认区域为 public。
  • Service(服务):预定义的端口集合(如 http 对应 80 端口,ssh 对应 22 端口),简化端口规则配置。
  • 富规则(Rich Rule):精细化的访问控制规则,支持基于 IP、端口、协议、日志等多维度的条件匹配。

2. 常用 Zone 及特性

Firewall 定义了多个预设区域,核心区域特性如下

|----------|------|----------------------------------|
| 区域名称 | 信任级别 | 功能说明 |
| public | 中等 | 默认区域,允许常用服务(如 ssh),拒绝其他非明确允许的流量。 |
| trusted | 最高 | 允许所有入站 / 出站流量,无限制(信任所有网络)。 |
| block | 最低 | 拒绝所有入站流量,并返回 "拒绝" 响应(礼貌拒绝)。 |
| drop | 最低 | 强制拒绝所有入站流量,不返回任何响应(静默丢弃)。 |
| internal | 较高 | 适用于内部网络,允许更多服务和端口。 |

3. firewall-cmd 命令行工具

firewall-cmd 是管理 firewalld 的命令行工具,支持动态配置(无需重启服务即可生效)。

(1)基础配置命令

|------------------------------------------|----------------------------|----------------------------------------------------|
| 命令格式 | 功能说明 | 示例 |
| firewall-cmd --get-default-zone | 查看当前默认区域 | firewall-cmd --get-default-zone |
| firewall-cmd --set-default-zone=<zone> | 设置默认区域(永久生效需加 --permanent) | firewall-cmd --set-default-zone=public --permanent |
| firewall-cmd --list-all | 查看默认区域的所有规则(服务、端口、富规则等) | firewall-cmd --list-all |
| firewall-cmd --list-all --zone=<zone> | 查看指定区域的规则 | firewall-cmd --list-all --zone=trusted |
| firewall-cmd --reload | 重载配置(使永久规则生效) | firewall-cmd --reload |

(2)服务与端口管理

|-------------------------------------------------------|-----------------------|-------------------------------------------------|
| 命令格式 | 功能说明 | 示例 |
| firewall-cmd --add-service=<服务名> [--permanent] | 允许指定服务的流量(如 http、ssh) | firewall-cmd --add-service=http --permanent |
| firewall-cmd --remove-service=<服务名> [--permanent] | 移除允许的服务流量 | firewall-cmd --remove-service=ftp --permanent |
| firewall-cmd --add-port=<端口/协议> [--permanent] | 允许指定端口的流量(如 8080/tcp) | firewall-cmd --add-port=8080/tcp --permanent |
| firewall-cmd --remove-port=<端口/协议> [--permanent] | 移除允许的端口流量 | firewall-cmd --remove-port=3306/tcp --permanent |

4. 富规则(Rich Rule)详解

富规则是 Firewall 中最灵活的访问控制方式,支持基于源 IP、服务、端口、日志、动作(允许 / 拒绝)等多条件组合的规则定义,适用于复杂场景。

(1)富规则基本语法
复制代码
firewall-cmd [--zone=<区域>] --add-rich-rule='

rule [family=<ipv4|ipv6>]

[source address=<IP/网段>]

[service name=<服务名> | port port=<端口> protocol=<tcp|udp>]

[log prefix=<日志前缀> level=<日志级别> limit value=<速率/时间>]

[audit limit value=<速率/时间>]

<action> # accept(允许)、reject(拒绝并响应)、drop(静默拒绝)

' [--permanent]
  • 核心参数说明
    • family:指定 IP 协议版本(默认 ipv4)。
    • source address:限制源 IP 或网段(如 192.168.100.0/24)。
    • service/port:指定目标服务或端口(二选一)。
    • log:对匹配的流量记录日志(输出到 /var/log/messages)。
      • level:日志级别(emerg 最高,debug 最低,常用 notice info)。
      • limit:日志速率限制(如 10/m 表示每分钟最多 10 条)。
    • audit:记录到审计子系统(类似 log,但更详细)。
    • action:对匹配流量的处理动作(accept/reject/drop)。
(2)富规则示例场景
示例 1:允许特定网段访问 HTTP 服务并记录日志
复制代码
# 允许 192.168.100.0/24 网段访问 HTTP 服务,以 notice 级别记录日志(每分钟最多 10 条)

firewall-cmd --add-rich-rule='

rule family=ipv4

source address=192.168.100.0/24

service name=http

log prefix="HTTP_ACCESS" level=notice limit value=10/m

accept

' --zone=public --permanent

# 重载配置使规则生效

firewall-cmd --reload
示例 2:临时拒绝特定网段的 SSH 连接并审计
复制代码
# 未来 10 分钟(600 秒)内拒绝 192.168.100.0/24 网段的 SSH 连接,
每分钟最多审计 2 条记录

firewall-cmd --add-rich-rule='

rule family=ipv4

source address=192.168.100.0/24

service name=ssh

audit limit value=2/m

reject

' --timeout=600 # 临时规则,600 秒后自动失效

# 无需 --permanent,--timeout 规则默认是运行时配置
示例 3:端口转发(将本地端口转发到其他主机)
复制代码
# 开启 IP 转发(防火墙伪装依赖此配置)

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p # 生效配置

# 将本地 80 端口的流量转发到 192.168.100.20 的 8080 端口

firewall-cmd --add-rich-rule='

rule family=ipv4

forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.100.20

' --permanent

firewall-cmd --reload
示例 4:启用网络伪装(NAT 转发)
复制代码
# 允许 public 区域的 192.168.100.0/24 网段通过本机伪装访问外部网络(如共享上网)

firewall-cmd --add-rich-rule='

rule family=ipv4

source address=192.168.100.0/24

masquerade # 启用伪装(NAT)

' --zone=public --permanent

# 或简化命令(对整个区域启用伪装)

firewall-cmd --add-masquerade --zone=public --permanent

firewall-cmd --reload
(3)富规则优先级
  • 规则匹配顺序:拒绝规则(reject/drop)优先于允许规则(accept)。若同时存在针对同一流量的拒绝和允许规则,拒绝规则生效。
  • 精确规则优先于模糊规则:针对特定 IP 的规则优先于针对网段的规则。

5. 其他实用配置

(1)禁止 ICMP ping 请求(禁 ping)
复制代码
# 临时禁 ping(立即生效)

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# 永久禁 ping(重启生效)

echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf

sysctl -p
(2)图形化配置工具

CentOS 7 可通过 firewall-config 图形工具配置防火墙:

  • 启动:firewall-config(需图形界面环境)。
  • 功能:可视化配置区域、服务、富规则等,支持切换 "运行时" 和 "永久" 模式。

三、总结

  • systemd 服务管理:通过 systemctl 命令实现服务的启动、停止、开机自启等操作,核心是理解服务状态和生命周期。
  • Firewall 防火墙:基于 zone 和富规则实现灵活的网络控制,firewall-cmd 命令支持动态配置,富规则适用于精细化访问控制场景(如特定 IP 允许 / 拒绝、日志审计、端口转发等)。
  • 关键原则:防火墙配置需遵循 "最小权限" 原则,仅开放必要的服务和端口;规则变更后需 --reload 生效,永久规则需加 --permanent 参数。

掌握这两项工具是 Linux 系统运维和安全加固的基础技能。

相关推荐
代码改变世界ctw18 分钟前
TrustZone技术详解————这篇是AI写的包括图
linux
lang2015092822 分钟前
Apache Ignite的流处理(Streaming)示例程序
开发语言·apache·ignite
Johny_Zhao24 分钟前
SeaTunnel的搭建部署以及测试
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·devops·seatunnel·系统运维
nVisual38 分钟前
运维新纪元:告别Excel手工规划,实现“零误差”决策
运维·网络·设计模式·自动化
Dnui_King1 小时前
Oracle 在线重定义
java·服务器·前端
Another Iso1 小时前
Linux之Shell脚本基本语法
linux·运维·服务器
焱童鞋1 小时前
win服务器系统10060问题解决
运维·服务器
Codeking__1 小时前
应用层自定义协议与序列化
服务器·网络
维尔切1 小时前
Linux中systemd与systemctl管理指南
linux·服务器·网络
Borny鼎鼎1 小时前
局域网内某服务器访问其他服务器虚拟机内相关服务配置
运维