怎么给 CentOS 7 修改 SSH 端口

网上很多自动扫描脚本,一般都是针对默认端口的。经常 Forece 查看系统日志就会发现几百条尝试登录信息。所以为了自己服务器的安全着想,一般网站管理员都会更改默认的 SSH 端口。前几天弄的 Pi 也当然不例外,虽然没什么好黑的,不过既然设置了 DMZ ,就有可能被坏人自动嗅探了。能关闭的端口都尽量关闭了。

虽然说改变 SSH 端口会对安全有些帮助,但是如果坏人知道了你的服务器IP的话,那么他们可以轻易的用一些软件直接扫描你的开放端口。所以最安全的方法其实是使用证书和加密实现无密码登录。只允许已使用加密密钥的计算机使用 SSH 协议登录。或者将该信任的计算机的 IP 地址放到防火墙白名单中,来将防火墙配置为仅允许来自预定义计算机的 SSH 连接。其他任何东西都不会更好地增强您的服务器安全性。不过今天只是讲解如果更改端口,所以暂时不提以上两种方法。

一、备份 SSH 配置文件

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

二、修改 SSH 配置文件

vi /etc/ssh/sshd_config

默认的话,Port 22 这里是被注释掉的,把 # 去掉,但是不要删除这行。先保留原来的22端口,待新的SSH端口测试正常工作后再删掉原 Port 22 端口行。
隔行再添加一行 Port 新端口。

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
Port 23332
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

保存文件,在完成修改之前,不要退出登录。

三、增加 SElinux 端口

在 SSH 配置文件中,可能你会注意到一句话 If you want to change the port on a SELinux system, you have to tell SELinux about this change. 所以说,我们还需要添加 SElinux 端口。

sudo semanage port -a -t ssh_port_t -p tcp 23332

一般默认情况下执行以上命令会报错:semanage command not found,我们需要执行这条命令来安装 semanage:

sudo yum -y install policycoreutils-python

安装成功后,再次执行第一条命令,通过 SELinux 来允许新端口。

四、开放防火墙端口

sudo firewall-cmd --permanent --zone=public --add-port=23332/tcp

如果报错:FirewallD is not running,表示防火墙还没有开启,执行以下命令来开启防火墙:

systemctl enable firewalld
systemctl start firewalld

最后重新加载防火墙配置:

sudo firewall-cmd --reload

五、重启 SSH 服务

sudo systemctl restart sshd.service

最后可以用以下命令验证 SSH 现在是否在新端口上运行。

ss -tnlp | grep ssh
netstat -ntl

六、禁用 22 SSH 端口

最后不要断开该 SSH 连接,重新打开一个新客户端,然后用新端口建立SSH连接,测试可以正常后就可以移除22端口了。

再编辑 /etc/ssh/sshd_config 将Port 22 这一行直接删除或这一行前面加 # 注释掉然后再按前面的命令重启 SSHD 服务。

在防火墙中移除22端口

firewall-cmd --permanent --zone=public --remove-port=22/tcp

重新Reload防火墙

firewall-cmd --reload

七、防火墙命令附录

# 添加端口
firewall-cmd --permanent --zone=public --add-port=2244/tcp

# 删除端口
firewall-cmd --permanent --zone=public --remove-port=2244/tcp

# 查看所有打开端口
firewall-cmd --zone=public --list-ports

# 重载防火墙规则
firewall-cmd --reload