Ubuntu的SSH安全配置,查看SSH登录日志文件,修改默认端口,UFW配置防火墙,禁止root用户登录,禁用密码登陆,使用RSA私钥登录,使用 Fail2ban 工具,使用两步验证(2FA)

简介: Ubuntu的SSH安全配置,查看SSH登录日志文件,修改默认端口,UFW配置防火墙,禁止root用户登录,禁用密码登陆,使用RSA私钥登录,使用 Fail2ban 工具,使用两步验证(2FA)

环境是Ubuntu 22.04 LTS

查看登录日志文件

sudo vim /var/log/auth.log

不出意外会看到很多类似如下的日志

Failed password for root from 183.146.30.163 port 22537 ssh2
Failed password for invalid user admin from 183.146.30.163 port 22545 ssh2
Invalid user tester from 101.254.217.219 port 56540
pam_unix(sshd:auth): check pass; user unknown
pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.61.8.34

然后可以统计有多少人在暴力破解root密码错误登录,展示错误次数和ip

sudo grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

因为腾讯云还有个默认用户Ubuntu,也可以一起看看,或是查看一下自己其他用户的错误登录

sudo grep "Failed password for ubuntu" /var/log/auth.log | awk '{print $11}' | sort | uniq -c  | sort -nr | more

统计有多少暴力猜用户名的

sudo grep "Failed password for invalid user" /var/log/auth.log | awk '{print $13}' | sort | uniq -c | sort -nr | more

这台才买回来3天就被扫了500多次,东西都还都没上线就被扫了这么多次emmm

修改SSH的默认端口

在ECS上修改的时候要多留意一下,小心没改好再把自己拒绝在外面。

修改后不要退出当前的 ssh 链接,大多数 Linux 发行版重启 ssh 服务并不会中断当前已经建立的 ssh 连接。另外开个窗口去重新连接 ssh 服务,如果遇到问题,还可以在原来的 ssh 连接下修改和恢复。

也可以让SSH同时工作在22和新设定的端口下,等测试能连接到新端口后再将22端口注释掉。

如果操作不慎丢失了ssh连接,可以尝试使用云平台提供的控制台登录

防火墙设置

Ubuntu系统上默认装有了UFW(Uncomplicated Firewall)来配置防火墙。它们之间的关系是 netfilter-->iptables-->[ ufw / firewall ] 。ufw / firewall 是用人性化的语言配置规则并转化为iptables的规则语法。iptables 是一个通过控制 Linux 内核的 Netfilter 模块来管理网络数据包的流动与转送的应用软件,其功能包括不仅仅包括防火墙的控制出入流量,还有端口转发等等。

检查UFW状态

sudo ufw status verbose

verbose参数可不加。当防火墙处于关闭状态时只会显示inactive

UFW默认情况下允许所有的出站连接,拒绝所有的入站连接。

启用UFW防火墙日志

sudo ufw logging on
sudo ufw logging medium #sudo ufw logging low|medium|high

日志文件在/var/log/ufw.log

在防火墙开放SSH端口:

sudo ufw allow ssh
sudo ufw allow 2233/tcp

UFW通过 /etc/services 知道ssh服务使用的端口默认为22

开启UFW:

sudo ufw enable

在系统修改后记得去ECS控制台(比如这台是腾讯云)防火墙里面开放想要设置的端口和关闭默认的22端口。

(用了UFW这种类似于前端的工具后,在不是非常清楚每条命令都是在做什么以及有什么效果那就不要乱改iptables,尤其是不要iptables -F清除全部规则)(不推荐)直接使用iptables配置防火墙的方法:

iptables -A INPUT -p tcp -m tcp --dport 2233 -j ACCEPT 然后保存和重启iptables防火墙 service iptables save 和 service iptables restart

修改SSH的默认端口

sudo vim /etc/ssh/sshd_config

把 # Port 22 修改为 Port 2233

最好使用1024到65535之间的一个别人猜不到的端口号

重启ssh服务:

sudo /etc/init.d/ssh restart    #或    sudo service ssh restart

查看SSH侦听(监听)端口:

sudo netstat -tunlp | grep ssh

UFW删除规则:

sudo ufw status numbered #查看所有规则的规则号
sudo ufw delete 2 #直接删除规则号对应的规则即可

UFW有两种方式删除防火墙规则,既可以通过规则号删除,也可以通过实际规则删除,通过规则号删除更容易。因为UFW默认会管理IPV6所以会既有ipv6又有ipv4,需要删除2个。

禁止SSH的root用户登录

修改 /etc/ssh/sshd_config 文件

首先创建一下文件的备份

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

禁止以root用户身份通过 SSH 登录

PermitRootLogin no

设置SSH单次登录限制

LogLevel INFO        #将LogLevel设置为INFO,记录登录和注销活动
MaxAuthTries 3        #限制单次登录会话的最大身份验证尝试次数
LoginGraceTime 20    #缩短单次的登录宽限期,即ssh登录必须完成身份验证的时间 单位是秒

重启ssh服务 sudo service ssh restart

禁用密码登陆,使用RSA私钥登录

ssh-keygen #在客户端生成密钥
ssh-copy-id myserver1 #将公钥添加至服务端

还需要配置服务端

sudo vim /etc/ssh/sshd_config
PasswordAuthentication no #禁止密码认证
PermitEmptyPasswords no #禁止空密码用户登录

重启ssh服务 sudo service ssh restart

使用 Fail2ban

Ubuntu 16.04 系统源里带有 denyhosts ,到了Ubuntu 20.04默认不再包含。DenyHosts现在几乎不再更新了,所以使用Fail2ban 工具来缓解暴力密码攻击

检查是否安装了特定软件包

apt-cache search denyhosts
apt-cache search fail2ban

使用 sudo apt list --installed | grep denyhosts 来进行搜索会有警告 apt does not have a stable CLI interface. 因为apt 的输出是为用户(人)设计的,并非总能被其它命令行工具解析,比如它会有进度条和颜色等交互界面,而这个进度条会影响其它命令行工具解析它的输出。因此不要在脚本中使用apt命令,应该用apt-get、apt-cache等命令进行替换。

安装fail2ban

sudo apt-get update
sudo apt-get install fail2ban

配置fail2ban

配置文件在 /etc/fail2ban/jail.conf 。 在配置文件的[DEFAULT]区,可以在此定义所有受监控的服务的默认参数

[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip =  127.0.0.1/8 ::1
 
# 客户端主机被禁止的时长
bantime = 60m

# 查找失败次数的时长
findtime = 3m
 
# 客户端主机被禁止前允许失败的次数 
maxretry = 4

根据上述配置,fail2ban会自动禁止在最近3分钟内有超过4次访问尝试失败的任意IP地址。一旦被禁,这个IP地址将会在1小时内一直被禁止访问 SSH 服务。

保存配置后重启服务:

sudo service fail2ban restart 

查看fail2ban运行状态

验证fail2ban成功运行:

$ sudo fail2ban-client ping
Server replied: pong

查看日志文件

sudo vim /var/log/fail2ban.log

检验fail2ban状态

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

检验一个特定监狱的状态

sudo fail2ban-client status sshd

上面的命令会显示出当前被禁止IP地址列表

解锁特定的IP地址

sudo fail2ban-client set sshd unbanip 192.168.1.8

使用两步验证(2FA)

https://www.gingerdoc.com/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-20-04

参考链接:

ubuntu 16.04防止SSH暴力登录攻击

Linux实用工具总结之UFW

如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击

How To Harden OpenSSH on Ubuntu 20.04 - DigitalOcean

How To Harden OpenSSH Client on Ubuntu 20.04 - DigitalOcean

目录
相关文章
|
人工智能 Ubuntu 前端开发
Dify部署全栈指南:AI从Ubuntu配置到HTTPS自动化的10倍秘籍
本文档介绍如何部署Dify后端服务及前端界面,涵盖系统环境要求、依赖安装、代码拉取、环境变量配置、服务启动、数据库管理及常见问题解决方案,适用于开发与生产环境部署。
2073 1
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
729 18
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
1178 17
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
1439 7
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
5380 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
846 9
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1695 55
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
1220 5
图解MySQL【日志】——Redo Log