前言
近年来网络安全一直是国家和社会关注的重点,尤其是一些科研院所和政府机构的内网包含着极高价值的研究成果或机密资料,导致常常遭到境外势力的网络攻击,如果关注一些游戏方面的资讯你可能常常听闻某某游戏厂商尚未面世的游戏制作资料或是代码文件遭到黑客入侵盗取并以公布设计细节为由勒索巨款,说到这里小伙伴是不是会觉得被黑客入侵勒索的都是有价值的目标,作为个人使用的服务器,只是部署网站搭建博客而已,表面上看来毫无攻击价值可言嘛,其实不然,个人服务器如果被攻击入侵轻则成为肉鸡,被吃掉所有的CPU资源沦为无情的挖矿机器亦或被用于进行DDos攻击在短时间造成巨大流量损失,重则网站等服务数据被加密谋求勒索钱财,不想出圆子又没有容灾备份的话,很可能面临白手起家的局面!
ok以上只是背景介绍,真正让我上头的是今天起床SSH登录发现控制台蹦出了几行文字提示:
Last failed login: Sun Feb 10 00:33:52 CST 2024 from 47.98.197.157 on ssh:notty
There were 1644 failed login attempts since the last successful login.
难他天!不出意外的话多半是出意外了,这种情况应该是服务器IP暴露导致被扫描到了SSH端口,并对端口进行了root账号的弱口令暴力破解,好在密码扛住了没有倒下,很难想通的是我域名还在备案,连博客都还在装修阶段,好歹让我打扫干净屋子再请客吧😭
本着居安思危、未雨绸缪,(好吧其实是亡羊补牢)的思想,以下将对个人云服务器(VPS)进行一些必要的安全配置同时也供小伙伴们参考(~ ̄▽ ̄)~*
测试环境
阿里云ECS服务器
系统为Alibaba Cloud Linux (类似CentOS)
使用其他云服务厂商及其他Linux发行系统的小伙伴可以参考配置,大部分命令应该是相同的。
安全清单
修改SSH端口号
此处我以阿里云ECS为例,其他厂商应该也大致如此
在阿里云ECS控制台--网络与安全--安全组 配置端口
点击手动添加,端口范围填写你要修改成的端口号,最好选择20000以上的空闲端口号,可以降低被扫描到的几率,协议类型、优先级、授权对象等保持与其他规则一致即可。
修改SSH配置文件
root执行
vim /etc/ssh/sshd_config
找到 # Port 22,在下方插入新的端口号,如下
# 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 23333
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
重启SSH服务,使配置生效
systemctl restart sshd
设置防火墙开放端口
root执行
firewall-cmd --zone=public --add-port=25533/tcp --permanent #作用域是public,开放tcp协议的25533端口,permanent一直有效
firewall-cmd --reload #重启firewall防火墙服务
测试
此时在ssh客户端通过旧的22端口已经无法连接服务器,需在属性配置中更改为新端口号方可正常连接。
使用密钥登陆
一般来说,密钥登陆由于使用了非对称加密算法,暴力破解的难度大大提升,安全性相对密码登录来说更值得信赖,此外还可以设置额外的私钥密码保护,相当于双重保险,即使私钥文件意外泄漏或是被他人拷贝,别人也无法顺利登陆,再者密钥相对于密码来说定期更新更具有可行性,毕竟一串具有相当复杂度甚至是包含精神寄托的密码要想定期更新首先就会带来一定记忆和心理压力不是,而采用密钥文件就全无这种纠结啦~
ok进入正题:
在服务器上生成密钥对
首先使用密码登录至你打算用密钥登录的账户,执行:
使用ecdsa算法生成密钥对,也可以是rsa/ed25519等
ssh-keygen -t ecdsa
回车后如下所示
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa):
# 设置密钥存放路径,此处使用默认回车即可
Enter passphrase (empty for no passphrase):
# 设置密钥加密密码,提供双重保险强烈建议设置
Enter same passphrase again:
# 确认密码
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
# over~
接下来cd至密钥保存路径,即上文默认路径
cd /root/.ssh/
将公钥写入授权密钥文件
cat id_ecdsa.pub >> authorized_keys
设置文件和目录权限
chmod 600 authorized_keys
chmod 700 ~/.ssh
利用FTP/云厂商workbench/宝塔等从服务器/root/.ssh/上下载私钥文件即id_ecdsa
配置SSH文件
vim /etc/ssh/sshd_config
三个主要的改动是
PermitRootLogin without-password # 要求root用户只能用密钥登录
PubkeyAuthentication yes # 允许使用公钥验证
PasswordAuthentication no # 禁止密码登陆(非必须看个人)
保存并重启SSH服务
service sshd restart
测试
此时在SSH客户端通过密码已经无法登录,需要导入私钥及输入加密密码才能登录,由于大家使用的SSH客户端可能不同(我用的Xshell哈哈),此处导入方式大家自行探索~
日志
- 2024-02-18:初稿