Linux(Debian)-常见加固技巧(SSH)
就在前几天,我朋友托管在我这的 TeamSpeak
服务器突然无法访问了。简单分析后决定更新
TeamSpeak,但在打包文件到本地整理的时候卡巴斯基突然报毒 1
2
3
4
5team.tar\team\.configrc\a\a;检测到恶意对象
检测到;team.tar\team\.configrc\a\
a文件;活动用户
Trojan.Shell.Agent.br;数据库;木马程序;高;确切
检测到;2022/11/1 23:08
SSH
ssh 作为服务器必备组件,公网上各种自动化工具针对 22 端口高强度扫描。而 ssh 的常见加固手段有: 1. 用高端口代替 22 端口 2. 使用密钥认证代替密码登录 3. 使用密码也用高强度密码
更改 SSH 端口,开启密钥登录
Debian 下 ssh 的配置文件分别是 /etc/ssh/sshd_config 和
/etc/ssh/sshd_config.d/*.conf。其中 /etc/ssh/sshd_config
为默认配置文件,不建议修改。我们自定义的文件位于 /etc/ssh/sshd_config.d/
且以 .conf 结尾。 下面新建一个配置文件: 1
sudo touch /etc/ssh/sshd_config.d/my.conf
文件内容如下: 1
2
3Port 4309
PubkeyAuthentication yes
PermitRootLogin yes
Port 4309 表示 SSH 换用 4309 端口。PubkeyAuthentication yes 表示开启密钥登录。PermitRootLogin yes 表示允许 root 登录,是否允许 root 登录见仁见智。
更换端口后使用 -p 指定登录的端口,例如 1
ssh root@192.168.43.2 -p 4309
生成密钥
使用密钥登录需要生成密钥对,先在本地机器运行以下命令
1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
如果你的机器比较新,也可以使用 ed25519 算法,命令如下
1
ssh-keygen -t ed25519 -C "your_email@example.com"
SSH 会询问你一些问题: 1. 密钥储存位置,默认为用户目录下的 .ssh 目录 2. 是否要为密钥添加密码,添加后每次使用要手动输入密码解锁密钥,如果不希望添加密码直接回车 3. 确认密码,希望无密码继续回车
下面是运行过程 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\king/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\king/.ssh/id_ed25519.
Your public key has been saved in C:\Users\king/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:zuN/3FgL12mtKYA3+deN4KA8UZmD7QrZSqouZv5HWDc your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| |
| o o |
| . E. * |
| o .oS+ o .o|
| . .+o+ B o ooo|
| .o ++= B B.*.|
|.o ....=. B B o|
|+++o. .o.. o |
+----[SHA256]-----+
完成后于用户的 .ssh 目录下生成以算法命名的两文件,本例中为 id_ed25519
和 id_ed25519.pub。其中 id_ed25519
为私钥,请妥善保管,不要泄露;id_ed25519.pub
为公钥,准备上传至服务器。俩文件其实就是文本,用文本编辑器可以直接查看内容。下面是我刚刚生成的公钥内容
1
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINnKAEj8kC3Uw5tizK5zgnPmQefx8XWPVBECHxsx4LhT your_email@example.com
上传密钥
SSH 要求将公钥保存在每个用户的 ~/.ssh/authorized_keys 中。比如准备将生成的密钥用以登录 test 用户,即将公钥内容粘贴进 test 的 ~/.ssh/authorized_keys 文件中即可。没有 authorized_keys 就手动创建。
注意,authorized_keys文件的权限要设为644,即只有文件所有者才能写。如果权限设置不对,SSH
服务器可能会拒绝读取该文件。 1
chmod 644 ~/.ssh/authorized_keys
完成后重启 sshd 服务 1
sudo systemctl restart sshd
登录服务器,应该会自动登录。也可以查看日志 1
cat /var/log/auth.log | grep 'Accepted'
应该出现类似内容 1
Nov 3 15:35:45 iZeio043iZ sshd[7356]: Accepted publickey for test from 193.104.113.211 port 56834 ssh2: RSA SHA256:eg5UsdfmWUDimck1ozg+KDoMwIZbwMtejUHILTyg
禁用密码登录
如果成功使用密钥登录了,下面可以禁用密码登录以提高安全性。编辑上文创建的
/etc/ssh/sshd_config.d/my.conf 文件,添加一行 1
PasswordAuthentication no
即可禁用密码登录。
Fail2Ban
Fail2Ban是一个入侵检测系统框架,它可以保护电脑服务器免受蛮力攻击。以Python程序设计语言编写,并能够在类Unix系统上运行,这些系统具有本地安装的数据包控制系统或防火墙的接口,例如Iptables或TCP Wrapper。 ——维基百科
Fail2Ban 通过检查日志确定黑名单,通过 Iptables 进行禁封一定时间。
安装与准备
首先是最简单的安装
1 |
|
安装完成后检查是否启动
1 |
|
正常运行结果如下
1 |
|
Fail2ban 在安装时会创建两个默认的配置文件 /etc/fail2ban/jail.d/defaults-debian.conf 和 /etc/fail2ban/jail.conf 。我不建议直接修改这些文件,因为更新 Fail2ban 时它们可能会被覆盖。
Fail2ban 将按以下顺序读取配置文件。每个 .local 文件都会覆盖 .conf 文件中的设置: 1. /etc/fail2ban/jail.conf 2. /etc/fail2ban/jail.d/.conf 3. /etc/fail2ban/jail.local 4. /etc/fail2ban/jail.d/.local
因此我们直接将默认配置复制到 /etc/fail2ban/jail.d/ 然后进行修改。
1 |
|
配置
白名单
首先是白名单配置,白名单里的 ip 永远不会被禁封。如果你有其他固定 ip
可以添加进来,没有也可以直接跳过这个步骤。 1
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
禁封条件与时间
bantime,findtime 和 maxretry
设置了禁止时间和禁止条件。bantime是禁止持续的时间。如果未指定后缀则默认为秒,要永久禁止IP,请使用负数。findtime
是设置失败次数之间的持续时间。例如,如果将 Fail2ban
设置为在尝试五次失败后禁止IP,则这些失败必须在 findtime
时间内发生。maxretry
是IP失败尝试次数。默认值设置为5。下面是设置为10分钟完成5次失败,禁封 1
天。 1
2
3bantime = 1d
findtime = 10m
maxretry = 5
Jail 描述如何检测服务的条件。其中服务是系统的任意服务,比如 sshd 服务。条件是包括过滤器和操作。计算符合搜索模式的日志记录,并在满足预定条件时执行相应的操作。
Fail2ban 附带许多 Jail
作为示例,系统每一项服务都可以找到对应Jail配置。我们还可以创建自己的
Jail 配置。默认情况下,在CentOS 8上没有启用Jail。要启用
Jail,您需要在添加 enabled =
true。以下示例显示了如何为sshd服务启用Jail。 1
2
3
4
5[sshd]
enabled = true
port = 4309
logpath = %(sshd_log)s
backend = %(sshd_backend)s
因为上文中将 ssh 的登录端口改为 4309,因此这里的端口同样修改为 4309。 重启 Fail2Ban 使配置生效。
参考
- https://wangdoc.com/ssh/key
- https://www.myfreax.com/install-configure-fail2ban-on-ubuntu-20-04/