在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粘贴快捷键为何不同?

    图形界面(GUI)粘贴适用于 GNOME、KDE、XFCE 等桌面环境:通用快捷键:Ctrl + V适用于大多数图形应用(文本编辑器、浏览器、办公软件等),鼠标中键粘贴:选中文本后,直接点击鼠标滚轮(中键) 可快速粘贴(源自 X Window 系统的剪贴板设计),终端(Terminal)粘贴不同终端模拟器的行为……

    2025年7月29日
    4100
  • linux如何看系统语言

    Linux 中,可通过 locale 命令查看系统语言相关信息,如执行 locale

    2025年8月16日
    3300
  • 在Linux中获取主机名的正确方法是什么?命令步骤

    在Linux系统中,主机名(Hostname)是用于标识网络中一台设备的唯一名称,它不仅用于本地系统识别,还在网络通信、服务配置、日志管理等场景中发挥重要作用,获取Linux主机名的方法多样,既可以通过简单的命令行工具快速查看,也可以通过读取系统配置文件或编程接口实现,本文将详细介绍Linux获取主机名的各种方……

    2025年9月21日
    2400
  • linux如何创建sql脚本

    Linux 中,可使用文本编辑器(如 vi、nano)编写 SQL 语句并保存为 .

    2025年8月17日
    2500
  • Linux如何支持GBK编码?系统配置与使用方法详解

    Linux系统默认使用UTF-8编码,这与Windows系统中常用的GBK编码存在差异,因此在Linux环境下处理GBK编码文件或程序时,需要进行一系列配置以确保正确显示和交互,以下是Linux支持GBK编码的详细方法,涵盖系统环境、文件系统、应用程序及字体等多个方面,系统环境配置:设置GBK localelo……

    2025年9月27日
    1600

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信