在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下JDK安装遇难题?

    准备工作检查现有Java环境终端执行:java -version若返回版本信息(如OpenJDK),需决定是否保留或卸载旧版本,卸载旧版本(可选)对于基于Debian的系统(如Ubuntu):sudo apt remove openjdk-* # 移除所有OpenJDK基于RPM的系统(如CentOS):sud……

    2025年7月12日
    7800
  • linux如何跳板到其他机器

    Linux 中,可通过 SSH 命令结合相关参数,利用跳板机登录到其他

    2025年8月10日
    5300
  • 如何不中断服务?

    推荐方法:使用 logrotate 自动轮替日志适用场景:生产环境长期维护原理:Linux 内置的 logrotate 工具通过定时任务(cron)自动压缩、归档或删除旧日志,避免手动操作风险,操作步骤:编辑配置文件 sudo vim /etc/logrotate.conf # 全局配置sudo vim /et……

    2025年7月31日
    6200
  • 如何修改linux系统参数

    Linux系统参数可通过编辑配置文件(如/etc/sysctl.

    2025年8月13日
    5300
  • 吸引流量?

    查看文件行结构(行结束符类型)Linux/Unix系统使用 LF(\n) 作为行结束符,Windows使用 CRLF(\r\n),通过以下命令识别:file 文件名 # 查看文件类型和行结束符cat -A 文件名 # 显示行结束符(LF显示为`$`,CRLF显示为`^M$`)dos2unix -n 原文件 新文……

    2025年6月21日
    8100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信