树莓派超全系列教程文档--(24)本地化设置、SSH及配置防火墙

本地化设置、SSH及配置防火墙

文章来源: 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)使用无显示界面的树莓派

相关推荐
还是鼠鼠25 分钟前
Node.js Session 原理简单介绍 + 示例代码
linux·javascript·vscode·node.js·编辑器·vim·express
offerwa1 小时前
Linux命令行精通:提高工作效率的终端技能
linux
mosaicwang1 小时前
OpenSSH版本的重大升级 :OpenSSH 10
linux
奔驰的小野码2 小时前
本地实现Rtsp视频流推送
java·linux·后端·ffmpeg
正点原子2 小时前
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB测试 #USB HOST #USB 鼠标
linux·功能测试·stm32·嵌入式硬件·计算机外设·usb
淋过很多场雨2 小时前
现代c++获取linux系统版本号
linux·开发语言·c++
运维老司机2 小时前
FRP内网穿透代理两个web页面(多端口内网穿透)
linux·frp·内网穿透
犯困的土子哥3 小时前
Linux:Ext系列文件系统
linux
努力努力再努力wz4 小时前
【Linux实践系列】:用c/c++制作一个简易的进程池
linux·运维·数据库·c++·c
liyongjun63165 小时前
CentOS 下 Zookeeper 常用命令与完整命令列表
linux·服务器·zookeeper·centos