个人博客刚部署,隔壁开发还没开始馋,就有人来撬门(下)

简介: 本文专门用于记录服务器运行过程中遇到的 安全问题及应对之法。

③ 设置SSH秘钥登录


如果你用过 Git的SSH免密登录,那这个对你来说就很简单了,SSH的连接 原理及过程如下:


  • A → B 发送连接请求;
  • B 收到请求,将 自己的公钥 发给 → A;
  • A 收到 公钥,用 公钥加密B的登录密码,生成 加密密文 发给 → B;
  • B 收到 加密密文,用 自己的私钥解密信息,然后与B的登录密码做比较,正确 → 允许A登录;


然后此处用到的是 SSH免密登录,原理及过程如下:


  • A → B 发送连接请求,并带上 自己的公钥
  • B 收到 A的公钥,检查机器上的 授权列表是否包含A的公钥,存在,
    生成一个 随机数,用 公钥加密,生成 加密密文 发送 → A;
  • A 收到 加密密文,用 私钥解密,得到的 解密结果 发送 → B
  • B 收到 A发来的结果,与之前生成的 随机数 作比较,一致 → 允许A连接;


了解清楚原理与过程,就很easy了,云服务器先设置下 允许秘钥认证,打开 /etc/ssh/sshd_config,找到如下内容,去掉前面的 #


# 允许密钥认证
PubkeyAuthentication yes 
# 默认公钥存放位置
AuthorizedKeysFile .ssh/authorized_keys 


保存后,重启sshd服务:


# 重启ssh服务
systemctl restart sshd
# 附:其他ssh服务相关命令
rpm -qa|grep -E "openssh"   # 查看是否安装了全部的ssh服务
systemctl status sshd   # 查看ssh服务状态
systemctl start sshd    # 启动ssh服务
systemctl stop sshd     # 停止ssh服务


接着 本地PCGit Bash 命令行生成 一对密钥


# 创建.ssh目录并进入
mkdir ~/.ssh
cd ~/.ssh
# 生成密钥,回车两次分别跳过 (密钥保存位置、认证密码)
ssh-keygen -t rsa -b 2048


接着可以在 ~/.ssh 目录下看到生成的 公钥(id_rsa.pub)私钥(id_rsa) 。 再接着通过 ssh-copy-id 命令把公钥复制到远程主机 对应账户下authorized_keys 文件上.


ssh-copy-id julia@xxx.xxx.xxx.xxx -p 1024


网络异常,图片无法展示
|


配置成功后,此时使用ssh即可直接登录:


ssh julia@xxx.xxx.xxx.xxx -p 1024


来到.ssh路径下可以看到 authorized_keys 文件,内容也是本地PC的公钥。


网络异常,图片无法展示
|


如果删除信任公钥,删除文件里对应内容即可,秘钥测试登录成功后,可以禁用密码登录,提高服务器的安全性,依然是修改 /etc/ssh/sshd_config


PasswordAuthentication no


重启下sshd服务,然后就不能使用密码登录了~


附:WinSCP SSH 秘钥登录服务器配置,点 高级,然后选择SSH → 验证 → 密钥文件



网络异常,图片无法展示
|


然后选中自己的私钥,会提示转换格式,确定,保存就好


网络异常,图片无法展示
|


网络异常,图片无法展示
|


接着,直接登录,弹出下述对话框,点是,后续登录就不用输入密码了。


网络异常,图片无法展示
|


④ 安装DenyHosts


描述:(官网:denyhosts.sourceforge.net/)


基于Python编写,用于防止SSH暴力破解的开源软件,通过对SSH的日志文件

/var/log/secure 进行分析,查找所有尝试登录,过滤出成功与失败的尝试。

记录所有尝试登录失败的用户名与主机,如果超过阈值,则记录主机。


保持对每个登录失败用户的跟踪,保持对每个可疑的登录进行跟踪(虽登录成功,

但存在很多次失败记录),将可疑地址的主机加入到 etc/hosts.deny 文件中。


下载安装


# 下载
wget http://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
# 解压
tar -zxvf DenyHosts-2.6.tar.gz -C /usr/local/bin
# 进入解压文件夹
cd /usr/local/bin/DenyHosts-2.6
# 安装Python2
yum install python2 -y
# 编译安装setup.py
python2 setup.py install
cd /usr/share/denyhosts/    
# 配置文件
cp denyhosts.cfg-dist denyhosts.cfg    
# 启动文件
cp daemon-control-dist daemon-control
# 添加root权限
chown root daemon-control
# 修改为可执行文件
chmod 700 daemon-control 
# 接着就可以直接启动
./daemon-control start
# 注:如启动报错/usr/bin/env: python: No such file or directory
# 可通过下述命令设置系统默认的Python版本
alternatives --set python /usr/bin/python2
# 还可以设置为开机自启动
cd /etc/rc.d/init.d/
ln -s /usr/share/denyhosts/daemon-control denyhosts
chkconfig --add denyhosts
chkconfig denyhosts on 
chkconfig --list denyhosts


部分配置文件内容说明 (vim /usr/share/denyhosts/denyhosts.cfg):


Tips:w代表周,d代表天,h代表小时,s代表秒,m代表分钟


配置 描述
SECURE_LOG = /var/log/secure ssh日志文件
HOSTS_DENY = /etc/hosts.deny 禁止访问主机IP文件
PURGE_DENY = 4w 过多久后清除已阻止IP
BLOCK_SERVICE = sshd denyhosts要阻止的服务名
DENY_THRESHOLD_INVALID = 3 允许无效用户登录失败的次数
DENY_THRESHOLD_VALID = 10 允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 6 允许ROOT用户登录失败的次数
PURGE_THRESHOLD = 某个IP最多被解封几次,永久封禁


以后查看host.deny文件就可以找到攻击ip的记录了:


cat /etc/hosts.deny
cat /etc/hosts.deny | wc -l


立马就有981条记录了:


网络异常,图片无法展示
|


一个建议:添加信任IP,把自己常用的IP加到 /etc/hosts.allow 文件中


sshd: xxx.xxx.*.*: allow


以防自己哪天多次输错密码,访问不了服务器~


参考文献:



相关文章
|
数据可视化 数据挖掘
【数据分析与可视化】对图像进行SVD分解并重构图像实战(附源码)
【数据分析与可视化】对图像进行SVD分解并重构图像实战(附源码)
564 0
|
数据采集 自然语言处理 程序员
ChatGPT 调教日记(一):Markdown 解析器
ChatGPT 调教日记(一):Markdown 解析器
442 0
|
Python
Matplotlib 安装
Matplotlib 安装
365 3
|
Java Kotlin 索引
Kotlin学习教程(三)
前面介绍了基本语法和编码规范后,接下来学习下基本类型。 在Kotlin中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数和属性。 一些类型可以有特殊的内部表示——例如, 数字、字符和布尔值可以在运行时表示为原生类型值,但是对于用户来说,它们看起来就像普通的类。 在本节中,我们会描述Kotlin中使用的基本类型: 数字、字符、布尔值、数组与字符串。
332 0
|
算法 C语言
[C语言]Pow函数的实现
[C语言]Pow函数的实现
533 0
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
1156 0
|
安全 中间件 Shell
AWD的那些事
AWD的那些事
657 0
|
安全 数据安全/隐私保护 微服务
微服务 Token 鉴权设计:一场守护系统安全的惊心动魄之战,你敢应战吗?
【8月更文挑战第29天】在微服务架构中,Token鉴权设计至关重要,它通过在客户端与服务器间传递包含用户身份和权限信息的Token来确保系统安全。合理的Token鉴权能有效防止非法访问,保护数据安全。设计时需考虑Token的有效期、刷新机制及加密算法等,以提升安全性。随着技术发展,持续优化鉴权机制对于满足复杂的安全需求至关重要。
394 0
|
Kubernetes 关系型数据库 API
Zalando Postgres Operator 快速上手
Zalando Postgres Operator 快速上手
857 0

热门文章

最新文章