Linux学习——管理网络安全(二十一)

发布于:2025-09-11 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、管理服务器防火墙(firewalld)

RHEL 默认使用 firewalld 作为防火墙管理工具,它通过 “区域(zone)” 和 “服务(service)” 的概念简化规则配置,支持动态更新规则而无需重启服务。

1.1 防火墙基础操作

首先需要了解 firewalld 的基本状态和常用命令:

查看防火墙运行状态:

sudo systemctl status firewalld

若防火墙未启动,执行以下命令启动并设置开机自启:

sudo systemctl start firewalld
sudo systemctl enable firewalld

查看当前默认区域(默认区域是规则的主要应用对象):

sudo firewall-cmd --get-default-zone

查看当前区域的所有规则(包括开放的端口和服务):

sudo firewall-cmd --list-all

1.2 配置防火墙规则(核心操作)

开放指定服务

firewalld 预定义了常见服务(如 ssh、http、ftp)的端口配置,直接开放服务比手动指定端口更便捷。

例如,允许 HTTP 服务通过默认区域:

# 临时开放(重启防火墙后失效)
sudo firewall-cmd --add-service=http

# 永久开放(需重新加载规则生效)
sudo firewall-cmd --add-service=http --permanent

# 重新加载规则,使永久配置生效
sudo firewall-cmd --reload

验证服务是否已开放:

sudo firewall-cmd --list-services
开放指定端口

对于非预定义服务,需直接开放端口(需指定协议,如 tcp 或 udp)。

例如,开放 TCP 8080 端口(临时 + 永久):

# 临时开放
sudo firewall-cmd --add-port=8080/tcp

# 永久开放
sudo firewall-cmd --add-port=8080/tcp --permanent

# 重新加载规则
sudo firewall-cmd --reload

验证端口是否已开放:

sudo firewall-cmd --list-ports
限制特定 IP 访问

为提升安全性,可限制只有指定 IP 或网段能访问服务。

例如,仅允许 192.168.1.0/24 网段访问 SSH 服务:

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent

# 重新加载规则
sudo firewall-cmd --reload
删除规则

若需移除已配置的规则,将--add替换为--remove即可:

# 永久删除HTTP服务开放规则
sudo firewall-cmd --remove-service=http --permanent

# 永久删除8080/tcp端口开放规则
sudo firewall-cmd --remove-port=8080/tcp --permanent

# 重新加载规则
sudo firewall-cmd --reload

1.3 工作区域管理

firewalld 的 “区域” 本质是预设的规则集合,不同区域对应不同的安全级别(如 public、internal、dmz 等)。可根据服务器网络环境切换区域:

查看所有可用区域:

sudo firewall-cmd --get-zones

切换默认区域为 internal(适合内部网络,开放更多服务):

sudo firewall-cmd --set-default-zone=internal --permanent
sudo firewall-cmd --reload

为特定网卡指定区域(如为 ens33 网卡应用 dmz 区域):

sudo firewall-cmd --zone=dmz --add-interface=ens33 --permanent
sudo firewall-cmd --reload

二、控制 SELinux 端口标记

SELinux(安全增强型 Linux)通过强制访问控制(MAC)机制限制进程权限,其中 “端口标记” 是控制网络服务端口访问的核心手段 —— 只有为端口分配正确的 SELinux 类型(如 http_port_t、ssh_port_t),对应服务才能正常监听该端口。

2.1 SELinux 基础状态

首先查看 SELinux 当前模式(enforcing、permissive 或 disabled):

getenforce

或查看详细配置:

sestatus

注意:RH134 课程推荐使用 enforcing 模式(强制生效),如需临时切换为宽容模式(仅日志记录不阻止操作),执行sudo setenforce 0,切换回强制模式执行sudo setenforce 1

2.2 查看端口 SELinux 标记

每个网络服务都有默认的 SELinux 端口类型,例如:

  • SSH 服务默认使用 ssh_port_t(对应端口 22)
  • HTTP 服务默认使用 http_port_t(对应端口 80、443)

查看某服务的默认端口标记:

# 查看HTTP服务的SELinux端口类型及关联端口
semanage port -l | grep http_port_t

输出示例:

http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

2.3 为非默认端口添加 SELinux 标记

当服务使用非默认端口时(如 HTTP 服务使用 8080 端口),需手动为该端口添加对应的 SELinux 标记,否则 SELinux 会阻止服务监听端口。

步骤如下:

1,查看服务所需的 SELinux 端口类型(如 HTTP 服务需要 http_port_t):

semanage port -l | grep http

2,为 8080 端口添加 http_port_t 标记(永久生效):

sudo semanage port -a -t http_port_t -p tcp 8080

3,验证端口标记是否添加成功:

semanage port -l | grep http_port_t

若输出包含 8080,则表示配置成功:

http_port_t                    tcp      8080, 80, 81, 443, 488, 8008, 8009, 8443, 9000

2.4 删除错误的端口标记

若需移除已添加的端口标记,将-a(添加)替换为-d(删除):

sudo semanage port -d -t http_port_t -p tcp 8080

2.5 解决 SELinux 相关的端口访问问题

当服务启动失败或无法访问端口时,若防火墙规则已正确配置,很可能是 SELinux 端口标记问题。可通过以下步骤排查:

1,查看 SELinux 审计日志(记录被阻止的操作):

sudo grep "SELinux is preventing" /var/log/audit/audit.log

2,若日志中提示 “bind to port” 相关的拒绝信息,确认端口是否已添加正确标记:

semanage port -l | grep <端口号>

3,若未添加,按 2.3 的步骤为端口添加正确标记即可。

三、总结

1,防火墙(firewalld)通过区域和规则控制网络流量进出,是第一道防线;

2,SELinux 通过端口标记限制服务可使用的端口,是第二道强制访问控制防线。


网站公告

今日签到

点亮在社区的每一天
去签到