如何加固和保护你的Linux服务器(Ubuntu/Debian)?

342 阅读6分钟

不要让你的服务器被黑客攻击而失去你所有的努力工作。这里有一个循序渐进的方法来加固和保护你的Linux服务器--从网络,到权限。对于简单的部署和测试,请查看数字海洋,我最喜欢的平台。5美元/月的服务器可以在一分钟内部署完毕,这是无可厚非的。通过我的链接注册,你可以帮助延长我的服务器的寿命。谢谢你。

设置你的域名服务器

首先,从你的注册商(Godaddy、Namecheap等)检查你的域名设置,看看域名服务器选项是否正确。如果不是,就把它改成指向你的服务器。例如,如果你的服务器在数字海洋,将域名服务器改为:ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com。请注意,你仍然需要在你的服务器提供商中配置网络设置,以便连接将直接到你的服务器IP。

一旦你完成了,运行whois example.com ,看看 "名称服务器 "的密钥是否与你输入的匹配。如果不是,请等待一两个小时,让这些变化得以传播。但是,现在不要担心这个问题--我们可以在没有这个问题的情况下进行其余的程序。

配置你的域名

请注意,这些选项必须通过你的服务器提供商完成。首先,通过输入一个你拥有的有效的完全合格域名来添加一个域名,例如:example.com 。然后,添加A记录来设置一个主机名,添加CNAME记录来添加别名,比如你想在前面加上 "www"。如果你需要设置一个邮件服务器,添加MX记录。你的服务器供应商应该有这方面的详细文件。

从你的本地机器登录到你的服务器

让我们来看看好东西。如果你是通过你的服务器提供商提供的网络终端访问你的服务器,你不需要这样做。如果你要从你的本地机器上访问你的服务器,就做这个步骤。

ssh root@your_server_ip

让我们更新Apt-Get

一旦你进入了,更新apt-get。

apt-get update

安装Fail2Ban以防止主动攻击

让我们安装fail2ban 。默认配置足以覆盖你,所以我们直接安装它。如果你想定制服务,请阅读更多关于它的信息。

apt-get install fail2ban

安装它应该自动使它运行。如果没有,请运行sudo service fail2ban start

创建一个新的用户

永远不要在根用户下工作。这样做是不安全的,你可能会造成比你想要的更多的损害--如果不是现在,很可能是以后。所以,让我们创建一个具有普通权限的新用户。请确保你输入了一个强密码。

adduser jancarloviray

添加根权限

让我们为我们的普通账户添加根权限,或 "超级用户 "的权限。这将使我们能够通过在每个命令前加上sudo ,来运行管理权限。

我们需要将jancarloviray 添加到sudo组中。属于sudo组的用户被允许使用sudo 命令。

usermod -aG sudo jancarloviray

另一个这样做的命令是gpasswd -a jancarloviray sudo 。它们都是为了完成同样的事情。

如果你不能立即将用户添加到组中,你可能需要编辑/etc/sudoers 文件以取消对组名的注释。通过运行sudo visudo 来完成这个工作。

添加公钥认证

为你的新用户设置公钥认证。这允许我们通过要求一个私人SSH密钥来限制访问。要做到这一点,你必须在你的本地机器上输入这些命令

ssh-keygen

运行该命令会生成以下文件。

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

不要分享私钥!现在,把公钥复制到你的新服务器。

ssh-copy-id -i ~/.ssh/id_rsa.pub jancarloviray@your_server_ip

如果你有一台Mac,而你没有安装该命令,请运行brew install ssh-copy-id 。如果这不起作用,那么你必须手动操作。这要多花点功夫,但你会很感激的。让我们手动安装密钥(不推荐!)。

# in your local computer, print the contents of your public key
cat ~/.ssh/id_rsa.pub

# copy that in your clipboard

# on your server, switch to the new user
# this will bring your to your new user's home directory
su - jancarloviray

# create .ssh directory and restrict its permission
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# open the authorized_keys file and insert your public key there
vim ~/.ssh/authorized_keys

# restricts the permission of the authorized_keys
chmod 600 ~/.ssh/authorized_keys

# exit and go back to the root user
exit

禁用密码认证

让我们确保没有人能够真正进入你的服务器--当然除了你自己好吧,从技术上讲,只对那些有机会进入你的本地计算机的人。在这里,我们将禁止通过密码登录。这意味着,进入你的服务器的唯一途径是你拥有与你在authorized_keys中复制的公钥配对的私钥。我们在上一个步骤中创建了这个密钥。

需要注意的是,只有在你完成了上一步之后才可以这样做,否则你将永远被锁定在服务器之外,这一点非常重要。

现在我们来编辑ssh配置。

sudo vim /etc/ssh/sshd_config

# PasswordAuthentication yes 行改为PasswordAuthentication no 。注意,现在它是 "no",而且是未加注释的。

重新加载SSH守护进程。

sudo systemctl reload sshd

现在你应该可以不用输入密码就能登录了,只要你有密钥。

如果你需要排除故障。

在服务器上运行这个tail -f /var/log/auth.log ,并在客户端连接时运行这个ssh -vvv -i .ssh/id_rsa user@server_ip_or_hostname

设置一个基本的防火墙

安装ufwsudo apt-get install ufw

设置一些默认值。这些是开箱即用的设置,但我们还是要确认一下。

sudo ufw default deny incoming

sudo ufw default allow outgoing

检查你当前的服务。

sudo ufw app list

启用你需要有连接的服务。

sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https

如果你需要明确启用某些端口。

# if you want to allow mail, for example:
sudo ufw allow 25   #smtp
sudo ufw allow 143  #imap
sudo ufw allow 993  #imaps
sudo ufw allow 110  #incoming pop3
sudo ufw allow 995  #incoming pop3s

启用速率限制

sudo ufw limit ssh/tcp

启用防火墙。

sudo ufw enable

检查你的防火墙的当前状态。

sudo ufw status

这就是所有的基础知识!如果你想了解更多的步骤,请在下面的评论中告诉我。总会有另一个步骤来保护和加固你的服务器的!