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=ipv4source address=192.168.100.0/24service name=httplog prefix="HTTP_ACCESS" level=notice limit value=10/maccept' --zone=public --permanent# 重载配置使规则生效firewall-cmd --reload
示例 2:临时拒绝特定网段的 SSH 连接并审计
# 未来 10 分钟(600 秒)内拒绝 192.168.100.0/24 网段的 SSH 连接,
每分钟最多审计 2 条记录firewall-cmd --add-rich-rule='rule family=ipv4source address=192.168.100.0/24service name=sshaudit limit value=2/mreject' --timeout=600 # 临时规则,600 秒后自动失效# 无需 --permanent,--timeout 规则默认是运行时配置
示例 3:端口转发(将本地端口转发到其他主机)
# 开启 IP 转发(防火墙伪装依赖此配置)echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl -p # 生效配置# 将本地 80 端口的流量转发到 192.168.100.20 的 8080 端口firewall-cmd --add-rich-rule='rule family=ipv4forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.100.20' --permanentfirewall-cmd --reload
示例 4:启用网络伪装(NAT 转发)
# 允许 public 区域的 192.168.100.0/24 网段通过本机伪装访问外部网络(如共享上网)firewall-cmd --add-rich-rule='rule family=ipv4source address=192.168.100.0/24masquerade # 启用伪装(NAT)' --zone=public --permanent# 或简化命令(对整个区域启用伪装)firewall-cmd --add-masquerade --zone=public --permanentfirewall-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.confsysctl -p
(2)图形化配置工具
CentOS 7 可通过 firewall-config 图形工具配置防火墙:
- 启动:firewall-config(需图形界面环境)。
- 功能:可视化配置区域、服务、富规则等,支持切换 “运行时” 和 “永久” 模式。
三、总结
- systemd 服务管理:通过 systemctl 命令实现服务的启动、停止、开机自启等操作,核心是理解服务状态和生命周期。
- Firewall 防火墙:基于 zone 和富规则实现灵活的网络控制,firewall-cmd 命令支持动态配置,富规则适用于精细化访问控制场景(如特定 IP 允许 / 拒绝、日志审计、端口转发等)。
- 关键原则:防火墙配置需遵循 “最小权限” 原则,仅开放必要的服务和端口;规则变更后需 --reload 生效,永久规则需加 --permanent 参数。
掌握这两项工具是 Linux 系统运维和安全加固的基础技能。