目录
1.确保设置了一个非root用户
2.确保非 root 用户具有 sudo 权限
3.启用基于密钥的 SSH 身份验证
4.确保允许 SSH 通过 ufw 防火墙
5.启用防火墙(仅在允许 SSH 后)
7.禁用所有 SSH 转发
8.禁用 root 通过 SSH 登录
9.禁用基于密码的 SSH 身份验证
10.忽略rhosts
11.安装并配置fail2ban以保护SSH
12.配置自动安全更新(适用于 Red Hat 和 CentOS)
安装 Linux
服务器后,必须做一些配置以确保以确保您的 Linux
服务器的安全性,目前最流行的两个 Linux
服务器发行版:Ubuntu
和 CentOS/Red Hat
。下面以它们为例,说明服务器安装系统后应该进行的加固操作。
root 用户是万能的,但并不总是需要 root 权限。
root 也是几乎所有Linux系统上的有效用户名,这意味着如果启用了远程身份认证,则攻击者的一半工作就已经完成了,即获取有效用户名。
此外,如果攻击者能够以root身份登录,他们就不需要进一步的权限来在系统上执行任何操作。
出于这些原因,最好以非 root 用户身份登录,并禁用 root 用户通过 SSH 进行远程登录。
# 具体操作:
以root用户登录系统,分别以useradd
和passwd
命令添加用户并设置密码:
[root@DBKF9HIS ~]# useradd imoonrong
[root@DBKF9HIS ~]# passwd imoonrong
更改用户 imoonrong 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@DBKF9HIS ~]#
在 CentOS 和 Red Hat 上,以 root 身份登录,使用 usermod
命令将用户添加到 wheel 组(wheel 组是用于授予用户 sudo
权限的标准组):
usermod -aG wheel
Ubuntu 使用 sudo 组来管理 sudo 用户:
usermod -aG sudo
比如,在CentOS7.9下将上面创建的 imoonrong 用户添加到 wheel 组:
[root@DBKF9HIS ~]# usermod -aG wheel imoonrong
# 添加完成后,可以查看用户属性
[root@DBKF9HIS ~]# id imoonrong
uid=1003(imoonrong) gid=1003(imoonrong) 组=1003(imoonrong),10(wheel)
[root@DBKF9HIS ~]#
密码被破解、暴力破解或泄露是攻击者获取系统访问权限的非常常见的方式。
启用基于密钥的SSH认证非常重要,这样在禁用基于密码的认证时,它仍然可以正常工作。
如果有人在启用了基于密钥认证并禁用了基于密码认证的SSH远程访问系统上获取了服务器的用户名和密码,那么这些被盗的密码将无法再让他们访问该服务器。
通过启用基于密钥的认证,可以大大降低SSH被利用的风险,这是保护SSH服务器的基本方法之一。
有关配置过程,请参考《LINUX SSH互信配置》。
Ubuntu 使用 Uncomplicated Firewall (ufw),而 CentOS/Red Hat 使用 firewalld。
在 CentOS/Red Hat 上,使用 firewall-cmd 命令:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
在 Ubuntu 上,使用 ufw 命令,如下所示:
sudo ufw allow ssh
防火墙确保只有明确允许的流量才能流入服务器,如果攻击者在服务器上植入了恶意软件,并试图通过未允许的端口进行通信,或者某个服务被意外启用,防火墙可以阻止这些行为,从而避免服务器被入侵或进一步受到损害。
在 CentOS/Red Hat 系统上,启用 firewalld systemd 服务:
sudo systemctl start firewalld
sudo systemctl enable firewalld
在 Ubuntu 上,使用以下命令:
sudo ufw enable
攻击者可能入侵服务器的方式之一是通过运行服务的软件中的漏洞,banner 信息可能会显示正在运行的 OpenSSH 版本或操作系统信息,所以应该关闭。
CentOS/ Red Hat 的默认行为是不显示banner信息,因此无需执行任何作。
在 Ubuntu 上,您可以使用:
sudo echo "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
攻击者可能会利用转发功能来加密流量,或者通过授权的端口和服务传递原本会被阻止的流量。所以如果不使用它,就应该将其关闭。
在 CentOS/Red Hat 上,将以下内容 dd 到:/etc/ssh/sshd_config
DisableForwarding yes
在 Ubuntu 上,添加到文件中:DisableForwarding yes``10-my-sshd-settings.conf
sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
几乎每个 Linux 系统上都有一个 root 用户,允许该帐户使用 SSH 的风险是双重的。
该用户名是已知的,并且经常被坏人尝试。
如果攻击者以 root 身份进入,则她拥有完全的系统访问权限。
禁用 root 账户进行 SSH 连接可以消除这两种风险。
在 CentOS/Red Hat 上,找到 /etc/ssh/sshd_config
中的 PermitRootLogin yes
行并将其更改为:
PermitRootLogin no
在 Ubuntu 上,添加PermitRootLogin no
到文件10-my-sshd-settings.conf
中:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
禁用基于密码的身份验证可以阻止试图猜测密码,或通过社会工程学等方式窃取凭据使用 SSH 进入服务器。
攻击者必须拥有该服务器的公钥和私钥才能访问它。
在 CentOS/Red Hat 上,找到 /etc/ssh/sshd_config
中的PasswordAuthentication yes
行并将其更改为:
PasswordAuthentication no
在 Ubuntu 上,添加 PasswordAuthentication no
到文件10-my-sshd-settings.conf
中:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
rhosts与 rsh 相关联,rsh 是一种已被安全壳(SSH)取代的旧协议。如果用户尝试创建一个恶意的 rhosts 文件,此设置将明确忽略它。
在 CentOS/Red Hat 上,找到 /etc/ssh/sshd_config
中的 #IgnoreRhosts yes
行并将其更改为:
IgnoreRhosts yes
在 Ubuntu 上,添加 IgnoreRhosts yes
到文件 10-my-sshd-settings.conf
中:
sudo echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
Fail2ban会监控配置服务(如SSH)的日志文件,并在一定次数的尝试和规定的时间内阻止恶意用户的 IP 地址连接到服务器。
例如,如果攻击者在三小时内失败尝试超过5次,她的IP地址将被阻止12小时。
Fail2ban 还可以配置为保护其他服务,例如由 nginx 或 Apache Web 服务器提供支持的网站。
请参考《用Fail2ban 实现动态防火墙防暴力破解》。
要在 CentOS / Red Hat 上配置自动更新,需要安装一个名为 dnf-automatic
的应用程序,并使用以下命令为其启用计时器:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
可以通过运行以下命令来检查计时器:
sudo systemctl status dnf-automatic.timer
在 Loaded: 这一行查找 “loaded”,并在 Active: 这一行查找 “active”。