本文将介绍如何检查 Ubuntu 18.04 服务器上开放了哪些端口。开放端口是指某个进程或应用程序正在运行并且可以接受数据的端口。本文的方法也适用于其他 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:*
结论
有不同的工具可用于监控服务器上开放的端口。在本文中,我们介绍了如何使用不同的命令行工具(如nmap、ss、netstat 和 lsof )检查 Ubuntu 服务器上开放的端口。
扩展阅读:
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-check-open-ports-on-ubuntu-server/