如何检查 Ubuntu 服务器上的开放端口

本文将介绍如何检查 Ubuntu 18.04 服务器上开放了哪些端口。开放端口是指某个进程或应用程序正在运行并且可以接受数据的端口。本文的方法也适用于其他 Ubuntu 版本。

如何检查 Ubuntu 服务器上的开放端口
如何检查 Ubuntu 服务器上的开放端口

监听地址之间的区别

首先要清楚服务是在监听 127.0.0.1 (localhost) 还是 0.0.0.0 上的端口,监听 localhost 的服务只能从主机本身访问,如果在所有接口 (*) 或 0.0.0.0 上监听,则该服务可从 Internet 访问。如果开启了防火墙,则需要在 Iptables 中检查或运行“ufw status”,来检查端口的开放状态。

使用 nmap 检查开放端口

nmap 是一种开源免费的端口扫描工具,用于扫描网络并查找主机上开放的端口。使用下面的命令扫描主机上的所有端口。

$ sudo nmap localhost
                        Starting Nmap 7.80 ( https://nmap.org ) at 2021-06-12 06:03 UTC

                        Nmap scan report for localhost (127.0.0.1)

                        Host is up (0.0000090s latency).

                        Not shown: 995 closed ports

                        PORT     STATE SERVICE

                        21/tcp   open  ftp

                        22/tcp   open  ssh

                        80/tcp   open  http

                        443/tcp  open  https

                        3306/tcp open  mysql

                        

                        Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

如果要检查特定端口是否打开,请使用 -p 选项来指定端口。

$ sudo nmap -p 80 localhost
                    
                        Starting Nmap 7.80 ( https://nmap.org ) at 2021-06-12 06:04 UTC

                        Nmap scan report for localhost (127.0.0.1)

                        Host is up (0.000054s latency).

                        

                        PORT   STATE SERVICE

                        80/tcp open  http

                        

                        Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds

使用 lsof 检查开放的端口

lsof 命令,就是用来列出 linux 中所有打开的文件。这些文件可能是网络套接字、磁盘文件或不同进程打开的设备。使用 lsof 命令和 -nP 选项可列出所有打开的套接字。

$ sudo lsof -nP | grep LISTEN
                       ...snip...

                        redis-ser  511  513 redis-ser        redis    6u    IPv4        662257788    0t0    TCP  127.0.0.1:6379  (LISTEN)

                        redis-ser  511  513 redis-ser        redis    7u    IPv6        662257789    0t0    TCP  [::1]:6379      (LISTEN)

                        redis-ser  511  515 redis-ser        redis    6u    IPv4        662257788    0t0    TCP  127.0.0.1:6379  (LISTEN)

                        redis-ser  511  515 redis-ser        redis    7u    IPv6        662257789    0t0    TCP  [::1]:6379      (LISTEN)

                        redis-ser  511  517 redis-ser        redis    6u    IPv4        662257788    0t0    TCP  127.0.0.1:6379  (LISTEN)

                        redis-ser  511  517 redis-ser        redis    7u    IPv6        662257789    0t0    TCP  [::1]:6379      (LISTEN)

                        ...snip...

仅列出 TCP 打开的套接字。

$ sudo lsof -i tcp
                       ...snip...

                        pure-ftpd  303            root    4u  IPv4 662259745      0t0  TCP *:ftp (LISTEN)

                        pure-ftpd  303            root    5u  IPv6 662259746      0t0  TCP *:ftp (LISTEN)

                        sshd       304            root    3u  IPv4 662258731      0t0  TCP *:ssh (LISTEN)

                        sshd       304            root    4u  IPv6 662258733      0t0  TCP *:ssh (LISTEN)

                        ..snip...

对于 UDP 打开套接字,请使用以下命令。

$ sudo lsof -i udp
systemd-r 254 systemd-resolve 12u IPv4 662203276 0t0 UDP localhost:domain

使用 netstat 检查开放的端口

netstat  命令可用于监控和扫描网络。使用 netstat 命令获取所有 tcp 和 udp 开放端口的列表。

$ sudo netstat -l
                       ...snip...

                        tcp        0      0 localhost:27017         0.0.0.0:*               LISTEN

                        tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN

                        tcp        0      0 localhost:6379          0.0.0.0:*               LISTEN

                        tcp        0      0 localhost:11211         0.0.0.0:*               LISTEN

                        ...snip...

仅列出 TCP 端口。

$ sudo netstat -lt
                    ...snip...                     tcp        0      0 localhost:27017         0.0.0.0:*               LISTEN                     tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN                     tcp        0      0 localhost:6379          0.0.0.0:*               LISTEN                     tcp        0      0 localhost:11211         0.0.0.0:*               LISTEN                     tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN                     tcp6       0      0 [::]:ftp                [::]:*                  LISTEN                     tcp6       0      0 [::]:ssh                [::]:*                  LISTEN                     ...snip...

列出 UDP 端口。

$ sudo netstat -lu
                        Active Internet connections (only servers)

                        

                        Proto Recv-Q Send-Q Local Address           Foreign Address         State

                        udp        0      0 localhost:domain        0.0.0.0:*

使用 ss 检查打开的端口

ss 命令用于列出网络套接字的详细信息。它提供了比 netstat 命令更详细的信息。

$ sudo ss -l

列出 linux 系统上的所有监听端口。

                        Netid      State       Recv-Q      Send-Q                    Local Address:Port                    Peer Address:Port           Process

                        nl         UNCONN      0           0                         rtnl:systemd/1                                    *

                        nl         UNCONN      0           0                         rtnl:kernel                                       *

                        nl         UNCONN      0           0                         rtnl:systemd-resolve/254                          *

                        nl         UNCONN      0           0                         rtnl:systemd-resolve/254                          *

                        nl         UNCONN      0           0                         rtnl:systemd/1                                    *

                        ...snip...

要仅列出 TCP 侦听端口,请使用 -lt 标志。

$ sudo ss -lt
                    ...snip...                     LISTEN              0                   128                        0.0.0.0:ssh          0.0.0.0:*                     LISTEN              0                   511                        0.0.0.0:https        0.0.0.0:*                     LISTEN              0                   4096                       127.0.0.1:27017      0.0.0.0:*                     LISTEN              0                   70                         127.0.0.1:mysql      0.0.0.0:*                     LISTEN              0                   511                        127.0.0.1:6379       0.0.0.0:*                     ...snip...

对于 UDP 侦听端口,使用 -lu 标志。

$ sudo ss -lu
                        State               Recv-Q              Send-Q                           Local Address:Port                             Peer Address:Port             Process

                        UNCONN              0                   0                                127.0.0.53%lo:domain                                0.0.0.0:*

结论

有不同的工具可用于监控服务器上开放的端口。在本文中,我们介绍了如何使用不同的命令行工具(如nmapssnetstatlsof )检查 Ubuntu 服务器上开放的端口。

扩展阅读:

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-check-open-ports-on-ubuntu-server/

(0)
上一篇 2022年3月28日 上午9:18
下一篇 2022年3月28日 上午11:19

相关推荐

发表评论

登录后才能评论