无论你是解决网络连接问题还是配置防火墙,首先要做的就是检查系统上实际打开了哪些端口。本文介绍了几种快速查明Linux系统上哪些端口对外开放的方法。什么是开放端口监听端口是应用程序监听的网络端口。想要获取的监听端口列表,通常可以通过ss、netstat或lsof等命令查询系统上的网络栈得到。每个侦听端口都可以使用防火墙打开或关闭(过滤)。一般来说,开放端口是接受来自远程位置的传入数据包的网络端口。例如:如果您正在运行一个侦听端口80和443的Web服务器,并向防火墙上的任何人开放这些端口。使用浏览器,您将能够访问托管在网络服务器上的网站。在这种情况下,80和443都是开放端口。开放端口可能会带来安全风险,因为攻击者可以使用每个开放端口来利用漏洞或执行任何其他类型的攻击。您应该只公开应用程序功能所需的端口,并关闭所有其他端口。使用Nmap命令检查开放端口Nmap是一个强大的网络扫描工具,可以扫描单个主机和大型网络。主要用于安全审计和渗透测试。Nmap是端口扫描的首选工具。除了端口扫描,Nmap还可以检测Mac地址、操作系统类型、内核版本等。从控制台发出以下命令以确定哪些端口正在侦听来自网络的TCP连接:$sudonmap-sT-p-10.10.8.8-sT选项告诉Nmap扫描TCP端口,-p-扫描所有端口(65535).如果没有-p-,Nmap将只扫描1000个端口。启动Nmap7.60(https://nmap.org)at2019-07-0923:10CESTNmapscanreportfor10.10.8.8Hostisup(0.0012slatency).Notshown:998closedportsPORTSTATESERVICE22/tcopenssh80/tcppenhttpMACAddress:08:00:27:05:49:23(OracleBox)Nmapdone:1IPaddress(1hostup)scannedinover0.41seconds显示目标系统上只有端口22、80和8069打开。要扫描UDP端口,请使用-sU而不是-sT:$sudonmap-sU-p-10.10.8.8有关详细信息,请访问Nmap手册页,并了解此工具的所有其他重要功能。使用Netcat命令检查打开的端口Netcat(或nc)是一个命令行工具,可以使用TCP或UDP协议跨网络连接读取和写入数据。使用netcat扫描单个端口或端口范围。例如,要在IP地址为10.10.8.8的远程计算机上扫描20-80端口范围内的开放TCP端口,可以使用以下命令:$nc-z-v10.10.8.820-80-z选项指示nc只扫描开放端口而不发送任何数据,-v以获得更详细的信息。输出将如下所示:nc:connectto10.10.8.8port20(tcp)failed:Connectionrefusednc:connectto10.10.8.8port21(tcp)failed:ConnectionrefusedConnectionto10.10.8.822port[tcp/ssh]成功!...Connectionto10.10.8.880端口[tcp/http]成功!如果只想在屏幕上打印上面打开的端口行,可以使用grep命令过滤结果。$nc-z-v10.10.8.820-802>&1|grepsucceededConnectionto10.10.8.822port[tcp/ssh]成功!Connectionto10.10.8.880port[tcp/http]成功!要扫描UDP端口,请传递-u选项给nc命令:$nc-z-v-u10.10.8.820-802>&1|grepsucceeded使用Bash伪设备检查打开的端口另一种检查端口是打开还是关闭的方法是使用Bashshell检查/dev/tcp/..或/dev/udp/...下的伪设备当在/dev/$PROTOCOL/$HOST/$IP伪设备上执行命令时,Bash将在指定端口上打开到指定主机的TCP或UDP连接。以下if..else语句将检查端口443是否在kernel.org上打开:iftimeout5bash-c'/dev/null'thenecho"Portisopen"elseecho"Portisclosed"fi输出如下所示:上面的Portisopen代码是如何工作的?使用伪设备连接端口时默认超时时间很长,所以我们使用timeout命令在5秒后终止测试命令。如果建立了kernel.org端口连接,则443测试命令将返回true。您还可以使用for循环来检查指定的端口范围:forPORTin{20..80};dotimeout1bash-c"/dev/null"&&echo"port$PORTisopen"done输出将如下所示:port22isopenport80isopen结论我们已经向您展示了如何使用几种扫描开放端口的工具,当然您可以使用其他工具来达到相同的目的,例如:PythonSocket模块、Curl、Telnet或Wget。
