查看系统端口状态
要查看 Debian 系统上端口的开放状态,可以使用以下命令:
- 使用 netstat 命令:
sudo netstat -tulnp
输出如下所示:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2812 0.0.0.0:* LISTEN 369/monit
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 798/sshd
tcp6 0 0 :::80 :::* LISTEN 916/apache2
tcp6 0 0 :::22 :::* LISTEN 798/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 614/dhclient
这将列出所有已开放的端口和它们所在的进程。输出将显示端口号、协议、IP 地址、进程 ID 和进程名称等信息。
其中:
- t:表示 TCP 协议;
- u:表示 UDP 协议;
- l:表示监听状态;
- n:表示不解析服务名称;
- p:显示进程名/ PID
- 使用 ss 命令:
sudo ss -tulw
输出如下所示:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 127.0.0.1:2812 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
此命令将显示所有 TCP 和 UDP 端口的详细信息,包括端口号、协议、状态、IP 地址、进程 ID 和进程名称等。
其中:
- t:表示 TCP 协议;
- u:表示 UDP 协议;
- l:表示监听状态;
- w:表示要显示所有套接字(包括正在等待连接的套接字)。
这里提醒大家,这两个命令需要有 root 权限才能运行,才能显示所有进程和端口信息。如果您只想查看特定端口的信息,则可以在命令中指定端口号,如下所示:
sudo netstat -tulnp | grep <port_number>
或者:
sudo ss -tulw | grep <port_number>
其中 <port_number> 是您要查看的端口号。这将只显示与该端口相关的信息。
查看开放的防火墙端口
如果您需要查看已经开放的防火墙端口,则需要使用防火墙管理工具,例如 iptables。可以使用以下命令来列出所有防火墙规则:
sudo iptables -L
输出如下所示:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
此命令将列出所有规则,包括允许和拒绝的规则。您可以在规则列表中查找要查看的端口的规则。如果该端口被允许,则意味着它是开放的;否则,意味着它是关闭的。
在 Debian 系统上,可以使用以下命令来查看防火墙开放了哪些端口:
sudo iptables -L | grep 'ACCEPT'
此命令将列出所有被允许的规则,即防火墙已经开放的端口。例如:
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
在此示例中,防火墙已经开放了 SSH 端口(22)、HTTP 端口(80)和 HTTPS 端口(443)。如果您只想查看特定协议(例如 TCP 或 UDP)的规则,则可以在命令中指定协议类型,例如:
sudo iptables -L -v -n | grep 'tcp spt:80'
此命令将列出所有源端口为 80 的 TCP 流量规则,包括源地址、目标地址、协议和目标端口等信息。
上述这些命令同样需要使用 root 权限来运行。如果您使用的是防火墙管理工具(例如 ufw),则可以使用类似的命令来列出所有开放的端口。例如,要列出 ufw 已经开放的端口,可以运行以下命令:
sudo ufw status verbose
此命令将显示当前防火墙规则及其状态,包括已开放的端口列表。
安装 ufw
Debian 默认情况下没有安装 ufw(Uncomplicated Firewall)。如果您想使用 ufw 来管理防火墙规则,需要先安装它。安装 ufw 命令如下:
sudo apt-get update
sudo apt-get install ufw
安装完成后,您可以使用以下命令来查看开放的端口状态:
sudo ufw status verbose
该命令将列出所有防火墙规则及其状态。例如:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp (Apache) ALLOW IN Anywhere
443/tcp (Apache Full) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (Apache (v6)) ALLOW IN Anywhere (v6)
443/tcp (Apache Full (v6)) ALLOW IN Anywhere (v6)
此输出显示了开放的端口和对应的服务(例如 OpenSSH、Apache 等),以及它们是否允许传入流量(ALLOW IN)。
如果您想允许或禁止特定的端口,可以使用 ufw 的命令行界面。例如,要允许传入 HTTP 流量,请使用以下命令:
sudo ufw allow 80/tcp
这将允许传入 TCP 端口 80 的流量。要禁止特定端口的流量,请使用 deny
选项替换 allow
。在更改防火墙规则后,您需要使用以下命令来重新加载规则:
sudo ufw reload