在 Linux 系統中,可以通過以下方法查看 服務器開放和啟用的端口。以下是詳細的步驟和工具,適用于不同場景。
1. 使用 ss
查看開放的端口
ss
是一個現代化工具,用于顯示網絡連接和監聽的端口。
1.1 查看正在監聽的端口
運行以下命令:
bash
復制
ss -tuln
- 參數說明:
-t
:顯示 TCP 端口。-u
:顯示 UDP 端口。-l
:僅顯示監聽的端口。-n
:以數字形式顯示端口號(不解析為服務名稱)。
示例輸出:
apache
復制
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
- 解釋:
0.0.0.0:22
:表示所有網絡接口上監聽的 SSH 服務端口。127.0.0.1:3306
:表示僅在本地監聽的 MySQL 服務端口。
2. 使用 netstat
查看開放的端口
如果 ss
不可用,可以使用 netstat
(部分系統需安裝 net-tools
包)。
2.1 查看監聽的端口
運行以下命令:
bash
復制
netstat -tuln
- 參數說明:
-t
:顯示 TCP 端口。-u
:顯示 UDP 端口。-l
:僅顯示監聽的端口。-n
:以數字形式顯示端口號。
示例輸出:
apache
復制
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:123 0.0.0.0:*
2.2 安裝 net-tools
(如果未安裝)
在部分系統中,netstat
可能缺失,需要手動安裝:
bash
復制
sudo apt install net-tools # Ubuntu/Debian 系
sudo yum install net-tools # CentOS/RHEL 系
3. 使用 lsof
查看開放的端口
lsof
是一個強大的工具,可以查看與端口相關的進程。
3.1 查看監聽的端口
運行以下命令:
bash
復制
sudo lsof -i -P -n | grep LISTEN
- 參數說明:
-i
:顯示網絡連接。-P
:顯示端口號,而不是服務名稱。-n
:避免解析域名,加快顯示速度。
示例輸出:
apache
復制
sshd 1234 root 3u IPv4 123456 0t0 TCP *:22 (LISTEN)
mysqld 2345 mysql 10u IPv4 654321 0t0 TCP 127.0.0.1:3306 (LISTEN)
4. 使用 firewall-cmd
查看防火墻開放的端口
如果服務器使用 Firewalld 作為防火墻,可以通過以下命令查看防火墻規則。
4.1 查看已開放的端口
運行以下命令:
bash
復制
sudo firewall-cmd --list-ports
- 示例輸出:
復制
22/tcp 80/tcp 443/tcp
- 表示 TCP 端口
22
(SSH)、80
(HTTP)、443
(HTTPS)已開放。
- 表示 TCP 端口
4.2 查看所有防火墻規則
運行以下命令:
bash
復制
sudo firewall-cmd --list-all
- 示例輸出:
yaml
復制
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0sources:services: ssh http httpsports: 22/tcp 80/tcp 443/tcpmasquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
4.3 開放新端口
如果需要開放額外的端口(如 8080 TCP),可以運行:
bash
復制
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
5. 使用 iptables
查看防火墻規則
如果服務器使用的是 iptables
防火墻,可以通過以下命令查看規則。
5.1 查看所有規則
運行以下命令:
bash
復制
sudo iptables -L -n -v
- 示例輸出:
apache
復制
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination100 5000 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2250 3000 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
5.2 開放新端口
如果需要新增開放端口(如 8080 TCP),可以運行:
bash
復制
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
6. 使用 nmap
掃描本地開放端口
nmap
是一個網絡掃描工具,可以用于檢查本地或遠程服務器的開放端口。
6.1 安裝 nmap
bash
復制
sudo apt install nmap # Ubuntu/Debian 系
sudo yum install nmap # CentOS/RHEL 系
6.2 掃描本地開放端口
運行以下命令:
bash
復制
sudo nmap -sT -p- 127.0.0.1
-sT
:掃描 TCP 端口。-p-
:掃描所有端口(1-65535)。
示例輸出:
復制
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-16 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
3306/tcp open mysql
7. 總結
工具 | 用途 | 命令示例 |
---|---|---|
ss | 查看監聽的端口 | ss -tuln |
netstat | 查看監聽的端口 | netstat -tuln |
lsof | 查看端口和相關進程 | `lsof -i -P -n |
firewall-cmd | 查看防火墻開放的端口 | firewall-cmd --list-ports |
iptables | 查看防火墻規則 | iptables -L -n -v |
nmap | 掃描本地開放端口 | nmap -sT -p- 127.0.0.1 |
通過以上方法,您可以輕松檢查 Linux 服務器上開放和啟用的端口,并根據需要調整防火墻規則或開放新端口。