Home
avatar

.𝙃𝙤𝙬𝙚

向下滚动

AlmaLinux 查看外部暴露端口|ss 命令实践

背景

在服务器运维中,经常需要确认哪些端口正在监听,并且区分是仅本地可访问还是已暴露给外部网络。AlmaLinux 系统默认使用 ss 命令替代传统的 netstat,它更轻量、输出更规范。本文记录如何用 ss 准确筛选出对外监听的端口,并配合防火墙规则判断真正的“暴露”状态。

基础命令:查看所有监听端口

ss -tuln 是最常用的组合,列出所有 TCP/UDP 监听端口,并以数字形式显示地址和端口号,避免 DNS 解析延迟。

sudo ss -tuln

输出示例:

Netid  State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*
tcp    LISTEN  0       128     127.0.0.1:631        0.0.0.0:*
tcp    LISTEN  0       128     [::]:22              [::]:*
udp    UNCONN  0       0       0.0.0.0:68           0.0.0.0:*
  • 0.0.0.0:端口 或 [::]:端口 表示绑定到所有网络接口(包括外网 IP)。
  • 127.0.0.1:端口 或 [::1]:端口 表示仅绑定到本地环回,外部无法直接访问。

过滤出外部可访问的监听端口

要排除本地环回地址,可以使用 awk 或 grep -v 进行过滤。

方法一:使用 awk 保留表头

sudo ss -tuln | awk 'NR==1 || ($5 !~ /^127\.0\.0\.1:/ && $5 !~ /^\[::1\]:/)'
  • NR==1 保留第一行表头。
  • $5 是本地地址列,正则匹配排除 127.0.0.1: 和 [::1]:。

方法二:使用 grep -v 取反(简洁)

sudo ss -tuln | grep -v "127.0.0.1:" | grep -v "\[::1\]:" | grep LISTEN

这样只显示处于 LISTEN 状态且非环回的条目。

输出解读

过滤后可能看到:

tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*
tcp    LISTEN  0       128     [::]:22              [::]:*
udp    UNCONN  0       0       0.0.0.0:68           0.0.0.0:*

这些端口确实监听在所有接口上,但并不等于外部一定能访问,还需要检查防火墙。

区分“监听”与“防火墙开放”

ss 展示的是服务进程层面的监听状态,而外部流量能否抵达,取决于防火墙(如 firewalld)或云平台安全组规则。

查看 firewalld 放行的端口

sudo firewall-cmd --list-all

重点关注 ports: 部分:

ports: 80/tcp 443/tcp 22/tcp

只有既在 ss 中监听,又在防火墙放行列表中的端口,才是真正对外暴露的。

补充:查看特定端口是否可访问

可以结合 grep 快速检查:

sudo ss -tuln | grep :80

若返回结果,说明 80 端口在监听;再通过 firewall-cmd --list-ports 确认是否开放。

常见误区

  • 误区一:ss 显示 0.0.0.0:3306 就认为所有人都能连。实际上如果防火墙没放行 3306,外部连接会超时或被拒绝。
  • 误区二:只检查 ss 而忽略防火墙,导致排查网络问题方向错误。
  • 误区三:混淆 127.0.0.1 与 0.0.0.0,前者仅本机可访问,后者才是对外监听。

实用组合命令

一次性输出外部监听端口及其对应的进程信息(需 sudo):

sudo ss -tlnp | awk 'NR==1 || ($5 !~ /^127\.0\.0\.1:/ && $5 !~ /^\[::1\]:/)'

添加 -p 可显示进程名和 PID,便于定位服务。

结论

  1. 使用 ss -tuln 查看所有监听端口。
  2. 通过 awk 或 grep 排除 127.0.0.1 和 ::1,得到对外绑定的端口列表。
  3. 结合 firewall-cmd --list-all 确认防火墙放行情况,两者缺一不可,才能准确判断端口是否真正暴露给外部。

这套方法适用于任何基于 Linux 的发行版(CentOS、RHEL、AlmaLinux 等),是运维排障的基础技能。

Linux ss 网络排查 防火墙 AlmaLinux