在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系统如何高效查看和分析log文件内容?

    在Linux系统中,日志文件是记录系统运行状态、服务运行情况、用户操作及错误信息的重要文件,通过查看日志可以快速定位和解决问题,Linux日志文件通常存储在/var/log/目录下,不同类型的日志会分类存储,如系统日志、应用日志、安全日志等,本文将详细介绍Linux查看日志文件的常用命令、工具及场景化应用,帮助……

    2025年8月25日
    24800
  • Linux移动文件夹怎样操作更安全高效?

    在Linux中,使用mv命令移动文件夹,操作前确认目标路径存在,使用-i选项避免覆盖,-v查看详情,注意权限要求,移动系统或重要目录前建议备份。

    2025年7月16日
    10000
  • linux编辑后如何保存退出

    Linux 中编辑后,通常按 Esc 键退出编辑模式,然后输入

    2025年8月17日
    11300
  • linux如何删除变量

    在Linux系统中,变量是存储数据值(如字符串、数字等)的容器,用于简化命令操作、配置环境参数等,根据作用范围和使用场景,Linux变量可分为局部变量、环境变量、只读变量和数组变量等类型,当变量不再需要时,及时删除可以避免内存占用、防止变量污染或配置冲突,本文将详细介绍Linux中不同类型变量的删除方法、注意事……

    2025年9月17日
    7600
  • 如何修改Linux系统的PATH环境变量?

    在Linux系统中,PATH是一个至关重要的环境变量,它定义了系统在执行命令时会搜索可执行文件的目录列表,当用户在终端输入一个命令(如ls、cd)时,系统会按照PATH中指定的目录顺序依次查找对应的可执行文件,找到后即执行,若所有目录均未找到,则会提示“command not found”,当需要运行自定义脚本……

    2025年9月9日
    7200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信