Skip to content

保护您的树莓派

树莓派的安全性很重要。安全漏洞使您的树莓派对黑客开放,然后黑客无需您的许可即可使用它。

您需要什么级别的安全性取决于您希望如何使用树莓派。例如,如果您只是在家庭网络中使用树莓派,在带有防火墙的路由器后面,那么默认情况下它已经相当安全。

但是,如果您希望通过直接连接(不太可能)或通过路由器防火墙(例如 SSH )允许某些协议将树莓派直接暴露给互联网,则需要进行一些基本的安全更改。

即使您隐藏在防火墙后面,也应认真考虑安全性。本文档将描述提高树莓派安全性的一些方法。但是请注意,它并不详尽。

更改您的默认密码

默认的用户名和密码用于运行树莓派 OS的每个树莓派。因此,如果您可以访问树莓派,并且这些设置没有更改,则您可以对该 root 用户拥有" root"访问权限。

因此,第一件事就是更改密码。可以通过 raspi -config应用程序或从命令行完成。

`` sudo raspi-config


选择选项 2 ,然后按照说明更改密码。

实际上,所有 raspi -config所做的只是启动命令行" passwd"应用程序,您可以从命令行执行该操作。只需输入您的新密码并进行确认。

``
密码

更改用户名

当然,您也可以通过更改用户名来使树莓派更加安全。所有树莓派都带有默认用户名" pi",因此更改此名称将立即使您的树莓派更安全。

要添加新用户,请输入:

`` sudo adduser爱丽丝


系统将提示您为新用户创建密码。

新用户将在/home/alice /中拥有一个主目录。

要将它们添加到 sudo 组中,以赋予他们 sudo 权限以及所有其他必要的权限:

``
sudo usermod -a -G adm,拨号,cdrom,sudo,音频,视频,plugdev,游戏,用户,输入,netdev,gpio,i2c,spi alice

您可以尝试以下操作,以检查权限是否到位(即可以使用sudo):

`` 苏多苏-爱丽丝


如果成功运行,则可以确保新帐户位于" sudo"组中。

确认新帐户正常运行后,您可以删除" pi"用户。为此,您首先需要使用以下命令关闭其过程:

``
 sudo Pkill -u pi

请注意,在当前的树莓派 OS发行版中,有某些方面要求pi用户存在。如果不确定是否会受到此影响,则将" pi"用户留在原处。正在努力减少对" pi"用户的依赖。

要删除" pi"用户,请输入以下内容:

`` sudo deluser pi


此命令将删除`pi`用户,但将保留`/home/pi`文件夹。如有必要,您可以使用以下命令同时删除`pi`用户的主文件夹。请注意,此文件夹中的数据将被永久删除,因此请确保所有必需的数据都存储在其他位置。

``
sudo deluser-删除家庭 pi 

此命令将导致警告,说明" pi"组没有成员。 deluser命令可同时删除 pi 用户和 pi 组,因此可以安全地忽略该警告。

使sudo需要密码

将 sudo 放置在命令前会以超级用户身份运行,默认情况下,不需要密码。通常,这不是问题。但是,如果您的 Pi 暴露于 Internet 并以某种方式被利用(例如通过网页利用),那么除非您将 sudo 设置为需要密码,否则攻击者将能够更改需要超级用户凭据的内容。

要强制sudo要求输入密码,请输入:

`` sudo visudo /etc/sudoers.d/010_pi-nopasswd


并将" pi"条目(或具有超级用户权限的任何用户名)更改为:

``
pi ALL =(全部)密码:全部

然后保存文件:将检查是否存在语法错误。如果未检测到错误,则文件将被保存,并且您将返回到 Shell 提示符。如果检测到错误,将询问您"现在如何?"。按下键盘上的" enter"键:这将显示一个选项列表。您可能会想再次对"(e)dit sudoers文件"使用" e",以便您可以编辑文件并解决问题。 请注意,选择选项" Q"将保存文件,而语法错误仍然存​​在,这使_any_用户无法使用 sudo 命令。

确保您具有最新的安全修复程序这就像确保您的树莓派 OS版本是最新的一样简单,因为最新的发行版包含所有最新的安全修复程序。完整说明可以在here中找到。

如果您使用 SSH 连接到树莓派,则值得添加专门用于更新 ssh -server的 cron 作业。以下命令(可能作为日常 cron 作业)将确保您迅速获得最新的 SSH 安全修复程序,而与正常的更新过程无关。有关设置 cron 的更多信息,请参见here

`` apt安装 openssh -server


## 改善 SSH 安全性

SSH是一种远程访问树莓派的常用方法。默认情况下,使用 SSH 登录需要使用用户名/密码对,并且有多种方法可以使其更安全。一种更安全的方法是使用基于密钥的身份验证。

### 改善用户名/密码安全

最重要的是确保您拥有一个非常可靠的密码。如果您的树莓派暴露在互联网上,则密码必须非常安全。这将有助于避免字典攻击等。

您也可以通过更改 sshd 配置来"允许"或"拒绝"特定用户。

``
 sudo 纳米/etc/ssh/sshd_config

将以下行添加,编辑或追加到文件末尾,其中包含您希望允许登录的用户名:

AllowUsers爱丽丝鲍勃

您还可以使用DenyUsers专门阻止某些用户名登录:

DenyUsers简·约翰

更改后,您将需要使用 sudo systemctl restart ssh重新启动 sshd 服务或重新启动,以使更改生效。

使用基于密钥的身份验证。

密钥对是两个加密安全密钥。一种是私人的,一种是公共的。它们可用于对 SSH 服务器(在本例中为树莓派)进行客户端身份验证。

客户端生成两个密钥,这两个密钥相互加密链接。永远不要释放私钥,但可以自由共享公钥。 SSH服务器获取公共密钥的副本,并在请求链接时使用此密钥向客户端发送质询消息,客户端将使用私钥对该消息进行加密。如果服务器可以使用公共密钥将该消息解密为原始质询消息,则可以确认客户端的身份。

在 Linux 上使用 client 上的 ssh -keygen命令生成密钥对;密钥默认情况下存储在用户主目录的.ssh文件夹中。私钥将被称为" id_rsa",而相关联的公钥将被称为" id_rsa.pub"。密钥将为 2048 位长:破坏该长度的密钥上的加密将花费非常长的时间,因此非常安全。如果情况需要,您可以加长键。请注意,您只应执行一次生成过程:如果重复执行,它将覆盖以前生成的所有键。依赖那些旧密钥的所有内容都需要更新为新密钥。

在密钥生成过程中,系统会提示您输入密码短语:这是额外的安全级别。目前,将此空白留空。

现在需要将公钥移到服务器上:请参阅将公钥复制到树莓派中

最后,我们需要禁用密码登录,以便所有身份验证均由密钥对完成。

`` sudo 纳米/etc/ssh/sshd_config


如果尚未设置三行,则需要将其更改为" no":

``
ChallengeResponseAuthentication否
密码验证否
UsePAM否

保存文件,然后使用 sudo service ssh reload重新启动 ssh 系统或重新启动。

安装防火墙

有许多可用于 Linux 的防火墙解决方案。大多数使用基础iptables项目提供数据包筛选。该项目位于 Linux netfiltering系统上。 iptables是默认安装在树莓派 OS上的,但未设置。设置它可能是一项复杂的任务,ufw是一个提供比`iptables'更简单的界面的项目。 "简单的防火墙"。这是 Ubuntu 中的默认防火墙工具,可以轻松地安装在树莓派上:

`` sudo apt安装 UFW


ufw是一个相当简单的命令行工具,尽管有一些 GUI 可用。本文档将介绍一些基本的命令行选项。注意,`ufw`需要以超级用户特权运行,因此所有命令前面都带有`sudo`。也可以在所有 ufw 命令中使用选项--dry-run来指示命令的结果,而无需实际进行任何更改。

要启用防火墙(这也将确保它在启动时启动),请使用:

``
sudo ufw启用
```要禁用防火墙并禁用启动时启动,请使用:
``
sudo ufw禁用

允许特定端口访问(在示例中,我们使用了端口 22 ):

`` sudo ufw允许 22


拒绝端口访问也非常简单(同样,我们以端口 22 为例):

``
sudo ufw拒绝 22 

您还可以指定端口允许或拒绝的服务。在此示例中,我们拒绝端口 22 上的 tcp :

`` sudo ufw拒绝 22 /tcp


即使您不知道服务使用哪个端口,也可以指定服务。此示例允许 ssh 服务通过防火墙访问:

``
 sudo UFW允许 SSH 

status命令列出了防火墙的所有当前设置:

`` sudo ufw状态


这些规则可能非常复杂,允许阻止特定的 IP 地址,指定允许通信的方向,或者限制尝试连接的次数,例如以帮助克服拒绝服务(DoS)攻击。您还可以指定要应用的设备规则(例如 eth0 ,wlan0)。请参考`ufw`手册页(`man ufw`),以获取全部详细信息,但是这里有一些更复杂的命令的示例。

使用 tcp 限制 ssh 端口上的登录尝试:如果 IP 地址在过去 30 秒钟内尝试连接六次或更多次,则拒绝连接:

``
 sudo ufw限制 ssh /tcp

拒绝从 IP 地址 192 .168.2.1访问端口 30

`` sudo ufw从 192 .168.2.1端口 30 拒绝


## 安装 fail2ban 

如果您将树莓派用作某种服务器,例如" ssh"或网络服务器,则防火墙中会故意存在"漏洞",以使服务器通过。在这种情况下,[Fail2ban](http://www.fail2ban.org)可能会有用。 Fail2ban用 Python 编写,是一种扫描器,用于检查树莓派生成的日志文件,并检查它们是否可疑。它捕获了诸如多次尝试强行登录的事件,并且可以通知任何已安装的防火墙停止从可疑 IP 地址进行进一步的登录尝试。它使您不必手动检查日志文件是否存在入侵企图,然后通过(通过" iptables")更新防火墙以防止入侵企图。

使用以下命令安装 fail2ban :

``
 sudo apt安装 fail2ban 

安装时,Fail2ban将创建一个文件夹"/etc/fail2ban",其中有一个名为" jail.conf"的配置文件。需要将其复制到jail.local以启用它。在此配置文件中包含一组默认选项,以及用于检查特定服务是否异常的选项。执行以下操作来检查/更改用于 ssh 的规则:

`` sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo 纳米/etc/fail2ban/jail.local


将以下部分添加到`jail.conf`文件中。在 fail2ban 的某些版本上,此部分可能已存在,因此,如果存在此部分,请对其进行更新。

[ssh] 启用=真 端口= ssh 过滤器= sshd 日志路径= /var/log/auth.log maxretry = 6


如您所见,此部分名为 ssh ,已启用,检查 ssh 端口,使用`sshd`参数进行过滤,分析`/var/log/auth.log`是否存在恶意活动,并允许在检测到之前重试六次达到阈值。查看默认部分,我们可以看到默认的禁止操作是:

``
# 默认禁止操作(例如 iptables ,iptables-new,
# iptables-multiport,shorewall等)用于定义
# action_ *变量。可以在全局或每个
jail.local文件中的#部分
banaction = iptables-multiport

iptables-multiport表示 Fail2ban 系统将在达到检测阈值时运行/etc/fail2ban/action.d/iptables-multiport.conf文件。可以使用许多不同的操作配置文件。多端口禁止所有端口上的所有访问。

如果您想在三次尝试失败后永久禁止 IP 地址,则可以在[[ssh]]部分中更改 maxretry 值,并将禁止时间设置为负数:

[ssh]
启用=真
端口= ssh
过滤器= sshd
日志路径= /var/log/auth.log
maxretry = 3
bantime = -1

关于 Fail2ban 的一些内部原理,这里有一个很好的教程(https://www.digitalocean.com/community/tutorials/how-fail2ban-works-to-protect-services-on-a-linux-server) 。