linux中无原生“网络安全组”,其等效机制依赖nftables/iptables连接级白名单、服务进程降权绑定(如user=nginx_user、nonewprivileges=true)、selinux类型强制隔离(如httpd_t与mysqld_t默认互斥)及持续权限审计四层协同实现最小特权访问控制。

Linux 中没有“网络安全组”这一原生概念——那是云平台(如 AWS Security Group、阿里云安全组)的术语。在传统 Linux 主机层面,实现等效的最小特权访问控制,靠的是主机级防火墙 + 服务级绑定 + 进程权限收敛三层协同,而不是配置一个叫“安全组”的东西。
用 nftables/iptables 做连接级白名单
不是简单封 IP 段,而是基于连接状态、源端口范围、协议上下文做精细放行:
- 只允许已建立和关联的连接响应入站:
nft add rule inet filter input ct state established,related accept - SSH 管理端口仅允许可信跳板机,且限制源端口为高位临时端口:
nft add rule inet filter input tcp dport 22 ip saddr 10.10.5.0/24 tcp sport 32768-65535 accept - 明确拒绝 ICMP 重定向、源路由包、广播/多播流量,防止协议层绕过:
nft add rule inet filter input ip protocol icmp icmp type redirect drop - Web 服务(如 Nginx)只开放 80/443,且不接受非标准 HTTP 方法或畸形 Host 头(这部分需由 Nginx 自身配置补充)
让服务进程自己“守门”:绑定与降权
防火墙管网络入口,服务自身必须守住逻辑边界:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- Nginx 启动时指定
User nginx_user;,并在 systemd unit 中设置User=nginx_user和Group=www-data - 强制禁用提权能力:
NoNewPrivileges=true+CapabilityBoundingSet=CAP_NET_BIND_SERVICE,确保它只能绑端口,不能挂载、加载模块或修改内核参数 - 数据库监听地址设为
127.0.0.1:3306,不监听公网;若需远程访问,走 SSH 隧道或专用内网段,而非开放 0.0.0.0 - 禁用所有非必要 Unix socket 或 TCP socket,例如 Redis 默认关闭
unixsocket,除非明确需要本地进程通信
用 SELinux 实现跨服务域隔离
即使网络和服务都收紧,一个被攻陷的 Web 进程仍可能通过共享内存或本地 socket 访问数据库。SELinux 的类型强制是最后一道防线:
- 确保系统启用 enforcing 模式:
getenforce应返回Enforcing - Web 服务运行在
httpd_t域,MySQL 在mysqld_t域,两者默认禁止直接通信 - 如需有限交互(如 PHP 连 MySQL),用
setsebool -P httpd_can_network_connect_db 1显式开启,而非放宽整个域 - 定期检查策略冲突:
ausearch -m avc -ts recent | audit2why定位越权尝试
持续验证权限是否真正最小化
配置不是一劳永逸。必须定期确认策略仍在生效:
- 每周扫描高危文件权限:
find /etc -type f -perm /o+w 2>/dev/null,清理 world-writable 配置文件 - 用 AIDE 校验关键路径(
/etc/、/usr/bin/)是否被篡改 - 用 auditd 监控敏感系统调用:
-a always,exit -F arch=b64 -S execve -F euid!=uid,捕获异常提权行为 - 自动化检查服务运行身份:
ps auxZ | grep httpd确认标签为system_u:system_r:httpd_t:s0,而非unconfined_u










