【翻译】简单七步使你的Linux服务器更加安全

之前买过某云的云服务器,一般都是控制台直接操作,然后使用。讲真很少关注服务器的安全问题,想着厂商不都处理了么。今天看到一篇写的不错的文章,补充了一些关于服务器安全的知识。


现在很多服务器都正遭受着攻击,以后也会有。所以我决定写一篇简短的教程来演示如何更轻松的保护你的Linux服务器

这并不意味着这是一篇很全面的安全教程。

但是它可以帮你预防将近90%的常见后端攻击,比如尝试 暴力登录DDoS

最棒的部分就是你可以在1~2小时内轻松实现这些安全操作。

开始之前

1.你需要一台Linux服务器
2.你需要对 命令行 有基本的理解。这里有一份常用的Linux命令行操作命令列表(包含了常用的参数,很不错),点我

如果你已经拥有上面这些必须条件,让我们开始第一步吧!

配置 SSH Keys

开启服务器的远程访问,可以使用密码登录或者SSH登录,你都需要记录下它们的日志。

使用密码登录的问题就是很容易使用暴力登录(下面你将会学习如何防止暴力登录)。此外,在任何你需要访问你服务器的时候都需要记录下这些。

为了避免上面这些缺点,你需要设置 SSH 认证。这比密码更安全,因为黑客不能暴力攻击它。

而且可以更容易更快速的连接到服务器,同时你不需要输入密码。

下面是如何在你的服务器上设置 SSH 认证

  • 在你本地的电脑上,使用下面的命令
1
ssh-keygen

在你的控制面板上将会需要你进行几步简单的设置来生成你的 SSH Keys。记录下你的Key文件将要保存的路径信息。

  • 使用下面的命令给你的服务器添加公钥
1
ssh-copy-id username@remote_host

确保使用你真实的 usernameremote_host(这个是你真是的服务器IP地址) 来替换上面命令中的对应值。然后系统将提示你输入密码。

  • 尝试使用以下命令登录服务器
1
ssh username@remote_host

不要忘记使用你真实的信息来替换其中的 usernameremote_host。你会注意到这次你将不需要输入密码。

保证你的系统时间是最新的

需要安全的协议依赖于你的系统时间来运行如 corn 定时计划时间日志其他关键任务等。

如果你的系统时间不正确的,对你的服务器来说可能会导致负面的影响。为了预防这种事情发生,你可以按照一个 NTP 客户端。这个客户端可以保证你的系统时间持续同步 NTP 的全球服务器。

使用下面的命令来安装 NTP 客户端:(根据具体系统使用安装命令)

1
sudo apt install ntp

从此你不必在担心你设置你的系统时间

查看活动端口

在服务器上的一些应用会暴露某些端口,所有在网络上的其他应用可以访问他们。

黑客们也可以在你的服务器上安装后门 并且 暴露出一个可以控制你服务器的端口。

基于这个原因,我们不想让你的服务器监听所不知道的请求端口。

查看活动端口可以使用下面的命令

1
sudo ss -lntup

让我们看下输出内容,特别要注意下任何那些对你而言不是很熟的端口和进程。

尝试跟踪那些不良的服务和进程

为了帮助你入门,可以查看这个列表 恶意 TCP/UDP 端口

启用防火墙

防火墙允许你 停止/启用 那些 进入/发出 自你服务器上的某些特殊端口的流量。

对于防火墙,我经常使用的是 UFW (uncomplicated firewall)

UFW 依照你设置的规则工作:

  • 允许 / 禁用

  • 进入 / 传出 流量

  • 进入 / 传出

  • 具体的 / 全部的 端口

在这个模块,你要阻断所有的网络流量除了那些你明确允许了的端口。在安装其他程序时,记得要启用对程序而言必须启用的端口。

设置UFW

  • 安装ufw
1
sudo apt-get install ufw
  • 你也可以禁用所有传出的流量
1
sudo ufw default deny outgoing comment 'deny all outgoing traffic'
  • 或者允许所有传出的流量
1
sudo ufw default allow outgoing comment 'allow all outgoing traffic'
  • 下一步,我们想禁止所有进入的流量
1
sudo ufw default deny incoming comment 'deny all incoming traffic'
  • 除了SSH连接,如此我们可以这样设置系统
1
sudo ufw limit in ssh comment 'allow SSH connections in'
  • 如果你配置了 UFW 禁用了所有传出流量,别忘记允许你需要的具体的流量。下面是一些事例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# allow traffic out on port 53 -- DNS
sudo ufw allow out 53 comment 'allow DNS calls out'
# allow traffic out on port 123 -- NTP
sudo ufw allow out 123 comment 'allow NTP out'
# allow traffic out for HTTP, HTTPS, or FTP
# apt might needs these depending on which sources you're using
sudo ufw allow out http comment 'allow HTTP traffic out'
sudo ufw allow out https comment 'allow HTTPS traffic out'
sudo ufw allow out ftp comment 'allow FTP traffic out'
# allow whois
sudo ufw allow out whois comment 'allow whois'
# allow traffic out on port 68 -- the DHCP client
# you only need this if you're using DHCP
sudo ufw allow out 68 comment 'allow the DHCP client to update'
  • 禁用 端口号99上的所有流量,使用下面的流量
1
sudo ufw deny 99
  • 最后 启用 UFW 使用下面的命令
1
sudo ufw enable
  • 你还可以使用下面的命令来查看UFW的状态
1
sudo ufw status

防止自动化攻击

这里有两种通用的方法你可以用来防止大多数的自动化攻击

PSAD 和 Fail2Ban 的不同之处

我们了解到端口可以访问到你服务器上的应用程序。一个攻击者通常会扫描你服务器上的开放端口,然后用来访问你的服务器。

PSAD 通过监控网络活动 来检测和选择性的阻止此类扫描和其他可疑类的流量,比如 DDoS 或者 系统指纹攻击

Fail2Ban 从另一方面来说,扫描各个应用(如 FTP )的日志文件,并自动禁止恶意(如尝试自动登录)的IP。

下面两篇教程将会教你如何安装配置 PSAD 和 Fail2Ban,这样他们就可以和 UFW 组合起来一起工作。

安装 Logwatch

服务器上的应用经常会在日志文件中保存一些日期信息。你需要安装一个 logwatch 除非你想手动去监控你的日志文件。Logwatch 可以扫码系统日志文件并总结概述他们。

你可以直接在命令行运行它,或者加入一个周期性的计划任务中。比如,你可以配置 Logwatch 来给你发送关于日志文件的日常概要邮件。注意,要实现这个你的服务器需要启用发送邮件服务。

logwatch 使用服务文件来确定如何去读并且概述一个日志文件。你可以在 /usr/share/logwatch/scripts/services 看到所有的模版服务文件。

logwatch 的配置文件 /usr/share/logwatch/default.conf/logwatch.conf 指定了默认选项,你可以覆盖其中的参数。

Ubuntu 或者 Debian 下安装 logwatch 可以使用下面的命令

1
apt-get install logwatch

对于其他Linux发行版的用户,可以查看 Linode这篇教程

你可以直接运行logwatch,得到一个示例 以便看下它是如何运行的。

1
sudo /usr/sbin/logwatch --output stdout --format text --range yesterday --service all

最后,告诉logwatch 给我们发送一封关于我们日志文件的日常概要邮件。 之后,打开文件 /etc/cron.daily/00logwatch,然后找到 execute的行,然后用下面的替换他

1
/usr/sbin/logwatch --output mail --format html --mailto root --range yesterday --service all

安全审计

在此之后,你还需要进行安全审计,以便发现任何你可能错过的漏洞。

你可以使用 Lynis 来做这个。这是一款开源的软件,他提供了如下功能:

  • 安全审计

  • 常规测试(e.g. PCI, HIPAA, SOx)

  • 渗透测试

  • 漏洞检测

  • 系统强化

如何使用 Lynis

在所有开始之前,可以克隆他们的 Github 仓库来安装 Lynis. 使用下面的命令来安装最新版。

1
git clone https://github.com/CISOfy/lynis

如何进入到我们克隆下的项目目录中

1
cd lynis

最后 使用下面的命令来运行你的第一次审计

1
lynis audit system

你还可以在他们的 官方网站 学到更多关于Lynis的用法

参考链接

https://medium.com/servers-101/how-to-secure-your-linux-server-6026cfcdefd8


-------------The End-------------