树莓派超全系列教程文档--(24)本地化设置、SSH及配置防火墙
本地化设置、SSH及配置防火墙
- 本地化您的 Raspberry Pi
- 保护您的树莓派
- 更改用户密码
- 更新树莓派操作系统
- 自动更新 SSH 服务器
- 提高SSH安全性
- 启用和禁用 SSH 用户
- 安装防火墙
- 安装 `fail2ban`
文章来源: http://raspberry.dns8844.cn/documentation
原文网址
本地化您的 Raspberry Pi
您可以使用 xref:configuration.adoc#raspi-config[raspi-config
] 工具配置 Raspberry Pi 操作系统的用户界面语言、键盘布局和时区。
保护您的树莓派
在这里,我们介绍了一些提高Raspberry Pi安全性的常用方法。
更改用户密码
以 sudo
为前缀的命令以超级用户身份运行。默认情况下,超级用户不需要密码。不过,您可以要求所有以 sudo
运行的命令都输入密码,从而提高 Raspberry Pi 的安全性。
要设置 sudo
需要密码,请为您的用户帐户编辑 nopasswd
sudoers文件,将文件名中的 <username>
占位符替换为您的用户名:
$ sudo visudo /etc/sudoers.d/010_<username>-nopasswd
将 <username>
行更改为以下内容,并将 <username>
替换为您的用户名:
<username> ALL=(ALL) PASSWD: ALL
保存文件。您的新配置应立即生效。
更新树莓派操作系统
只有最新的操作系统发行版才包含所有最新的安全修复。请及时将您的设备 xref:os.adoc#update-software[更新到] Raspberry Pi OS 的最新版本。
自动更新 SSH 服务器
如果您使用SSH连接到Raspberry Pi,则值得添加专门更新SSH服务器的 cron
作业。以下命令可能作为每日 cron
任务运行,可确保您立即获得最新关于SSH安全修复,独立于正常的更新过程。
$ apt install openssh-server
提高SSH安全性
SSH 是远程访问 Raspberry Pi 的常用方法。默认情况下,SSH 需要用户名和密码。要使 SSH 更加安全,请使用 xref:remote-access.adoc#configure-ssh-without-a-password[基于密钥的身份验证]。
启用和禁用 SSH 用户
通过更改 sshd
配置,你还可以 允许 或 拒绝 特定用户。
$ sudo nano /etc/ssh/sshd_config
在文件末尾添加、编辑或附加以下行,其中包含您希望允许登录的用户名:
AllowUsers alice bob
您还可以使用 DenyUsers
来专门禁止某些用户名登录:
DenyUsers jane john
更改后,使用以下命令重启 sshd
服务,使更改生效:
$ sudo systemctl restart ssh
安装防火墙
有许多防火墙解决方案可供Linux使用。大多数使用底层 http://www.netfilter.org/projects/iptables/index.html[iptables] 项目来提供数据包过滤。该项目位于Linux网络过滤系统之上。默认情况下, iptables
安装在树莓派操作系统上,但没有设置。设置它可能是一项复杂的任务,一个提供比 iptables
更简单界面的项目是 https://www.linux.com/learn/introduction-uncomplicated-firewall-ufw[防火墙(UFW)]。这是Ubuntu中的默认防火墙工具,可以安装在您的树莓派上:
$ sudo apt install ufw
ufw
是一个命令行工具,不过也有一些图形用户界面可供使用。请注意,ufw
需要以超级用户权限运行,因此所有命令前都要加上 sudo
。也可以使用选项 --dry-run
来运行任何 ufw
命令,它可以显示命令的结果,而不做任何实际修改。
要启用防火墙,这也将确保它在启动时启动,请使用:
$ sudo ufw enable
要禁用防火墙并在启动时禁用启动,请使用:
$ sudo ufw disable
允许特定端口具有访问权限(我们在示例中使用了端口22):
$ sudo ufw allow 22
拒绝访问端口也很简单(同样,我们以端口22为例):
$ sudo ufw deny 22
您还可以指定在端口上允许或拒绝哪个服务。在此示例中,我们在端口22上拒绝tcp:
$ sudo ufw deny 22/tcp
即使您不知道它使用哪个端口,您也可以指定该服务。此示例允许ssh服务通过防火墙访问:
$ sudo ufw allow ssh
status命令列出了防火墙的所有当前设置:
$ sudo ufw status
这些规则可能相当复杂,允许阻止特定的IP地址,指定允许哪个方向的流量,或限制尝试连接的次数(例如帮助击败DDoS攻击)。您还可以指定要应用的设备规则(例如eth0、wlan0)。请参阅 ufw
手册页( man ufw
)以获取以下命令以外的完整详细信息。
使用TCP限制ssh端口上的登录尝试。如果IP地址在过去30秒内尝试连接6次或更多次,这将拒绝连接:
$ sudo ufw limit ssh/tcp
拒绝从192.168.2.1地址访问端口30
$ sudo ufw deny from 192.168.2.1 port 30
安装 fail2ban
当把 Raspberry Pi 用作服务器时,你必须设置防火墙以允许服务器流量通过。http://www.fail2ban.org[Fail2ban] 可以帮助确保服务器安全。Fail2ban 会检查日志文件并检查可疑活动,如多次暴力登录尝试。它能帮你省去手动检查日志文件,然后更新防火墙(通过 iptables
)来阻止入侵尝试的麻烦。
要安装 fail2ban
,请运行以下命令:
$ sudo apt install fail2ban
安装时,Fail2ban 会创建 /etc/fail2ban/jail.conf
。要启用 Fail2ban,请将 jail.conf
复制到 jail.local
:
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
该配置文件包含一组默认选项,以及用于检查特定服务异常的选项。要检查用于 ssh
的规则,请在编辑器中打开 jail.local
:
$ sudo nano /etc/fail2ban/jail.local
如果 [ssh]
部分还不存在,则创建该部分,并在该部分中添加以下行:
[ssh]
enabled = true
port = ssh
filter = sshd
backend = systemd
maxretry = 6
这将启用 Fail2ban 检查可疑的 ssh
活动,包括系统日志检查,并允许在阻止活动前重试六次。
同一文件中的 [default]
部分定义了默认禁止操作 iptables-multiport
,当达到检测阈值时,该操作将运行 /etc/fail2ban/action.d/iptables-multiport.conf
文件:
# Default banning action (e.g. iptables, iptables-new,
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overridden globally or per
# section within jail.local file
banaction = iptables-multiport
多端口禁止所有端口的所有访问。action.d
文件夹包含许多可供选择的动作配置文件,您可以用它们来定制服务器对可疑活动的反应。
例如,要在尝试三次失败后永久禁止一个 IP 地址,可将 [ssh]
部分中的 maxretry
值改为 3
,并将 bantime
设为负数:
[ssh]
enabled = true
port = ssh
filter = sshd
backend = systemd
maxretry = 3
bantime = -1
上一篇 – 树莓派超全系列教程文档–(23)内核参数
下一篇 – 树莓派超全系列教程文档–(25)使用无显示界面的树莓派