原文 How To Secure Your Linux Server In 7 Easy Steps 由 Brian Mutende 发布于 Medium,翻译转载已获作者允许。 为配合博客目录系统显示,对原文章节名略有修改。
大多数服务器经常会被黑客攻击。所以我决定写一篇简短的教程,让读者轻松加固自己的 Linux 服务器。
这并不是一篇完整的安全指南,但是它可以帮你阻断近九成常见的后端攻击,例如暴力破解和 DDoS。
最棒的是,你可以在一两个小时内就完成操作。
准备工作
- 你需要一台Linux服务器。
- 你需要对命令行有基本的了解。这里提供一份 cheet sheet 供你使用。
如果你已万事俱备,那就开始吧。
具体步骤
配置 SSH 密钥
要访问远程服务器,你务必使用 SSH 密钥登录而不是使用密码登录。
密码登录的问题在于其很容易被暴力破解(你将在下文学到如何进一步防止这种情况)。另外,在每次访问服务器时,你都必须输入密码。为避免上述缺点,你必须设置 SSH 密钥验证。它比使用密码更安全,因为黑客无法将其暴力破解。除此以外,使用密钥也可以更方便和快速地连接服务器,而无需输入密码。
下面介绍如何为服务器设置 SSH 身份验证。
-
在本地计算机上,运行下列命令生成 SSH 密钥对:
ssh-keygen
上述命令将引导你在几步之内生成 SSH 密钥。当然别忘了记住你保存密钥文件的位置。
-
使用以下命令将公钥添加到服务器:
ssh-copy-id username@remote_host
务必使用你的用户名和服务器的 IP 地址替换 username 和 remote_host。系统将提示你输入密码。
-
尝试使用以下命令登录服务器:
ssh username@remote_host
别忘了将 username 和 remote_host 替换为服务器的详细信息。这时你会注意到,本次登录不再提示你输入密码。
保持系统时间最新
许多安全协议依托于你的系统时间来执行定时任务,生成当天的日志和执行其他关键任务。
如果你的系统时间有误,可能会对你的服务器造成危害。为防止这种情况发生,你可以安装 NTP 客户端。该程序将使你的系统时间与全球 NTP 服务器保持同步。
安装 NTP 客户端命令如下:
sudo apt install ntp
之后你再也不用担心设置系统日期。
查看活动端口
服务器程序会暴露某些端口,以便于网络中的其他应用程序对其进行访问。黑客也可以在你的服务器上安装后门并暴露端口,从而控制你的服务器。因此,我们不希望服务器上的未知端口被请求侦听。
要查看活动端口,可以使用以下命令:
sudo ss -lntup
查看输出并检查任何你并不熟悉的端口或进程。尝试发现并追踪可能有害的服务和流程。如果你不知从何下手,请可以查看这份《「糟糕的」TCP/UDP 端口列表》。
设置防火墙
防火墙允许你控制服务器上传入 / 传出特定端口的网络流量。通常我使用 UFW(uncomplicated firewall,简单防火墙)。(译者注:UFW 是 Ubuntu 系统上默认的防火墙组件)
你可以配置下述规则来控制 UFW 的运行:
- 允许 / 禁止
- 传入流量 / 传出流量
- 流量目的地 / 流量源
- 特定端口 / 所有端口
完成下面的例子,你将阻止白名单之外的所有网络流量。如果之后安装了其他程序,别忘了将运行所需的必要端口加入白名单。
设置 UFW
- 安装ufw。
sudo apt-get install ufw
- 你可以禁止所有传出流量
sudo ufw default deny outgoing comment 'deny all outgoing traffic'
- 或者允许所有传出流量
sudo ufw default allow outgoing comment 'allow all outgoing traffic'
- 接下来,我们要禁止所有传入的流量......
sudo ufw default deny incoming comment 'deny all incoming traffic'
- ...将 SSH 连接加入例外,以便访问系统。
sudo ufw limit in ssh comment 'allow SSH connections in'
- 如果你将 UFW 配置为禁止所有传出流量,别忘了根据需要允许特定流量。比如:
#允许端口 53 的流量输出 - DNS
sudo ufw allow out 53 comment 'allow DNS calls out'
#允许端口 123 的流量输出 - NTP
sudo ufw allow out 123 comment 'allow NTP out'
#允许 HTTP,HTTPS 或 FTP 的流量
#根据你使用的 apt 源的不同,apt 可能需要如下设置
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'
#允许 whois
sudo ufw allow out whois comment 'allow whois'
#允许端口 68 的流量输出 - DHCP 客户端
#如果你正在使用 DHCP,则需要如下设置
sudo ufw allow out 68 comment 'allow the DHCP client to update'
- 如需拒绝端口 99 上的任何流量,可使用以下命令:
sudo ufw deny 99
- 最后,使用以下命令启动 UFW:
sudo ufw enable
你还可以使用以下命令查看 UFW 状态:
sudo ufw status
防止自动化攻击
你可以使用两个程序来阻止大多数自动化攻击:
PSAD 和 Fail2Ban 之间的区别
我们知道,端口可以提供给服务器上的应用程序进行访问。攻击者为了访问你的服务器,也许会扫描你的服务器目前开放的端口。
PSAD 监视网络活动,以检测并自定义阻止端口扫描和其他类型的可疑流量,如 DDoS 攻击或操作系统指纹识别尝试。
Fail2Ban 扫描各种应用程序(如 FTP)的日志文件,并自动封禁有明显恶意行为(如自动登录尝试)的 IP。
以下指南将向你展示如何安装和配置 PSAD 和 Fail2Ban,以便它们与 UFW 一起使用。
安装 logwatch
服务器上的应用程序通常会将日志消息保存到日志文件中。除非你要手动监控日志文件,否则需要安装 logwatch。logwatch 将扫描系统日志文件并对其进行汇总。
你可以直接从命令行或计划任务运行 logwatch。例如,你可以配置 logwatch 将日志文件的每日摘要以电子邮件的形式发送给你。注意确保你的服务器可以正常发送电子邮件。
logwatch 通过 service 文件来获取读取和汇总日志文件的方式。你可以在 /usr/share/logwatch/scripts/services
中查看所有 service 文件。
logwatch 默认配置文件是 /usr/share/logwatch/default.conf/logwatch.conf
。你可以通过使用命令行参数更改配置。
在 Ubuntu 或 Debian 上安装 logwatch,可运行以下命令:
apt-get install logwatch
对于其他 Linux 发行版的用户,请查看 Linode 的这篇指南。
如果你需要查看 logwatch 收集的日志样本,你可以尝试直接运行 logwatch。
sudo /usr/sbin/logwatch --output stdout --format text --range yesterday --service all
最后,然后 logwatch 每天发送一封电子邮件,其中包含我们日志文件的摘要。为实现此需求,可以打开文件 /etc/cron.daily/00logwatch 并找到 execute 行,然后将其更改为以下内容:
/usr/sbin/logwatch --output mail --format html --mailto root --range yesterday --service all
执行安全审计
在加固 Linux 服务器后,你应该进行安全审计,以便排查任何可能被忽视的安全漏洞。为此,你可以使用 Lynis,这是一个可以实现以下功能的开源软件:
- 安全审计。
- 一致性测试(例如 PCI,HIPAA,SOx)。
- 渗透测试。
- 漏洞检测。
- 系统强化。
如何使用 Lynis
首先,通过克隆其 Github 仓库来安装 Lynis。这可确保安装的是最新版本的 Lynis。
git clone https://github.com/CISOfy/lynis
切换到我们克隆 Lynis 的目录:
cd lynis
最后,使用以下命令运行第一次安全审计:
lynis audit system
你可以在 Lynis 的官方网站上了解更多相关信息。
结语
很高兴你能阅读这篇有关加固 Linux 服务器的 how-to 指南。希望你能从中获益。