Ubuntu SELinux网络策略
导读:Ubuntu 上启用 SELinux 并制定网络策略 一 前置说明与模式 Ubuntu 默认不启用 SELinux,默认使用 AppArmor;在 Ubuntu 上启用 SELinux 属于可选操作。SELinux 有三种模式:Disab...
Ubuntu 上启用 SELinux 并制定网络策略
一 前置说明与模式
- Ubuntu 默认不启用 SELinux,默认使用 AppArmor;在 Ubuntu 上启用 SELinux 属于可选操作。SELinux 有三种模式:Disabled(彻底关闭)、Permissive(仅记录不阻断,便于排错)、Enforcing(强制实施策略)。建议先在 Permissive 下验证,再切到 Enforcing。SELinux 与 ufw/iptables 互不冲突:前者是内核级 MAC 策略,后者是网络层防火墙,二者可叠加使用。
二 启用 SELinux 与基础检查
- 安装组件与激活
- 安装工具与策略包:
sudo apt update & & sudo apt install selinux-basics selinux-policy-default auditd audispd-plugins - 激活 SELinux:
sudo selinux-activate
- 安装工具与策略包:
- 配置模式(两种等效方式)
- 运行时切换:
sudo setenforce 0|1(分别对应 Permissive/Enforcing) - 永久配置:编辑 /etc/selinux/config,设置
SELINUX=permissive|enforcing,重启生效
- 运行时切换:
- 基础检查
- 查看状态:
sestatus、getenforce - 查看审计日志:
sudo ausearch -m avc -ts recent或grep avc /var/log/audit/audit.log
- 查看状态:
- 说明
- 初次启用后建议重启一次,确保策略与文件标签正确加载。
三 网络策略常用操作
- 端口类型与标签
- 列出端口与类型:
semanage port -l - 添加自定义端口到类型(示例:将 8080/tcp 加入 http_port_t,使 Web 服务可绑定)
sudo semanage port -a -t http_port_t -p tcp 8080
- 查看自定义项:
semanage port -lC
- 列出端口与类型:
- 服务网络访问布尔值
- 查看布尔值:
getsebool -a | grep httpd_can_network_connect - 持久开启(示例:允许 httpd 主动发起数据库连接)
sudo setsebool -P httpd_can_network_connect_db 1
- 查看布尔值:
- 网络相关常见类型与用途(示例)
- http_port_t:Web 服务端口(如 80/tcp、443/tcp、8080/tcp)
- mysqld_port_t:数据库端口(如 3306/tcp)
- 文件与目录上下文(与网络服务读取内容相关)
- 添加目录上下文:
sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?' - 应用上下文:
sudo restorecon -Rv /var/www/html
- 添加目录上下文:
- 策略模块与定制
- 从拒绝日志生成模块:
sudo ausearch -m avc -ts recent | audit2allow -M mypol - 加载模块:
sudo semodule -i mypol.pp
- 从拒绝日志生成模块:
- 排错要点
- 优先在 Permissive 模式验证,确认无 AVC 拒绝后再切 Enforcing
- 使用
ausearch -m avc与audit2allow快速定位并生成策略补丁。
四 与防火墙的配合
- ufw 负责网络层访问控制,SELinux 负责进程/端口/类型的强制访问控制,二者可同时启用且职责不同。
- 常用 ufw 示例
- 启用:
sudo ufw enable - 放行端口:
sudo ufw allow 22/tcp、sudo ufw allow 80,443/tcp - 按来源放行:
sudo ufw allow from 192.168.1.0/24 - 查看状态:
sudo ufw status verbose
- 启用:
- 实践建议
- 先用 ufw 限制来源/端口,再用 SELinux 精确控制进程对端口与网络资源的访问,形成纵深防御。
五 常见网络场景示例
- Web 服务使用非标准端口
- 放行防火墙:
sudo ufw allow 8080/tcp - 让 SELinux 允许 httpd 绑定 8080:
sudo semanage port -a -t http_port_t -p tcp 8080 - 重启服务并验证
- 放行防火墙:
- 应用服务器连接数据库
- 放行数据库端口(如 3306/tcp)于 ufw
- 允许应用(如 httpd/php-fpm)发起数据库连接:
sudo setsebool -P httpd_can_network_connect_db 1
- 自定义服务端口
- 将服务端口加入对应类型(如将某自定义服务端口加入 http_port_t 或自建类型),必要时用
audit2allow生成模块并加载。
- 将服务端口加入对应类型(如将某自定义服务端口加入 http_port_t 或自建类型),必要时用
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu SELinux网络策略
本文地址: https://pptw.com/jishu/768792.html
