Linux 服务器保护。 先做什么

Linux 服务器保护。 先做什么
Habib M'henni/维基共享资源,CC BY-SA

如今,在主机上安装一台服务器只需几分钟和点击几下鼠标。 但刚一发布,他就发现自己处于充满敌意的环境中,因为他像摇滚迪斯科舞厅中的天真女孩一样向整个互联网开放。 扫描器将快速找到它并检测数以千计的自动编写脚本的机器人程序,这些机器人程序会搜索网络以查找漏洞和错误配置。 启动后应立即执行一些操作以确保基本保护。

内容

非root用户

第一步是为自己创建一个非根用户。 重点是用户 root 在系统中拥有绝对的权限,如果你允许他远程管理,那么你就为黑客做了一半的工作,为他留下一个有效的用户名。

因此,您需要创建另一个用户,并通过 SSH 为 root 禁用远程管理。

一个新用户通过命令启动 useradd:

useradd [options] <username>

然后使用命令为其添加密码 passwd:

passwd <username>

最后,需要将该用户添加到有权执行提升命令的组中 sudo. 根据 Linux 发行版,这些可能是不同的组。 例如在CentOS和Red Hat中,将用户添加到组中 wheel:

usermod -aG wheel <username>

在 Ubuntu 中,它被添加到组中 sudo:

usermod -aG sudo <username>

密钥而不是 SSH 密码

暴力破解或密码泄露是标准的攻击媒介,因此最好在 SSH (Secure Shell) 中禁用密码验证并改用密钥验证。

有多种实现 SSH 协议的程序,例如 sh и 落熊,但最受欢迎的是 OpenSSH。 在 Ubuntu 上安装 OpenSSH 客户端:

sudo apt install openssh-client

服务器安装:

sudo apt install openssh-server

在 Ubuntu 服务器上启动 SSH 守护进程 (sshd):

sudo systemctl start sshd

每次启动时自动启动守护进程:

sudo systemctl enable sshd

应该注意的是,OpenSSH 的服务器部分包括客户端部分。 也就是说,通过 openssh-server 您可以连接到其他服务器。 此外,从您的客户端机器,您可以启动从远程服务器到第三方主机的 SSH 隧道,然后第三方主机会将远程服务器视为请求源。 一个非常方便的功能,用于屏蔽您的系统。 详情见文章 “实用技巧、示例和 SSH 隧道”.

在客户端计算机上,通常没有必要安装功能完备的服务器以防止远程连接到计算机的可能性(出于安全原因)。

因此,对于您的新用户,您首先需要在您将访问服务器的计算机上生成 SSH 密钥:

ssh-keygen -t rsa

公钥存储在一个文件中 .pub 看起来像一串随机字符,以 ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

然后,从 root 用户的主目录中的服务器上创建一个 SSH 目录,并将 SSH 公钥添加到文件中 authorized_keys,使用像 Vim 这样的文本编辑器:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

最后,为文件设置正确的权限:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

并将所有权更改为该用户:

chown -R username:username /home/username/.ssh

在客户端,需要指定认证秘钥的位置:

ssh-add DIR_PATH/keylocation

现在您可以使用此密钥以用户名登录服务器:

ssh [username]@hostname

授权后,可以使用scp命令复制文件,实用程序 SSHFS 远程挂载文件系统或目录。

建议多备份几份私钥,因为如果禁用密码验证并丢失,那么您将根本无法登录自己的服务器。

如上所述,在 SSH 中,您需要禁用 root 身份验证(这是我们启动新用户的原因)。

在 CentOS/Red Hat 上,我们找到了这条线 PermitRootLogin yes 在配置文件中 /etc/ssh/sshd_config 并改变它:

PermitRootLogin no

在 Ubuntu 上添加行 PermitRootLogin no 到配置文件 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

在验证新用户正在使用他们的密钥进行身份验证后,您可以禁用密码身份验证以消除密码泄露或暴力破解的风险。 现在,为了访问服务器,攻击者需要获得私钥。

在 CentOS/Red Hat 上,我们找到了这条线 PasswordAuthentication yes 在配置文件中 /etc/ssh/sshd_config 并像这样改变它:

PasswordAuthentication no

在 Ubuntu 上添加行 PasswordAuthentication no 归档 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

有关通过 SSH 启用双因素身份验证的说明,请参阅 这里.

防火墙

防火墙确保只有您直接允许的端口上的流量才会到达服务器。 这可以防止利用意外启用其他服务的端口,从而大大减少攻击面。

在安装防火墙之前,您需要确保 SSH 包含在排除列表中并且不会被阻止。 否则启动防火墙后,我们将无法连接到服务器。

Ubuntu 发行版附带简单的防火墙(UFW), 以及 CentOS/Red Hat - firewalld.

在 Ubuntu 的防火墙中允许 SSH:

sudo ufw allow ssh

在 CentOS/Red Hat 上使用命令 firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

完成此过程后,您可以启动防火墙。

在 CentOS/Red Hat 上,启动 firewalld 的 systemd 服务:

sudo systemctl start firewalld
sudo systemctl enable firewalld

在 Ubuntu 上,我们使用以下命令:

sudo ufw enable

Fail2Ban

服务 Fail2Ban 分析服务器上的日志并计算每个 IP 地址的访问尝试次数。 这些设置指定了在特定时间间隔内允许多少次访问尝试的规则 - 之后该 IP 地址将在指定时间段内被阻止。 例如,让我们在 5 小时内允许 2 次失败的 SSH 身份验证尝试,然后阻止给定的 IP 地址 12 小时。

在 CentOS 和 Red Hat 上安装 Fail2Ban:

sudo yum install fail2ban

在 Ubuntu 和 Debian 上安装:

sudo apt install fail2ban

发射:

systemctl start fail2ban
systemctl enable fail2ban

该程序有两个配置文件: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. 禁止限制在第二个文件中指定。

SSH 的 Jail 默认启用默认设置(5 次尝试,间隔 10 分钟,禁止 10 分钟)。

[默认] ignorecommand=bantime=10m findtime=10m maxretry=5

除了 SSH,Fail2Ban 还可以保护 nginx 或 Apache 网络服务器上的其他服务。

自动安全更新

如您所知,在所有程序中不断发现新的漏洞。 信息发布后,将漏洞添加到流行的漏洞利用包中,被黑客和青少年在连续扫描所有服务器时大量使用。 因此,一旦出现安全更新就安装它非常重要。

在 Ubuntu 服务器上,默认情况下会启用自动安全更新,因此无需进一步操作。

在 CentOS/Red Hat 上,您需要安装该应用程序 dnf-自动 并打开定时器:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

定时器检查:

sudo systemctl status dnf-automatic.timer

更改默认端口

SSH 于 1995 年开发,用于替代 telnet(23 端口)和 ftp(21 端口),因此该程序的作者 Tatu Iltonen 默认选择端口 22, 并已获得 IANA 批准。

自然地,所有攻击者都知道 SSH 在哪个端口上运行 - 并将它与其余标准端口一起扫描以找出软件版本、检查标准根密码等。

多次更改标准端口 - 混淆 - 可以减少垃圾流量、日志大小和服务器负载,还可以减少攻击面。 虽然有些 批评这种“默默无闻地保护”的方法 (通过默默无闻的安全)。 原因是这种技术与基本原理相反 建筑保护. 因此,例如,美国国家标准技术研究院在 《服务器安全指南》 表明需要一个开放的服务器架构:“系统的安全性不应依赖于其组件实现的保密性,”该文件说。

从理论上讲,更改默认端口有悖于开放架构的做法。 但在实践中,恶意流量实际上减少了,所以这是一种简单有效的措施。

可以通过更改指令来配置端口号 Port 22 在配置文件中 的/ etc / SSH / sshd_config中. 也由参数表示 -p <port> в sshd的. SSH 客户端和程序 SFTP 也支持选项 -p <port>.

参数 -p <port> 可以用命令指定连接时的端口号 ssh 在 Linux 中。 在 SFTP и scp 使用参数 -P <port> (大写P)。 命令行指令覆盖配置文件中的任何值。

如果有很多服务器,几乎所有这些保护 Linux 服务器的动作都可以在脚本中自动完成。 但如果只有一台服务器,那么最好手动控制进程。

由于宣传

立即订购并开始使用! VDS的创建 一分钟内任何配置和任何操作系统。 最高配置将使您发挥最大作用——128 个 CPU 内核、512 GB RAM、4000 GB NVMe。 史诗🙂

Linux 服务器保护。 先做什么

来源: habr.com