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

一、管理服务器防火墙(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 通过端口标记限制服务可使用的端口,是第二道强制访问控制防线。

相关推荐
今天也要学习吖3 小时前
谷歌nano banana官方Prompt模板发布,解锁六大图像生成风格
人工智能·学习·ai·prompt·nano banana·谷歌ai
雁于飞3 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
Light603 小时前
领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
linux·pdf·可观测性·异步队列·plt转pdf·权限治理·进度查询
rannn_1113 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
羚羊角uou3 小时前
【Linux】命名管道
linux·运维·服务器
IT 小阿姨(数据库)4 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
THMAIL4 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融
让子弹飞024 小时前
36.2Linux单总线驱动DS18B20实验(详细讲解代码)_csdn
linux·ubuntu·驱动的分离和分层
grrrr_14 小时前
【工具类】Nuclei YAML POC 编写以及批量检测
网络·安全·web安全