
,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 协议的程序,例如 и 但最流行的是 OpenSSH。在……上安装 OpenSSH 客户端 Ubuntu:
sudo apt install openssh-client服务器安装:
sudo apt install openssh-server在服务器上运行 SSH 守护进程 (sshd) Ubuntu:
sudo systemctl start sshd每次启动时自动启动守护进程:
sudo systemctl enable sshd 应该注意的是,OpenSSH 的服务器部分包括客户端部分。 也就是说,通过 openssh-server 您可以连接到其他服务器。 此外,从您的客户端机器,您可以启动从远程服务器到第三方主机的 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_keysvim /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命令复制文件,实用程序 远程挂载文件系统或目录。
建议多备份几份私钥,因为如果禁用密码验证并丢失,那么您将根本无法登录自己的服务器。
如上所述,在 SSH 中,您需要禁用 root 身份验证(这是我们启动新用户的原因)。
上 CentOS红帽公司找到了这条线 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红帽公司找到了这条线 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 简易防火墙即将到来(),并且与 CentOS红帽公司 .
在防火墙中允许 SSH 连接 Ubuntu:
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
服务 分析服务器上的日志并计算每个 IP 地址的访问尝试次数。 这些设置指定了在特定时间间隔内允许多少次访问尝试的规则 - 之后该 IP 地址将在指定时间段内被阻止。 例如,让我们在 5 小时内允许 2 次失败的 SSH 身份验证尝试,然后阻止给定的 IP 地址 12 小时。
在 Fail2Ban 上安装 CentOS 以及红帽公司:
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红帽需要安装该应用程序 并打开定时器:
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 , 并已获得 IANA 批准。
自然地,所有攻击者都知道 SSH 在哪个端口上运行 - 并将它与其余标准端口一起扫描以找出软件版本、检查标准根密码等。
多次更改标准端口 - 混淆 - 可以减少垃圾流量、日志大小和服务器负载,还可以减少攻击面。 虽然有些 (通过默默无闻的安全)。 原因是这种技术与基本原理相反 . 因此,例如,美国国家标准技术研究院在 表明需要一个开放的服务器架构:“系统的安全性不应依赖于其组件实现的保密性,”该文件说。
从理论上讲,更改默认端口有悖于开放架构的做法。 但在实践中,恶意流量实际上减少了,所以这是一种简单有效的措施。
可以通过更改指令来配置端口号 Port 22 在配置文件中 . 也由参数表示 -p <port> в . SSH 客户端和程序 也支持选项 -p <port>.
参数 -p <port> 可以用命令指定连接时的端口号 ssh в Linux。 在 и scp 使用参数 -P <port> (大写P)。 命令行指令覆盖配置文件中的任何值。
如果服务器数量很多,几乎所有这些安全措施都适用。 Linux服务器可以通过脚本实现自动化。但如果只有一台服务器,最好还是手动控制整个过程。
由于宣传
立即订购并开始使用! 一分钟内任何配置和任何操作系统。 最高配置将使您发挥最大作用——128 个 CPU 内核、512 GB RAM、4000 GB NVMe。 史诗🙂
来源: habr.com
