如何查看AppArmor配置文件中已有的网络端口访问规则?
美国、香港服务器
如何查看AppArmor配置文件中已有的网络端口访问规则?
12-30 来源:
要查看 AppArmor 配置文件中已有的网络端口访问规则,核心是提取配置文件内的 network 关键字相关语句 —— 因为 AppArmor 所有网络(包括端口、协议、IP)的权限规则,都通过 network 指令声明。以下是适配 Ubuntu 24.04 的 3 种实操方法,覆盖单文件查询、全局规则排查和生效规则验证场景。
一、方法 1:直接查询单个配置文件(最精准)
此方法适用于已知目标程序配置文件路径的场景,直接过滤配置文件中的 network 规则。
步骤 1:定位目标程序的配置文件
AppArmor 配置文件默认存放在 /etc/apparmor.d/,命名规则为程序绝对路径替换 / 为 .,例如:
程序 /usr/local/bin/myapp → 配置文件 usr.local.bin.myapp
Nginx 程序 /usr/sbin/nginx → 配置文件 usr.sbin.nginx
步骤 2:提取 network 端口规则
使用 grep 命令过滤配置文件中包含 network 的行,排除注释行(# 开头):
bash
运行
# 通用命令格式
sudo grep -n "network" /etc/apparmor.d/[配置文件名] | grep -v "^#"
示例与规则解读
假设 myapp 的配置文件包含以下网络规则,执行命令后输出:
bash
运行
sudo grep -n "network" /etc/apparmor.d/usr.local.bin.myapp | grep -v "^#"
输出结果:
plaintext
7: network tcp port=3306,
8: network tcp addr=127.0.0.1 port=8080,
9: network udp port=10000-10010,
10: deny network all,
规则解读:
第 7 行:允许程序通过 TCP 协议访问 3306 端口(如 MySQL 服务);
第 8 行:允许程序仅在本地 127.0.0.1 上,通过 TCP 监听或访问 8080 端口;
第 9 行:允许程序通过 UDP 协议访问 10000-10010 端口范围;
第 10 行:兜底规则,拒绝所有未显式允许的网络访问。
二、方法 2:全局搜索所有配置文件的端口规则
此方法适用于不确定目标程序配置文件位置,或需要排查所有已配置程序的网络端口规则的场景。
bash
运行
# 全局搜索 /etc/apparmor.d/ 下所有配置文件的 network 规则
sudo grep -rn "network" /etc/apparmor.d/ --include="*" | grep -v "^#"
参数说明:
-r:递归搜索子目录;
-n:显示匹配行的行号;
--include="*":匹配所有配置文件;
grep -v "^#":排除注释行。
示例输出
plaintext
/etc/apparmor.d/usr.sbin.nginx:15: network tcp,
/etc/apparmor.d/usr.local.bin.myapp:7: network tcp port=3306,
/etc/apparmor.d/usr.bin.mysql:22: network tcp addr=127.0.0.1 port=3306,
从输出可直接看到:
Nginx 允许所有 TCP 网络访问(未限制端口);
MySQL 仅允许本地 127.0.0.1 的 TCP 3306 端口访问。
三、方法 3:验证已加载的生效端口规则
直接查询配置文件得到的是声明的规则,若需确认规则是否已加载到内核并生效,可结合 aa-status 和日志验证。
步骤 1:确认配置文件是否已加载
bash
运行
sudo aa-status
输出示例中,若包含目标程序的配置文件(如 /usr/local/bin/myapp (enforce)),说明规则已加载。
步骤 2:检查生效规则的完整网络配置
使用 apparmor_parser 解析配置文件,输出格式化后的规则,筛选网络相关内容:
bash
运行
# -S:简化输出格式;-r:仅解析不重新加载
sudo apparmor_parser -S -r /etc/apparmor.d/usr.local.bin.myapp | grep "network"
步骤 3:通过日志反向验证端口规则
若程序访问了未授权的端口,会在 /var/log/syslog 中生成 DENIED 日志,反向推导已允许的端口:
bash
运行
# 查看目标程序的网络访问拦截日志
sudo grep -i "apparmor.*network\|apparmor.*port" /var/log/syslog | grep "myapp"
无日志输出:说明程序当前访问的端口均已被允许;
有 DENIED 日志:说明该端口未被配置文件允许。
关键注意事项
区分允许规则和拒绝规则配置文件中可能包含 deny network all 这类兜底拒绝规则,需结合上下文判断 ——显式允许的 network 规则优先级高于拒绝规则。
注意无端口限制的规则若配置文件中写 network tcp, 而未指定 port,表示允许该程序访问所有 TCP 端口,需警惕权限过度开放。
特权端口需配合 capability 规则若规则允许程序访问 1-1024 特权端口(如 80、443),需同时检查是否有 capability net_bind_service 规则,否则程序无法绑定特权端口。
总结
查看 AppArmor 网络端口规则的核心是过滤 network 关键字:
单程序查询:直接 grep 目标配置文件;
全局排查:递归搜索 /etc/apparmor.d/ 目录;
生效验证:结合 aa-status 和系统日志。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快