网上很多自动扫描脚本,一般都是针对默认端口的。经常 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