以下是Ubuntu SELinux网络策略配置的核心技巧,需先安装selinux-basics等基础包并启用强制模式:
一、基础策略配置
-
管理端口访问
- 查看现有端口标签:
semanage port -l - 为服务添加非标准端口:
semanage port -a -t http_port_t -p tcp 8080(如允许HTTP服务使用8080端口) - 删除端口标签:
semanage port -d -t http_port_t -p tcp 8080
- 查看现有端口标签:
-
控制进程网络访问
- 允许服务访问网络:
setsebool -P httpd_can_network_connect 1(针对HTTP服务) - 限制进程仅能访问特定IP/端口:需编写自定义策略模块,通过
audit2allow工具生成规则。
- 允许服务访问网络:
二、高级策略技巧
-
自定义策略模块
- 从日志提取拒绝事件:
ausearch -m avc -ts recent - 生成策略模块:
audit2allow -M mypolicy - 编译并加载策略:
semodule -i mypolicy.pp
- 从日志提取拒绝事件:
-
文件上下文与网络服务隔离
- 为网络服务相关文件设置上下文:
chcon -R -t httpd_sys_content_t /var/www/html
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"(持久化)
- 为网络服务相关文件设置上下文:
-
网络命名空间隔离
- 通过
ip netns创建隔离网络空间,配合SELinux限制进程仅能访问特定命名空间内的网络资源。
- 通过
三、验证与维护
- 检查SELinux状态:
sestatus(确认是否为enforcing模式) - 查看策略生效情况:
getsebool -a | grep httpd(查看布尔值状态) - 监控日志:
tail -f /var/log/audit/audit.log,分析拒绝事件并优化策略
注意:SELinux配置复杂,建议在测试环境验证后再应用于生产环境,优先使用Ubuntu默认的AppArmor(更轻量且与系统兼容性更好)。
参考来源: