在Linux系统中,如何正确安全地关闭已开放端口的详细具体步骤有哪些?

在Linux系统中,端口是网络通信的入口,每个端口对应一个特定的服务或进程,为了系统安全、避免服务冲突或管理网络访问,经常需要关闭不必要的端口,关闭端口的方法主要分为三类:通过防火墙规则拦截、终止占用端口的进程、修改服务配置文件禁用端口绑定,本文将详细介绍这些操作的具体步骤及注意事项。

linux 系统如何关闭端口

通过防火墙规则关闭端口

防火墙是Linux系统控制网络访问的核心工具,通过添加规则可以阻止特定端口的流量,实现“逻辑关闭”端口的效果,常用的防火墙工具包括iptables(CentOS 7之前、Ubuntu等)和firewalld(CentOS 7+、RHEL 7+),以下分别说明操作方法。

使用iptables关闭端口

iptables是Linux内核集成的防火墙工具,通过添加规则可以过滤端口的输入、输出和转发流量。

(1)临时关闭端口(重启后失效)

  • 关闭TCP端口(以8080端口为例):

    sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

    参数说明:-A INPUT表示添加到输入链规则;-p tcp指定协议为TCP;--dport 8080目标端口为8080;-j DROP直接丢弃匹配的包。

  • 关闭UDP端口(以5353端口为例):

    sudo iptables -A INPUT -p udp --dport 5353 -j DROP

(2)永久关闭端口(重启后生效)

上述规则仅临时生效,重启后会丢失,需通过iptables-saveiptables-restore或直接编辑配置文件实现永久保存,以CentOS 6/7为例:

# 保存当前规则到配置文件
sudo service iptables save  # CentOS 6/7
# 或
sudo iptables-save | sudo tee /etc/iptables/rules.v4  # Ubuntu/Debian

(3)删除已添加的规则

若需恢复端口访问,可通过-D参数删除规则:

linux 系统如何关闭端口

sudo iptables -D INPUT -p tcp --dport 8080 -j DROP

使用firewalld关闭端口

firewalld是CentOS 7+、RHEL 7+等系统默认的动态防火墙管理工具,支持区域(Zone)和服务的动态管理。

(1)临时关闭端口

# 关闭TCP端口8080(默认区域为public)
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload  # 重新加载防火墙使规则生效

参数说明:--zone=public指定区域(默认为public);--remove-port=8080/tcp移除TCP 8080端口;--permanent表示永久生效(若不加,仅临时生效,重启后失效)。

(2)查看已关闭端口规则

sudo firewall-cmd --list-ports  # 查看所有开放的端口
sudo firewall-cmd --list-all    # 查看区域所有规则(包含端口)

(3)重新开放端口

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

iptables与firewalld命令对比

操作场景 iptables命令 firewalld命令
临时关闭TCP端口8080 sudo iptables -A INPUT -p tcp --dport 8080 -j DROP sudo firewall-cmd --zone=public --remove-port=8080/tcp
永久关闭TCP端口8080 sudo iptables -A INPUT -p tcp --dport 8080 -j DROP + sudo service iptables save sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent + sudo firewall-cmd --reload
删除关闭规则 sudo iptables -D INPUT -p tcp --dport 8080 -j DROP sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent + sudo firewall-cmd --reload

通过终止进程关闭端口

如果端口已被某个进程占用,可通过终止该进程直接释放端口,实现物理关闭。

查找占用端口的进程

  • 使用netstat命令(需安装net-tools包):

    sudo netstat -tulnp | grep 8080  # 查看占用8080端口的进程

    输出示例:tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1234/java,其中1234为进程ID(PID),java为进程名。

  • 使用ss命令(推荐,iproute2包自带,性能更优):

    sudo ss -tulnp | grep 8080

终止进程

  • 正常终止(允许进程清理资源):
    sudo kill 1234  # 通过PID终止进程
  • 强制终止(进程无响应时使用):
    sudo kill -9 1234

验证端口是否释放

sudo netstat -tulnp | grep 8080  # 若无输出,则端口已释放

通过修改服务配置文件关闭端口

部分服务(如SSH、Apache、Nginx等)在启动时会绑定默认端口,通过修改其配置文件可永久禁用端口绑定。

linux 系统如何关闭端口

示例1:修改SSH服务端口(默认22)

  • 编辑SSH配置文件:
    sudo vim /etc/ssh/sshd_config

    找到Port 22,注释或删除该行,添加新端口(如2222):

    # Port 22
    Port 2222
  • 重启SSH服务:
    sudo systemctl restart sshd

示例2:修改Apache服务端口(默认80)

  • 编辑Apache配置文件:
    sudo vim /etc/apache2/ports.conf

    修改Listen 80Listen 8080(或其他端口)。

  • 编辑虚拟主机配置(若有):
    sudo vim /etc/apache2/sites-enabled/000-default.conf

    <VirtualHost *:80>改为<VirtualHost *:8080>

  • 重启Apache服务:
    sudo systemctl restart apache2

示例3:修改Nginx服务端口(默认80)

  • 编辑Nginx主配置文件:
    sudo vim /etc/nginx/nginx.conf

    修改listen 80;listen 8080;

  • 重启Nginx服务:
    sudo systemctl restart nginx

注意事项

  1. 避免误关闭关键端口:SSH(22)、HTTP(80)、HTTPS(443)等端口关闭后可能导致无法远程管理或服务中断,操作前建议确认备用访问方式(如控制台登录)。
  2. 防火墙规则优先级:iptables/firewalld规则按顺序匹配,建议将端口关闭规则添加到规则链末尾(-A),避免覆盖其他规则。
  3. 验证端口状态:关闭端口后,使用telnetnc测试外部访问是否被阻断:
    telnet 127.0.0.1 8080  # 若无法连接,则端口已关闭

相关问答FAQs

Q1:关闭端口后如何重新开放?
A:若通过防火墙关闭,只需反向操作(如iptables添加-j ACCEPT或firewalld添加--add-port);若通过终止进程关闭,需重新启动对应服务;若通过配置文件修改,需恢复原配置并重启服务,firewalld重新开放TCP 8080端口:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Q2:如何查看Linux系统中所有开放的端口?
A:可通过以下命令查看:

  • netstat -tulnp:显示所有TCP/UDP端口及对应进程(需安装net-tools);
  • ss -tulnp:推荐,性能更优,显示端口和进程信息;
  • lsof -i:列出所有网络连接及关联的进程。
    查看所有监听的TCP端口:

    sudo ss -tulpn | grep LISTEN

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37635.html

(0)
酷番叔酷番叔
上一篇 2025年10月7日 12:25
下一篇 2025年10月7日 12:38

相关推荐

  • Linux中如何创建孙进程?

    在Linux系统中,进程创建是操作系统管理的核心功能之一,而创建孙进程本质是通过两次fork()系统调用实现的,fork()是Linux中用于创建新进程的系统调用,它会复制当前进程(父进程)的副本,包括代码段、数据段、堆栈等资源,新创建的进程称为子进程,与父进程几乎完全相同,但拥有独立的PID(进程ID)和PP……

    2025年10月7日
    8000
  • Perl脚本首行为何报致命路径错误?

    在Linux系统中执行Perl脚本是常见的任务,Perl作为一种强大的脚本语言,广泛用于文本处理、系统管理和网络编程,以下是详细的操作指南:基础执行步骤编写Perl脚本创建一个新文件(hello.pl),使用文本编辑器写入以下内容:#!/usr/bin/perl 是Shebang行,指定Perl解释器路径(通过……

    2025年6月24日
    16100
  • linux下如何实现软连接吗

    Linux下,可以使用ln -s命令创建软连接。

    2025年8月9日
    14900
  • Linux网卡如何正确添加到网桥?

    在Linux网络管理中,网桥(Bridge)是一种工作在数据链路层的虚拟网络设备,功能类似于物理交换机,能够将多个网络接口(如物理网卡、虚拟网卡)连接在一起,并根据MAC地址转发数据帧,将网卡加入网桥是构建虚拟化环境(如KVM、Xen)、容器网络(如Docker、Kubernetes)或实现网络隔离与互通的常见……

    2025年8月22日
    11800
  • Linux如何退回主系统?

    Linux作为广泛使用的操作系统,常与虚拟机、双系统、远程连接等场景结合使用,用户在不同环境下可能需要“退回主系统”——即从当前Linux环境返回到默认的物理机操作系统、桌面环境或本地终端,本文将分场景详细说明具体操作方法,涵盖虚拟机、双系统、SSH连接及本地终端切换等常见场景,帮助用户高效、安全地完成系统切换……

    2025年9月9日
    13000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信