什么是端口扫描,如何查看服务器哪些端口开放的?
端口扫描是网络安全和管理中的一种常见技术,它用于检测目标服务器或设备上有哪些端口处于开放状态。了解服务器开放的端口可以帮助管理员检测潜在的安全风险,同时也可以用于排查服务异常问题。
以下是关于端口扫描的详细介绍,以及如何查看服务器开放的端口。
1. 什么是端口扫描?
1.1 定义
- 端口扫描是通过向目标服务器的多个端口发送请求,检查哪些端口处于开放(Listening)状态的过程。
- 一个端口的状态通常有以下三种: 开放(Open):目标端口正在监听,可能有服务正在运行。 关闭(Closed):目标端口未监听任何服务。 过滤(Filtered):端口被防火墙或其他安全设备屏蔽,无法确定状态。
1.2 端口的作用
- 端口用于标识服务器上的具体服务或应用程序。
- 常见的端口和服务: 80:HTTP(网站服务)。 443:HTTPS(加密网站服务)。 22:SSH(远程登录)。 3306:MySQL 数据库。 3389:Windows 远程桌面。
1.3 端口扫描的用途
- 网络管理:检查服务器上运行的服务。
- 安全审计:识别未授权或不必要的开放端口,防止攻击。
- 故障排查:确认服务是否正常监听对应端口。
2. 如何查看服务器开放的端口?
以下是几种常用方法,可以在服务器上查看开放的端口。
2.1 使用 netstat 查看开放的端口
netstat 是一个常用工具,可以显示网络连接、监听的端口等信息。
(1) 查看监听的端口
运行以下命令:
bash
netstat -tuln- 参数说明:
- -t:显示 TCP 端口。
- -u:显示 UDP 端口。
- -l:只显示监听状态的端口。
- -n:显示数字格式的 IP 地址和端口。
- 输出示例:
- bash
- 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 0.0.0.0:80 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:123 0.0.0.0:*
- 0.0.0.0:22 表示 SSH 服务正在监听 22 端口。
- 0.0.0.0:80 表示 HTTP 服务正在监听 80 端口。
- 0.0.0.0:123 表示 NTP 服务正在监听 123 端口。
2.2 使用 ss 命令
ss 是 netstat 的替代工具,速度更快,功能更强大。
(1) 查看监听的端口
运行以下命令:
bash
ss -tuln- 参数说明:
- -t:显示 TCP 端口。
- -u:显示 UDP 端口。
- -l:只显示监听状态的端口。
- -n:显示数字格式的 IP 地址和端口。
- 输出示例:
- bash
- Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
2.3 使用 lsof 查看端口
lsof 是一个文件和端口管理工具,可以查看哪些程序正在使用端口。
(1) 查看所有监听端口
运行以下命令:
bash
sudo lsof -i -n -P- 参数说明:
- -i:显示网络相关的文件(包括端口)。
- -n:不将 IP 地址解析为主机名。
- -P:不将端口号解析为服务名。
- 输出示例:
- bash
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN) nginx 5678 root 6u IPv4 67890 0t0 TCP *:80 (LISTEN)
2.4 使用 nmap 进行端口扫描
nmap 是一款功能强大的网络扫描工具,可以扫描本地或远程服务器的开放端口。
(1) 安装 nmap
在 CentOS 上:
bash
sudo yum install nmap -y在 Ubuntu 上:
bash
sudo apt install nmap -y(2) 扫描本地服务器
运行以下命令扫描本机所有开放端口:
bash
nmap localhost(3) 扫描特定端口范围
扫描 1 到 1000 端口:
bash
nmap -p 1-1000 localhost(4) 输出示例
bash
Starting Nmap 7.91 ( https://nmap.org ) at 2025-09-19 15:30 CSTNmap scan report for localhost (127.0.0.1)Host is up (0.00012s latency).Not shown: 998 closed portsPORT STATE SERVICE22/tcp open ssh80/tcp open http- 表示 22 端口(SSH)和 80 端口(HTTP)处于开放状态。
2.5 使用 firewalld 查看允许的端口
如果系统启用了防火墙,可以通过以下命令查看防火墙允许的端口。
(1) 查看开放端口
bash
sudo firewall-cmd --list-ports(2) 输出示例
bash
80/tcp 443/tcp 22/tcp- 表示 80、443 和 22 端口被防火墙放行。
3. 如何应对未授权的端口开放?
3.1 检查必要性
- 确认是否有不必要的端口开放,关闭无用端口以减少被攻击的可能性。
3.2 关闭不必要的端口
(1) 使用 firewalld 关闭端口
- 关闭 8080 端口:
- bash
- sudo firewall-cmd --remove-port=8080/tcp --permanent sudo firewall-cmd --reload
(2) 停止对应服务
- 找到对应的服务并停止:
- bash
- sudo systemctl stop <服务名> sudo systemctl disable <服务名>
3.3 限制访问
- 使用防火墙规则限制特定 IP 的访问:
- bash
- sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=22 protocol=tcp accept' --permanent sudo firewall-cmd --reload
4. 总结
- 什么是端口扫描?
- 端口扫描用于检测目标服务器上哪些端口处于开放状态,通常用于网络管理和安全审计。
- 如何查看服务器开放的端口?
- 使用工具如 netstat、ss、lsof 查看监听端口。
- 使用 nmap 扫描本地或远程服务器的端口。
- 使用防火墙工具(如 firewalld)查看允许的端口。
- 如何处理未授权的端口?
- 关闭不必要的端口。
- 停止对应服务或限制访问范围。
通过以上方法,可以有效管理和保护服务器的端口,提升安全性,防止潜在的攻击。
