在Linux系统中,端口号是服务与外部通信的入口,修改端口号通常出于安全防护、避免端口冲突或满足特定业务需求等目的,不同服务的端口配置方式存在差异,本文将详细介绍常见Linux服务(如SSH、Apache、Nginx、MySQL等)的端口修改方法,涵盖配置文件编辑、服务重启、防火墙配置及SELinux策略调整等关键步骤,并附上通用端口检查技巧和注意事项。
修改SSH服务端口
SSH(Secure Shell)是Linux远程管理的核心服务,默认使用22端口,修改步骤如下:
-
编辑SSH配置文件
打开/etc/ssh/sshd_config
文件(需root权限),找到#Port 22
行,取消注释并修改为目标端口(如2222):sudo vim /etc/ssh/sshd_config Port 2222 # 将22替换为自定义端口(建议1024-65535)
若需同时保留22端口作为备用,可添加多行
Port
指令,但需确保新端口未被占用。 -
重启SSH服务
修改后需重启服务使配置生效:sudo systemctl restart sshd # CentOS/RHEL sudo systemctl restart ssh # Ubuntu/Debian
-
防火墙配置
若使用firewalld
(CentOS/RHEL),开放新端口并移除旧端口(可选):sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --permanent --remove-port=22/tcp # 若禁用22端口 sudo firewall-cmd --reload
若使用
ufw
(Ubuntu/Debian):sudo ufw allow 2222/tcp sudo ufw deny 22/tcp # 可选
-
SELinux策略调整(CentOS/RHEL需开启SELinux时)
若系统启用SELinux,需添加新端口到SSH策略:sudo semanage port -a -t ssh_port_t -p tcp 2222
(若
semanage
命令未安装,需执行sudo yum install policycoreutils-python
)
修改Apache/Nginx Web服务端口
Apache服务
- 配置文件位置:主配置文件为
/etc/apache2/ports.conf
(Ubuntu/Debian)或/etc/httpd/conf/httpd.conf
(CentOS/RHEL),虚拟主机配置通常在/etc/apache2/sites-available/000-default.conf
或/etc/httpd/conf.d/vhost.conf
。 - 修改步骤:
编辑ports.conf
,找到Listen 80
和Listen 443
(若启用HTTPS),修改为目标端口(如8080和8443):sudo vim /etc/apache2/ports.conf Listen 8080 Listen 8443
若虚拟主机中指定了端口(如
<VirtualHost *:80>
),需同步修改为<VirtualHost *:8080>
。 - 重启服务:
sudo systemctl restart apache2 # Ubuntu/Debian sudo systemctl restart httpd # CentOS/RHEL
Nginx服务
- 配置文件位置:主配置文件为
/etc/nginx/nginx.conf
,虚拟主机配置在/etc/nginx/conf.d/
或/etc/nginx/sites-available/
。 - 修改步骤:
编辑nginx.conf
或虚拟主机配置文件,找到listen 80
和listen 443
,修改为目标端口(如8080和8443):sudo vim /etc/nginx/nginx.conf server { listen 8080; server_name localhost; ... }
- 重启服务:
sudo systemctl restart nginx
修改数据库服务端口
MySQL/MariaDB
- 配置文件位置:
/etc/my.cnf
(CentOS/RHEL)或/etc/mysql/my.cnf
(Ubuntu/Debian),或/etc/mysql/conf.d/mysqld.cnf
。 - 修改步骤:
在配置文件中添加或修改port
指令(默认3306):sudo vim /etc/my.cnf [mysqld] port = 3307
- 重启服务:
sudo systemctl restart mysqld # CentOS/RHEL sudo systemctl restart mysql # Ubuntu/Debian
- 客户端连接:需指定新端口,如
mysql -u root -p -P 3307
。
PostgreSQL
- 配置文件位置:
/var/lib/pgsql/data/postgresql.conf
(CentOS/RHEL)或/etc/postgresql/版本号/main/postgresql.conf
(Ubuntu/Debian)。 - 修改步骤:
修改port = 5432
为目标端口(如5433):sudo vim /var/lib/pgsql/data/postgresql.conf port = 5433
- 重启服务:
sudo systemctl restart postgresql
通用端口检查与冲突避免
修改端口前,需确保目标端口未被其他服务占用,可通过以下命令检查:
# 查看所有监听端口及进程 netstat -tulnp | grep :端口号 ss -tulnp | grep :端口号 # 推荐使用(netstat替代工具) lsof -i :端口号 # 查看占用端口的进程PID
若端口被占用,需更换端口或停止占用进程(如sudo kill PID
)。
常见服务端口修改对照表
服务名称 | 默认端口 | 修改配置文件位置 | 重启命令 |
---|---|---|---|
SSH | 22 | /etc/ssh/sshd_config | systemctl restart sshd |
Apache HTTP | 80 | /etc/apache2/ports.conf | systemctl restart apache2 |
Apache HTTPS | 443 | /etc/apache2/ports.conf | systemctl restart apache2 |
Nginx HTTP | 80 | /etc/nginx/nginx.conf | systemctl restart nginx |
Nginx HTTPS | 443 | /etc/nginx/nginx.conf | systemctl restart nginx |
MySQL | 3306 | /etc/my.cnf | systemctl restart mysqld |
PostgreSQL | 5432 | /var/lib/pgsql/data/postgresql.conf | systemctl restart postgresql |
相关问答FAQs
Q1:修改SSH端口后无法远程连接,可能的原因有哪些?如何解决?
A:常见原因包括:
- 防火墙未开放新端口:检查
firewalld
或ufw
是否允许目标端口(如sudo firewall-cmd --list-ports
)。 - SELinux阻止连接:若为CentOS/RHEL且开启SELinux,需执行
sudo semanage port -a -t ssh_port_t -p tcp 新端口
。 - 服务未重启:确认SSH服务已重启(
systemctl status sshd
)。 - 客户端连接错误:确保客户端使用
ssh -p 新端口 用户@IP
连接,而非默认22端口。
Q2:如何查看Linux系统中某个端口是否被占用及占用进程?
A:可通过以下命令实现:
- 使用
ss
命令(推荐):ss -tulnp | grep :端口号
,例如ss -tulnp | grep :8080
,显示占用8080端口的进程ID、名称及详细信息。 - 使用
netstat
命令:netstat -tulnp | grep :端口号
,功能与ss
类似,但ss
为netstat的替代工具,性能更优。 - 使用
lsof
命令:lsof -i :端口号
,例如lsof -i :3306
,显示占用3306端口的进程PID、用户及文件描述符信息。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30092.html