如今,在主机上安装一台服务器只需几分钟和点击几下鼠标。 但刚一发布,他就发现自己处于充满敌意的环境中,因为他像摇滚迪斯科舞厅中的天真女孩一样向整个互联网开放。 扫描器将快速找到它并检测数以千计的自动编写脚本的机器人程序,这些机器人程序会搜索网络以查找漏洞和错误配置。 启动后应立即执行一些操作以确保基本保护。
内容
非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 协议的程序,例如
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-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命令复制文件,实用程序
建议多备份几份私钥,因为如果禁用密码验证并丢失,那么您将根本无法登录自己的服务器。
如上所述,在 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 发行版附带简单的防火墙(
在 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
服务
在 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 上,您需要安装该应用程序
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
自然地,所有攻击者都知道 SSH 在哪个端口上运行 - 并将它与其余标准端口一起扫描以找出软件版本、检查标准根密码等。
多次更改标准端口 - 混淆 - 可以减少垃圾流量、日志大小和服务器负载,还可以减少攻击面。 虽然有些
从理论上讲,更改默认端口有悖于开放架构的做法。 但在实践中,恶意流量实际上减少了,所以这是一种简单有效的措施。
可以通过更改指令来配置端口号 Port 22
在配置文件中 -p <port>
в -p <port>
.
参数 -p <port>
可以用命令指定连接时的端口号 ssh
在 Linux 中。 在 scp
使用参数 -P <port>
(大写P)。 命令行指令覆盖配置文件中的任何值。
如果有很多服务器,几乎所有这些保护 Linux 服务器的动作都可以在脚本中自动完成。 但如果只有一台服务器,那么最好手动控制进程。
由于宣传
立即订购并开始使用!
来源: habr.com