历史版本3 :端口占用检查与防火墙配置 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

部署运维平台报错:connection refused

报错语句:ERROR: 2022/05/18 17:33:07 finedb connect error:dial tcp 192.168.1.24:3306: connect: connection refused

部署运维项目报错:Server IP try to bind ports failed!

报错语句:Server IP try to bind ports 9114,9100,9200,9080,9070 failed!

1.2 原因分析

待部署的运维平台组件/运维项目组件容器,需要占用一些端口。

如果这些端口已被占用/没有开放,则无法成功部署,会出现以上报错。

1.3 解决方案

请依次检查以下三者:

1)检查该端口是否被服务器中其他进程占用

  • 如果端口被占用,则需要更换一个未被占用的端口,再检查新端口的下两项。

  • 如果端口未被占用,则需要检查该端口的下两项。

2)检查服务器防火墙是否放行端口

  • 如果服务器防火墙未开启,建议开启。

  • 如果服务器防火墙开启,需要开放所需端口。

  • 如果端口已开放,请检查下一项。

3)检查服务器安全组是否放行端口

  • 服务器安全组端口放行方式本文不作介绍,请根据你的服务器类型和厂商自行百度。

2. 检查端口占用情况编辑

本文提供多种方法检查Linux系统中的端口是否被其他进程占用。

需要注意的是,执行以下命令通常需要以root用户或具有足够权限的用户身份运行,以获取完整的进程信息。

2.1 使用netstat命令



命令语句

netstat -tuln | grep <端口号>

将 <端口号> 替换为您要检查的具体端口号

返回说明

这条命令将显示监听该端口的进程信息

如果有进程正在使用该端口,您将能够看到相关的输出

如果该端口未被占用,则无任何输出

示例

2.2 使用ss命令



命令语句

ss -tuln | grep <端口号>

将 <端口号> 替换为您要检查的具体端口号

返回说明

这条命令将显示监听该端口的进程信息

如果有进程正在使用该端口,您将能够看到相关的输出

如果该端口未被占用,则无任何输出

示例

2.3 使用lsof命令



命令语句

lsof -i :<端口号>

将 <端口号> 替换为您要检查的具体端口号

返回说明

这条命令将显示打开该端口的进程及其相关信息。

如果有进程正在使用该端口,您将能够看到相关的输出

如果该端口未被占用,则无任何输出

示例

3. 检查防火墙放行情况编辑

1)建议服务器防火墙长期启用。

2)建议开放且只开放必要的端口,防止不必要的网络暴露。

本文介绍两种常用的防火墙工具iptables和firewalld的配置指南。

3.1 firewalld

3.1.1 常用语句



检查防火墙状态systemctl status firewalld
启动防火墙systemctl start firewalld
关闭防火墙systemctl stop firewalld
防火墙开机启动
systemctl enable firewalld
防火墙开机禁用systemctl disable firewalld
查看所有放行端口firewall-cmd --zone=public --list-ports
查看指定端口是否放行firewall-cmd --zone=public --query-port=<端口>/<协议>
放行指定端口firewall-cmd --zone=public --add-port=<端口>/<协议> --permanent
取消放行指定端口firewall-cmd --zone=public --remove-port=<端口>/<协议> --permanent
更新防火墙规则firewall-cmd --reload

3.1.2 示例

本示例介绍如何开放防火墙并放行8080端口

1)启动防火墙

  • 检查防火墙状态:systemctl status firewalld。返回值为「not running」,说明未启动防火墙

  • 启动防火墙:systemctl start firewalld

  • 再次检查防火墙状态:systemctl status firewalld。返回值为「running」,说明已启动防火墙

2)开放8080端口

  • 检查端口是否放行:firewall-cmd --zone=public --query-port=8080/tcp。返回值为「no」,说明未放行8080端口

  • 开放端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent。返回值为「success」,说明已放行8080端口

  • 更新防火墙规则:firewall-cmd --reload。返回值为「success」,说明已更新规则

  • 再次检查端口是否放行:firewall-cmd --zone=public --query-port=8080/tcp。返回值为「yes」,说明已放行8080端口