如何在 Linux 上检查开放的端口并关闭不需要的端口
检查服务器开放端口并关闭不必要的端口是网络安全管理中的关键环节,开放端口如同服务器的“窗口”,若其中存在未被利用或未受保护的端口,就如同为潜在的攻击者敞开了大门,他们可能会利用这些端口的漏洞来入侵系统、窃取数据或进行恶意操作。通过检查开放端口,可以明确哪些端口正在被合法服务使用,哪些可能是被遗忘或未授权的端口,从而及时发现潜在的安全隐患。关闭不必要的端口则能有效减少攻击面,降低服务器被攻击的风险,同时也有助于优化系统性能,避免资源被无效占用,确保服务器的安全、稳定和高效运行。
本文介绍如何在本地和远程检查服务器上开放的端口,以及如何关闭它们。
1.在本地检查Linux上开放的端口
所有计算机操作系统(OS)都包含netstat命令,用于监控网络连接。
以下命令使用netstat显示使用 TCP 协议的所有监听端口:
[root@monitor ~]# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 0 localhost:6011 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 monitor:domain 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
tcp6 0 0 localhost:6011 [::]:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
[root@monitor ~]#
其中:
- netstat:调用程序
- -l:列出监听端口
- -t:指定TCP协议
输出内容以人类友好的方式排列,按列显示协议、接收和发送的数据包、本地和远程IP地址以及端口状态。
如果将TCP协议替换为UDP,结果只会显示开放端口(至少在Linux上),而不会指定状态。与TCP协议不同,UDP协议是无状态的。
[root@monitor ~]# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 monitor:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:824 0.0.0.0:*
udp 0 0 0.0.0.0:37740 0.0.0.0:*
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp6 0 0 [::]:sunrpc [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:824 [::]:*
[root@monitor ~]#
也可以不指定协议,仅使用-l或–listen选项来获取所有监听端口的信息,无论其使用何种协议:
[root@monitor ~]# netstat --listen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 localhost:6011 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 monitor:domain 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 localhost:6011 [::]:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
udp 0 0 monitor:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:824 0.0.0.0:*
udp 0 0 0.0.0.0:37740 0.0.0.0:*
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp6 0 0 [::]:sunrpc [::]:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:824 [::]:*
raw6 4608 0 [::]:ipv6-icmp [::]:* 7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 26821 @/tmp/dbus-VWpRiaqJ
unix 2 [ ACC ] STREAM LISTENING 19199 /var/run/spice-vdagentd/spice-vdagent-sock
unix 2 [ ACC ] STREAM LISTENING 19201 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 19204 /var/run/libvirt/virtlockd-sock
……
如上,显示了 TCP、UDP和Unix套接字协议的信息。
前面所有示例都展示了如何显示没有建立连接的监听端口信息。以下命令展示了如何显示监听端口和已建立的连接:
netstat -vatn
其中:
- netstat:调用程序
- -v:详细信息
- -a:显示活动连接
- -t:显示TCP连接
- -n:以数字形式显示端口
# 实例:假设现在系统中发现了一个可疑进程,想要检查与之关联的端口。
根据这个问题,我们可以使用
lsof命令,该命令用于列出与进程相关联的打开文件。lsof -i 4 -a -p <进程数字>比如,现在要检查进程
1593:[root@monitor ~]# lsof -i 4 -a -p 1593
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 1593 root 13u IPv4 29723 0t0 TCP localhost:smtp (LISTEN)其中:
- lsof:调用程序
- -i:列出与互联网交互的文件,选项4表示仅打印IPv4,选项6可用于IPv6。
- -a:指示输出结果进行逻辑与操作
- -p:指定要检查的进程的PID编号
正如前面所看到的,该进程与监听的SMTP端口相关联。
2.远程检查 linux 上的开放的端口
如果想要检测远程系统的端口,最常用的工具是Nmap(网络映射器)。下面对远程服务器
haopython.com进行端口扫描:nmap www.haopython.com输出分为 3 列,分别显示端口、端口状态和在端口后面侦听的服务:
[root@monitor ~]# nmap www.haopython.com
Starting Nmap 6.40 ( http://nmap.org ) at 2025-05-08 10:03 CST
Nmap scan report for www.haopython.com (147.94.44.183)
Host is up (0.022s latency).
Not shown: 994 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
888/tcp open accessbuilder
3306/tcp open mysql
8888/tcp open sun-answerbook
Nmap done: 1 IP address (1 host up) scanned in 9.97 seconds
[root@monitor ~]#默认情况下,Nmap仅扫描最常用的1000个端口。如果要Nmap扫描所有端口,则添加下面参数并运行:
nmap -p- www.haopython.com3.在CentOS 8上移除httpd服务
为确保服务器的安全,除了防火墙规则以保持端口被阻止外,还建议删除不必要的服务。
下面举例删除CentOS 8上已经安装且不提供服务的
httpd服务。1)确认服务状态
systemctl status httpd2)停止服务并禁用自动启动
systemctl stop httpd
systemctl disable httpd3)移除服务
使用
yum或dnf(CentOS 8 默认使用dnf)来移除httpd服务及其相关文件:dnf remove httpd4)验证移除结果
dnf list installed | grep httpd如果没有输出,说明
httpd服务及其相关文件已被成功移除。通过以上步骤,成功移除了 CentOS 8 系统中不再需要的
httpd服务,减少了系统资源的占用,同时也降低了因未使用服务可能带来的安全风险。4.使用 UFW 关闭 Linux 上的开放的端口
如果我们发现有不需要开放的端口,最简单的解决方案是使用UFW(简单防火墙)将其关闭,某些Linux 系统可能需要先安装UFW。
关闭端口有两种方式,一种是使用
deny选项,另一种是使用reject选项,两者的区别在于reject指令会告知另一端连接已被拒绝。要使用
deny规则阻止22端口,则运行:ufw deny 22要使用
reject规则阻止22端口,请运行:ufw reject 225.使用 iptables 关闭 Linux 上的开放的端口
虽然 UFW 是管理端口的最简单方法,但它是 Iptables 的前端。
以下示例显示如何使用 iptables 拒绝与端口
22的连接:iptables -I INPUT -p tcp --dport 22 -j REJECT上述规则表示拒绝所有目标端口(dport)为
22的TCP传入(INPUT)连接。被拒绝后,源端将被告知连接已被拒绝。下面规则只是丢弃所有数据包,而不通知源连接被拒绝:
iptables -A INPUT -p tcp --dport 22 -j DROP6.使用firewalld在Linux上关闭开放的端口
确保 firewalld 防火墙已经运行,假设现在想关闭端口
80/tcp,可以使用以下命令:firewall-cmd --zone=public --remove-port=80/tcp --permanent然后重新加载:
firewall-cmd --reload最后确认端口是否已关闭:
firewall-cmd --list-all
如何在 Linux 上检查开放的端口并关闭不需要的端口的更多相关文章
- 如何在Linux上检查SSH的版本(转)
SSH协议规范存在一些小版本的差异,但是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00). 事实上,SSH1和SSH2是两个完全不同互不兼容的协议.SSH2明显地 ...
- Linux上防火墙开放对应的端口
在Linux上防火墙开放对应的端口的命令如下: 方式一: [root@localhost sbin]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACC ...
- 关于如何在Linux上使用Nugix反向代理部署net core3.1项目
本文意在教大家如何在Linux上部署net core web项目,本人通过实践已经成功可以通过外网访问我部署在阿里云服务器上的站点. 一:需要用到的东西如下: 1:一个基于net core框架下的we ...
- 如何在 Linux 上安装应用程序
如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...
- 如何在Linux上使用VIM进行.Net Core开发
对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE. Windows上有Visual Studio, Mac上有Visual Studio for Mac, 难道Linu ...
- 如何在 Linux 上复制文件/文件夹到远程系统?
从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...
- 如何在Linux上清理内存缓存、缓冲与交换空间
如何在Linux上清理内存缓存.缓冲与交换空间 与其他类型的操作系统一样,GNU/Linux已经有效的实现了内存管理,甚至更加优秀.但是如果任何进程正在吃光你的内存,并且你想清理它,Linux提供了一 ...
- 如何在 Linux 上设置密码策略
https://linux.cn/article-2518-1.html 用户帐号管理是系统管理员最重要的工作之一.而密码安全是系统安全中最受关注的一块.在本教程中,我将为大家介绍如何在 Linux ...
- [转帖]如何在Linux上使用命令行查看硬件信息
如何在Linux上使用命令行查看硬件信息 时间:2016-01-13 作者:admin 分类:新手入门 阅读:126次 http://embeddedlinux.org.cn/emb-linux/ ...
- 如何在Linux上通过grub添加内核参数
转自Linux中国 我们可以在linux内核启动时为其提供各种各样的参数.这些参数可以自定义内核默认的行为,或者通知内核关于硬件的配置信息.内核参数应在内核启动时通过引导装载程序,如GRUB或LILO ...
随机推荐
- MacOS配置Homebrew
Homebrew笔记 1. 介绍 官网:https://brew.sh/ 对于习惯了使用命令来完成一切的程序员来说,安装软件这种小事,自然是能够用命令解决,就不用图形界面选择.但是在 Linux 中, ...
- docker - [10] 容器数据卷
将应用和环境打包成一个镜像,然后发布启动就成为一个容器了. 一.什么是容器数据卷 容器数据卷(Container Data Volumes)是Docker管理的一种特殊类型的存储区域,它为容器提供 ...
- Hbase - hbase hbck介绍
原文地址:https://bbs.huaweicloud.com/blogs/353332 HBaseFsck(hbck)是一种命令行工具,可检查hbase集群的region一致性和表完整性的问题,同 ...
- FastAPI Cookie 和 Header 参数完全指南:从基础到高级实战 🚀
title: FastAPI Cookie 和 Header 参数完全指南:从基础到高级实战 date: 2025/3/9 updated: 2025/3/9 author: cmdragon exc ...
- AWVS安装使用
AWVS安装使用 1.双击exe文件,然后点击下一步. 2.选择我接受,然后下一步. 3.选择路径(我选择的默认路径)然后下一步. 4.还是下一步. 5.设置邮箱,用户名密码,用户名12345678@ ...
- ChromeOS 134 版本更新
ChromeOS 134 版本更新 一.ChromeOS 134 更新内容 1. ChromeOS 自助终端(Kiosk)模式支持隔离 Web 应用(Isolated Web Apps) 从 Chro ...
- 五大股票金融数据API接口推荐:从实时行情到历史数据全覆盖
摘要:本文将介绍五大主流的股票金融数据API接口,涵盖实时行情.历史数据.技术指标等功能,帮助开发者快速构建金融数据应用.(本文由deepseek生成) 一.StockTV API 1. 核心优势 全 ...
- php-fpm 启动后没有监听端口9000
netstat -tpln未发现监听9000端口.查看/var/log/php7-fpm.log一切正常. 随后查看PHP配置文件:/usr/local/php/etc/php-fpm.conf (源 ...
- 编写你的第一个 Django 应用程序,第1部分
让我们通过示例来学习. 在本教程中,我们将引导您完成基本投票应用程序 它将由两部分组成: 一个公共网站,允许人们查看投票并在其中投票. 允许您添加.更改和删除投票的管理网站. 一.开发环境搭建 第一步 ...
- vue学习二(计算属性computed和监听器watch)
1.1.computed 计算属性 先写注意事项把:computed和methods的区别 //computed定义的方法我们是以属性访问的形式调用的{{computedTest}} comp ...