服务器安全系列之基础安全配置

如何防护你的服务器

我们了解了如何创建 Linux 系统(参见如何部署Linode),启动并SSH 登陆到 Linux 系统。现在是时候教你们一些防护和安全知识了。你将学习如何使用防火墙阻挡攻击,SSH 密钥认证,以及可自动屏蔽IP的机制——Fail2Ban,最终全方位的防护你的系统,免于黑客攻击。

创建新用户

在之前的指引中,创建了 root 帐号,并都使用 root 登陆 Linux。但作为最高权限的用户 root,可以执行任何命令,稍加不慎误执行了命令,就会破坏系统。因此,我们建议你创建另一个新的帐号,并使用他登陆服务器,执行任何操作。当使用新帐号登陆后,你可以通过 sudo 命令来获得超级用户的权限。
如何增加新用户,通过 SSH 登陆 Linux 系统,不同版本的 Linux 使用命令也略有不同,如下:

CentOS / Fedora

  1. 使用以下命令创建新帐号,使用你想增加的用户名,替换 exampleuser :
    adduser exampleuser
    
  2. 为新用户设置密码:
    passwd exampleuser
    
  3. 增加新用户到 wheel 用户组,以获得执行 sudo 的权限:CentOS 7 / Fedora
    usermod exampleuser -a -G wheel
    

    CentOS 6

    usermod -a -G wheel exampleuser
    

Debian / Ubuntu

  1. 使用以下命令创建新帐号,使用你想增加的用户名,替换 exampleuser :
    adduser exampleuser
    
  2. 增加新用户到 wheel 用户组,以获得执行 sudo 的权限:
    usermod -a -G sudo exampleuser
    

当新用户创建后,退出 root 登陆:

logout

重新使用刚刚创建的新用户登陆系统. 使用你的新用户名替换下方的 exampleuser ,以及你的实际 IP 地址替换 123.456.78.90:

ssh exampleuser@123.456.78.90

现在你就已经使用了新账号登陆 Linux,而不是危险的 root帐号。当然,在需要执行超级用户(root)才有权限的命令时,在命令前面加上 sudo 即可。例如,你可以执行 sudo iptables -L 去查看 iptables 的配置。另外,所有使用 sudo 执行的命令都将记录在 /var/log/auth.log 这份日志中,如果被入侵了,可以查查这份日志,也许能有所发现。

使用 SSH 密钥认证

前面你连接 SSH 登陆系统,都是通过密码认证的方式,不得不提,有一种更加安全的方式:密钥认证。这部分,我们会教你如何生成公钥和私钥,并上传私钥到你的 Linux 主机。SSH 连接将会匹配远程机器的公钥以及存储在本地机器中的私钥,以认证身份,而且登陆的过程不需要输入任何密码。最后,去掉 SSH 密码登陆的方式,你的系统已经不惧任何暴力破解了。
下面是如何使用 SSH 密钥连接 Linux:

  1. 在本地 Linux / Mac 机器可以通过在终端中输入以下命令,生成 SSH 密钥。Windows 的 PuTTY 用户请看其他教程。
    ssh-keygen
    
  2. 当输入命令后,会出现引导提示,按照提示,输入私钥默认存放位置,回车即使用括号内的默认地址。
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/xxx/.ssh/id_rsa):
    
  3. 接着询问,输入『通行短语』,可以是一句话,相比密码更长,当然偷懒的话,也可以直接回车,不使用通行短语。
    Enter passphrase (empty for no passphrase):
    
  4. 重复输入,这样就完成了 SSH 密钥的生成。

注意:两个密钥文件已经创建,默认路径在 \~/.ssh文件夹中,两个文件分别是: 私钥(id_rsa) 和 公钥(id_rsa.pub).公钥需要上传到远程 Linux 服务器中,另一个文件则藏好,莫被别人偷去!

  1. 使用 SCP 命令上传公钥到远程服务器:
    scp ~/.ssh/id_rsa.pub example_user@123.456.78.90:
    
  2. 如果远程服务器上没有~/.ssh 这个目录,就创建一个 ssh 目录
    mkdir .ssh
    
  3. 将上传上去的公钥放到这个目录中:
    mv id_rsa.pub .ssh/authorized_keys
    
  4. 修改 .ssh 的所有者(注意:所有者不要是 root 帐号)和执行权限(仅所有者可读写):
    chown -R example_user:example_user .ssh
    chmod 700 .ssh
    chmod 600 .ssh/authorized_keys
    

现在SSH 的密钥已经生成,万事俱备,再试试 SSH登陆看,是不是直接无密码进入了呢?
但是这样的防护还不够完美,如果 root 密码被泄露或者被暴力破解,那么系统就会完全置于攻击者的股掌之内。
所以,还是接着往下读。

关闭密码SSH登陆和 Root 帐号登陆

登陆远程服务器,并编辑 SSH 配置文件:

  1. 选项 PasswordAuthentication 的意思是SSH 登陆是否使用密码验证的方式,改为 no,即关闭密码验证。
    PasswordAuthentication no
    
  2. PermitRootLogin:是否运行 root 登陆,同样的改为『no』:
    PermitRootLogin no
    
  3. 保存修改,并重启 SSH 服务:Debian/Ubuntu Users:
    sudo service ssh restart
    

    Fedora/CentOS:

    sudo systemctl restart sshd
    

重启后修改才会生效。
下一篇将介绍如何配置防火墙,以及使用 Fail2Ban 自动屏蔽攻击者 IP。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Scroll to Top
Scroll to Top