如何更改SSH端口?

常见问题

如何更改SSH端口?

2025-12-28 05:00


全面指南:如何安全

                                            

全面指南:如何安全更改SSH端口以强化服务器安全

SSH(Secure Shell)是管理Linux服务器的核心工具,但默认的22端口常常成为攻击者的首要目标。更改SSH端口是一项基础而关键的安全加固措施,能有效减少自动化攻击和暴力破解尝试。本文将深入解析更改SSH端口的完整步骤、注意事项及后续安全配置,帮助您构建更坚固的服务器防线。

为什么需要更改SSH端口?

根据网络安全机构统计,部署在默认22端口的服务器平均每天会遭受数千次自动化扫描和登录尝试。虽然SSH本身加密强度很高,但暴露在默认端口仍会带来风险:

  • 减少噪音攻击:大量自动化脚本仅扫描22端口,更改端口可避开这些低级攻击
  • 增加攻击成本:攻击者需要额外进行端口扫描才能定位服务
  • 防御定向攻击:针对特定组织的攻击往往预设默认端口
  • 合规性要求:部分安全标准明确建议修改默认服务端口

详细操作步骤(以Ubuntu/CentOS为例)

1. 准备工作与端口选择

选择新端口号:避免使用常见端口(如2222、22222),建议在1024-65535间选择非标准端口。可检查当前使用情况:

netstat -tulpn | grep LISTEN
ss -tulpn

防火墙预先配置:务必先在防火墙开放新端口,再修改SSH配置,防止被锁在服务器外。

2. 修改SSH配置文件

使用vim或nano编辑配置文件:

sudo vim /etc/ssh/sshd_config

找到并修改以下行(若不存在则添加):

#Port 22  # 注释原端口
Port 23456  # 新增端口,例如使用23456

专业提示:可暂时保留22端口并新增端口,测试成功后再关闭默认端口:

Port 22
Port 23456

3. 配置防火墙规则

UFW防火墙(Ubuntu)

sudo ufw allow 23456/tcp
sudo ufw deny 22/tcp  # 可选,明确拒绝22端口

FirewallD(CentOS 7+)

sudo firewall-cmd --permanent --add-port=23456/tcp
sudo firewall-cmd --reload

iptables(通用)

sudo iptables -A INPUT -p tcp --dport 23456 -j ACCEPT
# 保存规则(根据发行版选择相应命令)

4. 测试与验证

重启SSH服务前,建议保持现有连接并开启新会话测试:

# 在新终端测试连接
ssh -p 23456 username@server_ip

# 确认连接成功后,重启SSH服务
sudo systemctl restart sshd  # 或 service ssh restart

# 验证服务状态
sudo systemctl status sshd
sudo ss -tlnp | grep sshd

高级安全配置建议

1. 结合Fail2Ban防护

修改端口后,配置Fail2Ban监控新端口:

# 编辑jail.local
sudo vim /etc/fail2ban/jail.local

# 添加SSH自定义端口配置
[sshd-custom]
enabled = true
port = 23456
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

2. 使用密钥认证替代密码

在sshd_config中进一步强化:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no

3. 端口敲门(Port Knocking)方案

隐藏SSH端口的进阶技术,仅当按特定顺序访问预设端口后才临时开放SSH端口。

常见问题排错

连接失败排查步骤:

  1. 检查防火墙状态:sudo ufw statussudo firewall-cmd --list-all
  2. 确认SSH服务监听新端口:sudo netstat -tulpn | grep 23456
  3. 查看SSH日志:sudo tail -f /var/log/auth.log
  4. 测试本地连接:ssh -p 23456 localhost

紧急恢复方案

如果修改后无法连接,且没有保留现有会话:

  • 通过VNC或控制台直接登录服务器
  • 云服务器通常提供网页控制台访问
  • 临时恢复22端口访问并检查配置语法

自动化脚本示例

对于需要批量修改的场景,可使用以下脚本模板:

#!/bin/bash
NEW_PORT="23456"
CONFIG_FILE="/etc/ssh/sshd_config"

# 备份原配置
cp $CONFIG_FILE "${CONFIG_FILE}.bak_$(date +%Y%m%d)"

# 修改端口配置
sed -i "s/^#Port 22/Port $NEW_PORT/" $CONFIG_FILE
if ! grep -q "^Port $NEW_PORT" $CONFIG_FILE; then
    echo "Port $NEW_PORT" >> $CONFIG_FILE
fi

# 配置防火墙(适配不同系统)
# [此处添加防火墙命令]

echo "请在新终端测试:ssh -p $NEW_PORT $(hostname)"
echo "确认成功后,重启SSH服务:systemctl restart sshd"

总结与最佳实践

更改SSH端口是服务器安全加固的第一步,但不应是唯一措施。建议形成完整的安全策略:

  1. 分层防御:结合防火墙、Fail2Ban、密钥认证等多层保护
  2. 定期审计:每月检查SSH日志和登录记录
  3. 最小权限原则:限制用户权限和访问IP范围
  4. 及时更新:保持SSH服务和系统补丁最新
  5. 监控告警:设置异常登录尝试的实时告警

通过系统性地实施这些措施,您的服务器将能有效抵御大多数自动化攻击,为业务数据提供坚实的安全基础。记住,安全是一个持续的过程,而非一次性的配置任务。


标签:
  • SSH端口修改
  • 服务器安全
  • Linux管理
  • 莱卡云