passwd
将 root 密码更改为长而复杂的密码。您不需要记住它,只需将其存储在安全的地方——只有在您无法通过 ssh 登录或丢失 sudo 密码时才需要此密码。
apt-get update
apt-get upgrade
以上让我们从右脚开始。
安装 Fail2ban
apt-get install fail2ban
Fail2ban 是一个守护程序,它监视对服务器的登录尝试并在发生可疑活动时阻止它。它配置良好,开箱即用。
现在,让我们设置您的登录用户。随意给用户命名除了“deploy”之外的其他东西,这只是我们使用的约定:
useradd deploy
mkdir /home/deploy
mkdir /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
需要公钥认证
密码时代结束了。通过放弃这些密码并 为您的用户帐户使用公钥身份验证,您将一举提高安全性和易用性 。
vim /home/deploy/.ssh/authorized_keys
将您本地机器上的 id_rsa.pub 的内容以及您希望有权访问此服务器的任何其他公钥添加到此文件中。
chmod 400 /home/deploy/.ssh/authorized_keys
chown deploy:deploy /home/deploy -R
测试新用户并启用 Sudo
现在使用部署用户测试您的新帐户登录到您的新服务器(保持终端窗口的 root 登录打开)。如果成功,请切换回 root 用户处于活动状态的终端,并为您的登录用户设置 sudo 密码:
passwd deploy
设置一个复杂的密码——您可以将它存储在安全的地方,或者让它成为团队难忘的东西。这是您将用于 sudo 的密码。
visudo
评论所有现有的用户/组授权行并添加:
root ALL=(ALL) ALL
deploy ALL=(ALL) ALL
当部署用户输入正确的密码时,上述内容授予他们 sudo 访问权限。
锁定 SSH
配置 ssh 以防止密码和 root 登录并将 ssh 锁定到特定 IP:
vim /etc/ssh/sshd_config
将这些行添加到文件中,插入您将要连接的 IP 地址:
PermitRootLogin no
PasswordAuthentication no
AllowUsers deploy@(your-ip) deploy@(another-ip-if-any)
现在重新启动 ssh:
service ssh restart
设置防火墙
没有防火墙的安全服务器是不完整的。Ubuntu 提供了 ufw,这使得防火墙管理变得容易。跑:
ufw allow from {your-ip} to any port 22
ufw allow 80
ufw allow 443
ufw enable
这会设置一个基本的防火墙并将服务器配置为接受端口 80 和 443 上的流量。您可能希望根据您的服务器将要执行的操作添加更多端口。
启用自动安全更新
这些年来,我已经 养成了apt-get 更新/升级的习惯,但是在使用了十几台服务器的情况下,我发现我登录频率较低的服务器并没有保持新鲜。特别是对于负载平衡的机器,重要的是它们都保持最新状态。自动安全更新让我有些害怕,但没有未修补的安全漏洞那么严重。
apt-get install unattended-upgrades
vim /etc/apt/apt.conf.d/10periodic
将文件更新为如下所示:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
另一个要编辑的配置文件:
vim /etc/apt/apt.conf.d/50unattended-upgrades
将文件更新为如下所示。您可能应该禁用更新并仅坚持使用安全更新:
Unattended-Upgrade::Allowed-Origins {
"Ubuntu lucid-security";
// "Ubuntu lucid-updates";
};
安装 Logwatch 以监视事物
Logwatch 是一个守护进程,用于监控您的日志并将其通过电子邮件发送给您。这对于跟踪和检测入侵很有用。如果有人访问您的服务器,通过电子邮件发送给您的日志将有助于确定发生了什么以及何时发生——因为您服务器上的日志可能已被泄露。
apt-get install logwatch
vim /etc/cron.daily/00logwatch
添加这一行:
/usr/sbin/logwatch --output mail --mailto test@gmail.com --detail high
全做完了!
在短短几分钟内,我们就锁定了一台服务器并设置了一个安全级别,该级别应该可以抵御大多数攻击,同时又易于维护。归根结底,几乎总是用户错误导致闯入,因此请确保将这些密码保存得长且安全!