1. 为什么需要查看Ubuntu的网络端口在Ubuntu系统中查看正在使用的网络端口是系统管理和网络调试的基础操作。作为一名运维工程师我几乎每天都会用到这个功能。想象一下这样的场景当你部署一个新的服务时系统提示端口已被占用或者某个服务突然无法访问你需要排查是否是端口监听出了问题又或者出于安全考虑你需要审计系统开放了哪些不必要的端口。这些情况下快速准确地查看端口使用情况就变得至关重要。Ubuntu作为最流行的Linux发行版之一提供了多种工具来完成这个任务。传统的netstat、新兴的ss命令以及功能强大的nmap都是我们工具箱里的常备武器。每种工具都有其特点和适用场景掌握它们的用法能让你在排查网络问题时事半功倍。提示在开始操作前请确保你拥有足够的权限。大多数端口查看命令需要root权限才能显示所有信息。2. 使用netstat查看端口信息netstatnetwork statistics是一个经典的网络工具虽然在新版Linux中逐渐被ss取代但它仍然被广泛使用且功能强大。让我们深入了解一下它的用法。2.1 基本用法与常用参数最基本的命令是sudo netstat -tuln这个命令组合了几个重要参数-t显示TCP连接-u显示UDP连接-l仅显示监听中的套接字-n以数字形式显示地址和端口不进行DNS解析输出结果通常分为几列Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 :::80 :::* LISTEN第一列是协议类型第二三列是接收和发送队列第四列是本地地址和端口第五列是远程地址和端口最后一列是连接状态。2.2 进阶用法与组合技巧在实际工作中我经常使用这些组合命令查看所有TCP连接包括已建立的sudo netstat -ant查看特定端口的占用情况比如查找谁在占用80端口sudo netstat -tulnp | grep :80这里的-p参数可以显示占用端口的进程信息非常有用。但要注意在某些系统上可能需要使用-ep而不是-p。查看网络接口统计信息netstat -i这个命令可以显示每个网络接口的MTU、接收和发送的数据包数量等统计信息对于网络性能分析很有帮助。注意在较新的Ubuntu版本中netstat可能默认未安装。如果需要可以通过sudo apt install net-tools来安装。3. 更现代的替代工具ss命令sssocket statistics是iproute2包的一部分旨在替代netstat。它的主要优点是速度更快信息更详细特别是在处理大量连接时。3.1 ss基础用法查看所有监听端口sudo ss -tuln参数含义与netstat类似-tTCP sockets-uUDP sockets-l监听中的sockets-n不解析服务名称ss的一个显著优势是它的过滤能力。例如要查看所有已建立的TCP连接ss -t state established3.2 高级过滤与进程信息ss提供了强大的过滤语法。比如查看来自特定IP的所有连接ss dst 192.168.1.100查看连接到本地80端口的连接ss dport :80要显示进程信息类似于netstat的-p参数sudo ss -tulnpss还能显示更详细的socket信息如ss -eip这个命令会显示包括进程ID、用户ID、inode等扩展信息对于深入调试非常有用。3.3 为什么ss比netstat更好在我的实际使用中ss相比netstat有几个明显优势速度更快特别是在系统有大量连接时信息更丰富提供更多TCP状态和统计信息过滤更灵活支持丰富的过滤表达式维护更活跃netstat已经基本停止开发4. 使用lsof查看端口与进程关系lsoflist open files是另一个强大的工具它可以列出系统打开的所有文件而由于Linux中一切皆文件网络连接也被视为文件因此lsof也可以用来查看端口使用情况。4.1 基本用法查看所有网络连接sudo lsof -i查看特定端口的进程sudo lsof -i :80这个命令会显示使用80端口的所有进程包括进程ID、用户、命令名等信息。4.2 高级用法查看某个进程打开的所有网络连接sudo lsof -i -a -p PID查看某个用户打开的网络连接sudo lsof -i -u usernamelsof的一个独特优势是它能显示完整的命令路径和用户信息这在安全审计时特别有用。5. 网络扫描工具nmap的使用nmapNetwork Mapper是一个功能强大的网络扫描工具不仅可以查看本机端口还能扫描网络中的其他主机。5.1 扫描本机端口快速扫描本机常用端口sudo nmap -sT -O localhost参数说明-sTTCP连接扫描-O尝试识别操作系统更全面的扫描sudo nmap -p 1-65535 -sV -sS -T4 localhost这个命令会扫描所有65535个端口进行服务版本检测(-sV)使用SYN扫描(-sS)并启用激进时序(-T4)。5.2 扫描远程主机扫描远程主机的开放端口sudo nmap -sS 192.168.1.100使用SYN扫描半开扫描可以快速发现远程主机的开放端口而且不会建立完整连接相对隐蔽。注意未经授权扫描他人网络可能违反法律或网络使用政策请确保你有权限扫描目标网络。6. 端口冲突的解决方案在实际工作中经常会遇到端口冲突的问题。这里分享我处理这类问题的完整流程。6.1 确认端口占用情况首先确认端口确实被占用sudo ss -tulnp | grep :80或者使用lsofsudo lsof -i :806.2 分析占用进程查看占用进程的详细信息ps -p PID -f或者查看进程打开的所有文件lsof -p PID6.3 解决方案根据情况选择合适方案如果是非必要进程可以考虑停止它sudo kill PID如果是重要服务可以修改配置改用其他端口如果是临时测试可以使用端口转发sudo socat TCP-LISTEN:80,fork TCP:localhost:80807. 自动化监控与报警对于生产环境手动检查端口是不够的。我通常会设置自动化监控。7.1 使用netcat进行端口测试简单的端口可用性测试nc -zv localhost 80这个命令会测试本地80端口是否开放并可以接受连接。7.2 编写监控脚本一个简单的bash监控脚本示例#!/bin/bash PORT80 HOSTlocalhost if ! nc -z $HOST $PORT; then echo 端口 $PORT 不可用 | mail -s 端口监控报警 adminexample.com # 可以添加自动恢复逻辑 fi可以把这个脚本加入cron定时执行。7.3 使用专业监控工具对于企业级环境考虑使用更专业的工具如Prometheus Blackbox ExporterNagiosZabbix这些工具可以提供更全面的监控和报警功能。8. 安全注意事项端口管理不仅仅是技术问题还涉及系统安全。以下是我总结的几个关键点8.1 最小化开放端口遵循最小权限原则只开放必要的端口使用防火墙限制访问来源定期审计开放端口Ubuntu上可以使用ufw管理防火墙sudo ufw allow 22/tcp # 只允许SSH sudo ufw enable8.2 检测异常连接定期检查异常连接sudo ss -antp | grep ESTAB关注不常见的IP地址和端口组合。8.3 服务加固对于必须开放的服务使用最新版本配置适当的访问控制启用加密如TLS限制服务权限如以非root用户运行9. 性能调优相关端口和连接管理也会影响系统性能。以下是一些调优经验9.1 查看连接状态统计ss -s这个命令会显示各种TCP状态的连接数统计有助于发现连接泄漏等问题。9.2 调整端口范围对于高并发服务可能需要调整本地端口范围echo 1024 65535 /proc/sys/net/ipv4/ip_local_port_range9.3 TIME_WAIT问题处理大量的TIME_WAIT连接可能耗尽端口资源可以调整echo 1 /proc/sys/net/ipv4/tcp_tw_reuse10. 图形化工具介绍虽然命令行工具强大但有时图形界面更方便。以下是我推荐的几个工具10.1 Wireshark功能强大的网络协议分析器sudo apt install wireshark10.2 Gnome System MonitorUbuntu自带的资源监视器有简单的网络标签页。10.3 NetHogs按进程显示网络带宽占用sudo apt install nethogs sudo nethogs11. 容器环境下的端口管理随着Docker等容器技术的普及端口管理有了新的维度。11.1 查看Docker容器端口查看容器端口映射docker port container_name查看所有容器的端口使用docker ps --format table {{.Names}}\t{{.Ports}}11.2 宿主机视角从宿主机查看容器端口sudo ss -tulnp | grep docker或者sudo lsof -i | grep docker12. 常见问题排查案例分享几个我在实际工作中遇到的典型案例12.1 案例一端口被占用但找不到进程有时会出现端口显示被占用但用ss/netstat/lsof都找不到占用者的情况。这通常是因为内核模块占用了端口连接处于奇怪的状态解决方案sudo netstat -nap | grep -i tcp | grep -i listen或者检查内核模块lsmod12.2 案例二服务无法绑定端口但端口显示空闲这可能是因为没有足够的权限如绑定1024以下端口需要rootIP地址配置问题防火墙阻止检查IP配置ip addr show12.3 案例三大量TIME_WAIT连接这通常出现在频繁创建短连接的应用中。除了前面提到的tcp_tw_reuse还可以优化应用使用长连接调整tcp_max_tw_buckets缩短tcp_fin_timeout13. 进阶技巧与脚本分享几个提高效率的脚本和技巧13.1 监控特定端口的脚本#!/bin/bash PORT$1 INTERVAL5 while true; do DATE$(date) CONN$(ss -ant state established sport :$PORT | wc -l) echo [$DATE] 端口 $PORT 当前连接数: $((CONN-1)) sleep $INTERVAL done13.2 快速查找高连接数IPss -nt | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -nr13.3 端口使用情况报告生成HTML格式的端口使用报告(echo htmlbodyh1端口使用报告/h1pre; sudo ss -tulnp; echo /pre/body/html) port_report.html14. 系统服务与端口理解系统常见服务与端口的对应关系很重要14.1 常见服务端口22: SSH80: HTTP443: HTTPS53: DNS25: SMTP3306: MySQL5432: PostgreSQL查看/etc/services文件获取完整列表cat /etc/services | less14.2 修改服务端口以SSH为例修改端口编辑配置文件sudo nano /etc/ssh/sshd_config修改Port行重启服务sudo systemctl restart sshd更新防火墙规则15. 网络命名空间中的端口在复杂的网络环境中可能会遇到网络命名空间。查看其他命名空间中的端口首先列出所有命名空间ip netns list然后在指定命名空间中运行命令sudo ip netns exec namespace ss -tulnp这对于调试容器网络或复杂网络配置特别有用。16. IPv6端口管理IPv6的端口管理与IPv4类似但有一些特殊注意事项查看IPv6监听端口ss -tuln6或者netstat -tuln6注意输出中地址的格式:::表示监听所有IPv6地址。17. 内核参数调优与端口相关的几个重要内核参数查看当前值sysctl net.ipv4.ip_local_port_range sysctl net.ipv4.tcp_fin_timeout sysctl net.ipv4.tcp_max_syn_backlog临时修改sudo sysctl -w net.ipv4.tcp_fin_timeout30永久修改编辑/etc/sysctl.conf18. 日志与审计端口访问日志对于安全和故障排查至关重要18.1 查看系统日志journalctl -u ssh --since 1 hour ago18.2 配置审计规则使用auditd监控特定端口的访问sudo auditctl -a exit,always -F archb64 -S bind -k network-port-bind然后查看审计日志sudo ausearch -k network-port-bind19. 网络诊断组合拳当遇到网络问题时我通常会按这个顺序排查检查本地服务是否监听正确端口ss/netstat检查本地防火墙规则ufw/iptables测试本地连接telnet/nc到localhost检查远程主机是否可达ping测试远程端口telnet/nc检查路由traceroute抓包分析tcpdump20. 资源监控与限制对于可能耗尽端口资源的情况可以设置限制20.1 查看当前使用情况cat /proc/sys/net/ipv4/ip_local_port_range ss -s20.2 限制用户连接数使用iptables限制单个IP的连接数sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j REJECT20.3 使用cgroups限制创建cgroup限制网络资源sudo cgcreate -g net_cls:limited echo 0x10001 /sys/fs/cgroup/net_cls/limited/net_cls.classid tc filter add dev eth0 parent 1: protocol ip handle 1: cgroup在实际工作中我发现端口管理虽然基础但涉及的知识面很广。从简单的命令使用到复杂的网络调试再到性能调优和安全加固每个方面都有很多细节需要注意。掌握这些工具和技巧能让你在遇到网络问题时快速定位和解决。
阅读完成 · 觉得有帮助?