Ubuntu 上启用 SELinux 并进行网络访问控制
一 背景与注意事项
二 启用与基础配置
sudo apt update && sudo apt install -y policycoreutils selinux-utils selinux-basics auditdsudo selinux-activatesudo rebootgetenforce(返回 Enforcing/Permissive/Disabled)sudo setenforce 0|1(仅在当前会话生效)SELINUX=enforcing|permissive|disabled,然后重启三 网络访问控制常用手段
sudo semanage port -l | grep <服务名>sudo semanage port -a -t http_port_t -p tcp 8080sudo semanage port -m -t ssh_port_t -p tcp 9999sudo semanage port -d -t http_port_t -p tcp 8080getsebool -a | grep <服务名>sudo setsebool -P httpd_can_network_connect 1sudo setsebool -P sshd_can_network_connect 1sudo setsebool -P mysqld_can_network_connect 1sudo ausearch -m avc -ts recentsudo audit2why < /var/log/audit/audit.logsudo ausearch -m avc -ts recent | audit2allow -M my-net-policysudo semodule -i my-net-policy.ppgetenforce(应为 Enforcing 才表示策略生效)sudo setenforce 0;定位后再回到 Enforcing。四 常见场景示例
Port 9999sudo semanage port -m -t ssh_port_t -p tcp 9999sudo systemctl restart sshsudo setsebool -P httpd_can_network_connect 1sudo semanage fcontext -a -t httpd_sys_content_t "/websrv(/.*)?"sudo restorecon -R /websrvsudo semanage port -a -t http_port_t -p tcp 8080五 故障排查与最佳实践
getenforcesudo ausearch -m avc -ts recentsudo audit2why < /var/log/audit/audit.logaudit2allow 生成最小必要规则