【树莓派不吃灰】基础篇⑮ SSH远程访问安全,涉及/etc/hosts.allow白名单 和 /etc/hosts.deny黑名单、ufw防火墙、密钥登录

这篇具有很好参考价值的文章主要介绍了【树莓派不吃灰】基础篇⑮ SSH远程访问安全,涉及/etc/hosts.allow白名单 和 /etc/hosts.deny黑名单、ufw防火墙、密钥登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

  • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
  • ❤️ 本篇创建记录 2022-11-06 ❤️
  • ❤️ 本篇更新记录 2022-11-06 ❤️
  • 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言 📝
  • 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
  • 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志🔥

1. 前言

在前面学习 【树莓派不吃灰】使用frp内网穿透,实现远程访问树莓派 的时候,我们涉及到一个SSH安全访问问题。

把内网的服务暴露给外网,意味着如果不加限制,那么在外网的任意一个角落都能访问到我们的内网服务,这就会涉及到安全问题。

  • 一些不法分子通过SSH登录你的内网服务器植入病毒,暴力破解,消费你的服务器资源

所以这篇我们讲一些SSH常规安全策略。

2. SSH安全策略

对于外网的访问,我们按照TCPIP协议分层从下往上来分析:

  • 信任特定IP地址访问
  • 给SSH加上特定复杂账号密码

建议安全策略流程:

  • 优先使用sshKey的方式 —— 对应 2.3方式
  • 其次如果发现还是有人尝试破解,再限制IP以及防火墙

2.1 设置 /etc/hosts.allow 和 /etc/hosts.deny

在Linux系统/etc目录下,有两个配置文件:hosts.allow & hosts.deny。

  • hosts.allow(白名单)
    允许某些ip地址/地址段访问某些资源或服务
  • hosts.deny(黑名单)
    禁止某些ip地址/地址段访问某些资源或服务

这两个文件配置选项一样,主要是功能刚好相反。
记住:

当两个文件有同样的配置(比如针对同一个IP)时,hosts.allow的优先级更高,也就是说以hosts.allow配置为准。allow设定可越过deny限制。

2.1.1 配置格式

两个文件配置格式一样,如下:

服务:地址:允许/禁止

其中,各个参数如下:

  • 服务
    服务可以是sshdvsftpdsmbdtelnetdhttpd,也可以是all(所有服务)。看名字就知道对应哪些服务。
  • 地址
    地址可以是某个具体的ip地址,也可以是地址段,比如192.168.1.1,192.168.1.0/24,192.168.1.,192.168.3.* 等等
  • 允许/禁止
    第三项是allow或者deny,其中,:deny:allow可以省略不写。
2.1.2 配置案例
  • 允许192.168.1.1主机sshd远程登陆

编辑hosts.allow文件,

  • 写入sshd:192.168.1.1:allow
  • 或者 sshd:192.168.1.1
  • 允许192.168.1.0/24网段的所有主机远程访问所有资源

编辑hosts.allow文件,

  • 写入 all:192.168.1.0/24:allow
  • 或者 all:192.168.1.
  • 禁止192.168.1.0/24主机telnet远程登陆

编辑hosts.deny文件,

  • 写入 telnetd:192.168.1.*:deny
  • 或者 telnetd:192.168.1.0/24
  • 限制所有的ssh,除非从192.168.1.0——127上来

编辑hosts.allow文件,

  • 写入sshd:192.168.1.0/255.255.255.128:allow

编辑hosts.deny文件,

  • 写入sshd:all:deny
  • 限制所有人的TCP连接,除非从192.168.1.0——127上来

编辑hosts.allow文件,

  • 写入all:192.168.1.0/255.255.255.128:allow

编辑hosts.deny文件,

  • 写入all:all:deny
  • 限制192.168.1.0——127对所有服务的访问

编辑hosts.deny文件,

  • 写入all:192.168.1.0/255.255.255.128:deny

知识点:

IP地址范围的写法有若干种,主要的三种是:

  • 网络地址——子网掩码方式:192.168.1.0/255.255.255.0
  • 网络地址方式:218.64.(即以218.64打头的IP地址)
  • 缩略子网掩码方式,既数一数二进制子网掩码前面有多少个“1”比如:218.64.87.0/255.255.255.0《====》218.64.87.0/24
2.1.3 注意要点
  • 一般情况下,hosts.allow和hosts.deny结合起来一起使用,才能保证更好的安全性。即在hosts.deny文件中写入“all:all:deny”,禁止一切ip地址远程访问所有资源,然后在hosts.allow文件中添加特定的ip地址允许远程访问资源即可。

  • 设置拒绝所有之前,务必先配置好allow中的规则

  • ip地址可以是私网地址,也可以是主机所在的公网地址

  • 当hosts.allow和hosts.deny有ip地址冲突时,以hosts.allow的设置为准。

2.1.4 配置SSH某一个IP地址访问树莓派

假如我们经常在公司家里两边跑,并且公司有一个固定IP地址段。那么我们就可以设置。

  • /etc/hosts.deny 是黑名单列表,先在其中加上下面一行,阻止所有的 ssh 登录

sshd:all

  • /etc/hosts.allow 是白名单,在其中加上允许访问的 IP 列表

sshd:111.222.333.444

结果就是只允许 IP 111.222.333.444 的主机登录(如果IP地址经常变,这个是有点麻烦!建议可以设置固定IP)。但是记住,这里ssh是应用层协议,外面访问的流量还是会流入树莓派。

流量 -> 物理网卡 -> 网络层 -> 传输层 -> 应用层

所以如何只是配置了sshd,只是说明被ssh应用层拦截而已。要想狠一点,sshd可以换成all。

那有没有办法在更底层拦截呢?

2.2 ufw 防火墙设置黑白名单

网络层传输层阻止了进来的流量

UFW,或称 Uncomplicated Firewall,是 iptables 的一个接口,为不熟悉防火墙概念的初学者提供了易于使用的界面,同时支持 IPv4 和 IPv6,广受欢迎。

UFW本质上就是配置黑名单白名单规则

2.2.1 安装ufw

输入命令:

sudo apt-get install ufw -y

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.2.2 常用命令(先了解莫动手)

直接输入 ufw --help 查看命令:

ufw --help

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
包括了配置命令以及app命令。

2.2.2.1 列出所有应用程序配置策略

sudo ufw app list

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.2.2.2 查找有关配置文件和包含规则的更多信息

sudo ufw app info 应用名字

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.2.2.3 允许SSH连接

备注:在服务器上正式启用 UFW 防火墙之前,需要事先添加允许 SSH 连接的传入规则;否则,即使UFW开启SSH连接命令,也无效

  • sudo ufw allow ssh
  • sudo ufw allow http

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.2.2.4 允许指定端口连接

以下命令主要是针对tcp连接:

  • sudo ufw allow 3306/tcp
  • sudo ufw allow 80/tcp
  • sudo ufw allow 8080/tcp
  • sudo ufw allow 22/tcp

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.2.2.5 允许指定端口范围内连接

除允许单个端口连接之外,UFW 还允许直接配置端口范围。在使用 UFW 的端口范围时,必需指定 tcp 或 udp 协议。

  • sudo ufw allow 7100:7200/tcp
  • sudo ufw allow 7100:7200/udp
2.2.2.6 允许指定特定IP地址入站
  • sudo ufw allow from XX.YY.ZZ.MM

XX.YY.ZZ.MM 表示对应的ip地址。

2.2.2.7 拒绝指定特定IP地址入站
  • sudo ufw deny from XX.YY.ZZ.MM

XX.YY.ZZ.MM 表示对应的ip地址。

2.2.2.8 启用UFW配置

sudo ufw enable

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.2.2.9 查看所有策略

sudo ufw status numbered

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
上面就是我们刚刚配置的全部规则。

  • 最左边一列是编号,如果要删掉某一条规则可以用到它
  • 通过英文意思,ALLOW IN (允许流量进入)From (从哪里来)To(到哪里去,也就是我们本机树莓派)
2.2.2.10 删除UFW策略

方式1:指定删除编号为XX的防火墙策略

sudo ufw delete XX

方式2:直接删除配置的规则,只需在原始规则前加上 delete 即可

sudo ufw delete allow http
sudo ufw delete allow 7100:7200/tcp
sudo ufw delete allow 80/tcp

2.2.2.11 禁用UFW配置

sudo ufw disable

2.2.2.12 重置UFW配置

sudo ufw rest

重置 UFW配置项时,系统会禁用 UFW 并删除所有活动规则。

2.2.2.13 设置默认策略

出去的流量全部放行,进来的流量全部阻止。

sudo ufw default allow outgoing
sudo ufw default deny incoming

2.2.2.14 设置完规则后,重启或执行命令

sudo ufw reload

即可完成 UFW 配置。

2.3 配置只使用密钥登录SSH

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。所以我们这里就尝试制作公钥登录。

了解内容:如果是经常玩github、gitee、gitlab这些的同学,就一定知道ssh-key的重要性,当我们把我们本地生成的ssh公钥上传到服务器后台的时候,后面所有的提交内容都不需要输入账号密码了。

  • Git设置SSH

还记得

  • 【树莓派不吃灰】SSH 连接报错“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”的解决

讲到一个ssh连接失败问题,它本质上也是依赖于本地SSH缓存去校验一些认证信息。

这里我们会用到一个好用的ssh工具——FinalShell(FinalShell - 一个免费且好用的ssh工具) 。

Windows版下载地址:

  • http://www.hostbuf.com/downloads/finalshell_install.exe

macOS版下载地址:

  • http://www.hostbuf.com/downloads/finalshell_install.pkg

操作步骤:

  • 建立两个ssh连接配置(pi & root用户)
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
  • 测试连接效果
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
  • 直接查看资源使用率
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
2.3.1 登录树莓派制作密钥

创建公钥我们要使用到 ssh-keygen

#命令格式
ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/filename

其中参数说明:

-m 参数指定密钥的格式,PEM(也就是RSA格式)是以前使用的旧格式,很多ssh客户端都用这个格式。
-t:指定要建立的密钥类型
-b:指定密钥长度
-f:指定用来保存密钥的文件名 (~/.ssh/filename,这里我定义为Rpi3B.pem)

配置过程(最好输入一个密码,比如123456):
/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
密钥对成功创建,文件所在位置:/home/pi/.ssh/。其中 :

  • Rpi3B.pem 私钥
  • Rpi3B.pem.pub 公钥
2.3.2 安装公钥到树莓派

完成公钥的安装后,为确保连接成功,文件权限也要确保配置正确。

pi@raspberrypi:~ $ cd .ssh/
pi@raspberrypi:~/.ssh $ cat Rpi3B.pem.pub >> authorized_keys
pi@raspberrypi:~/.ssh $ ls -al
pi@raspberrypi:~/.ssh $ chmod 600 authorized_keys
pi@raspberrypi:~/.ssh $ chmod 700 ~/.ssh 

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

2.3.3 下载私钥到本地电脑

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
这个文件非常重要,好好保存。

2.3.4 finalShell 配置密钥登陆

/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
/etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
登录成功。

2.3.5 修改SSH配置,只允许密钥登录

sudo nano /etc/ssh/sshd_config

找到几个关键的配置点:

  • 允许使用密钥登录
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
  • 禁止密码登录
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
  • 最终配置
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
    注意:

我们可以结合ufw配置,密码登录只有内网生效即可。

如果设备暴露在公网上,当你完成全部设置,并以密钥方式登录成功后,同时禁用密码登录功能,就可以加强其安全性防止ssh暴力破解。

2.3.6 重启sshd服务

配置改完之后重启ssh服务:

sudo service sshd restart

2.3.7 再次测试三种登录方式
  • 密码登录
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
  • 本地密钥登录
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派
  • 远程密钥登录
    /etc/hosts.allow,树莓派不吃灰,ssh,安全,运维,linux,树莓派

3. 总结

本篇围绕着如何在外网上面更安全访问我们的树莓派服务,并且接受了多种方式进行限制,但是博主还是比较建议方式3。文章来源地址https://www.toymoban.com/news/detail-784271.html

参考文献

  • Linux之防火墙管理篇[Ubuntu:ufw]
  • 树莓派ssh连接使用公钥免密登录

到了这里,关于【树莓派不吃灰】基础篇⑮ SSH远程访问安全,涉及/etc/hosts.allow白名单 和 /etc/hosts.deny黑名单、ufw防火墙、密钥登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无公网IP,如何使用公网SSH远程访问家中的树莓派?

    本篇文章主要讲解树莓派+cpolar组合的作用,可以实现: 如何在 Raspberry Pi 中启用 SSH 如何通过 SSH 连接到 Raspberry Pi设备 如何远程在任何地点访问家中的树莓派 在使用树莓派 (Raspberry Pi) 可以做的所有事情中,将其用作为家庭网络中的服务器非常流行。微小的占地面积和低功耗

    2024年02月07日
    浏览(48)
  • 《内网穿透》无需公网IP,公网SSH远程访问家中的树莓派

    本篇文章主要讲解树莓派+cpolar组合的作用,可以实现: 如何在 Raspberry Pi 中启用 SSH 如何通过 SSH 连接到 Raspberry Pi设备 如何远程在任何地点访问家中的树莓派 在使用树莓派 (Raspberry Pi) 可以做的所有事情中,将其用作为家庭网络中的服务器非常流行。微小的占地面积和低功耗

    2024年02月12日
    浏览(41)
  • 无公网IP环境固定地址远程SSH访问本地树莓派Raspberry Pi

    🔥 博客主页 : 小羊失眠啦. 🎥 系列专栏 : 《C语言》 《数据结构》 《Linux》 《Cpolar》 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本篇文章主要讲解树莓派(Raspbe

    2024年02月04日
    浏览(50)
  • 树莓派最基础入门二:开启ssh和远程桌面连接

            硬件: 烧好系统的树莓派一个、系统卡、读卡器         软件: putty、远程桌面连接(win10)         putty: 用于树莓派的ssh连接         远程桌面连接: 用于远程连接树莓派的图形化界面         putty:          链接:https://pan.baidu.com/s/1qtgu7ncDd54Q_JIcGw4QNQ 

    2024年02月01日
    浏览(69)
  • Linux基础——远程访问及控制(SSH)

    是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性。 SSH优点: 数据传输是加密的,可以防止信息泄漏 数据传输是压缩的,可以提高

    2023年04月26日
    浏览(42)
  • Linux中SSH配置与使用:安全的远程访问方式

    SSH(Secure Shell)是一种加密的网络协议,为Linux系统提供了安全、加密的远程访问方式。通过正确配置和使用SSH,管理员可以远程管理服务器,传输文件,并确保通信的机密性。本文将深入探讨Linux中SSH的配置和使用,提供详实的示例代码,帮助管理员更全面地了解和运用SS

    2024年04月28日
    浏览(31)
  • Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析

    SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。以下是关于如何生成和使用 SSH 密钥对的详细步骤: 生成 SSH 密钥对 打开终端或命令行工具。 在命令行中运行以下

    2024年03月09日
    浏览(61)
  • SSH协议详解:安全远程访问的守护神(C/C++代码实现)

    在深入探讨SSH的世界之前,了解网络安全的一些基本概念至关重要。网络安全是指保护计算机网络以防止未授权访问、数据泄露或破坏。这通常涉及多种机制,包括加密、身份验证和数据完整性校验。SSH处于这些机制的核心地位,因为它为远程通信提供了一种加密隧道,确保

    2024年04月23日
    浏览(39)
  • 【树莓派】网线远程连接电脑和树莓派,实现SSH连接

    目录 1、硬件连接; 2、电脑端: 3、查找树莓派的IP地址 4、开启树莓派的SSH接口 5、putty 6、命令行 参考文章 通过网线连接笔记本与树莓派 开启SSH和VNC功能 无显示器安装树莓派 实现:打开putty输入树莓派地址使用ssh方式登陆,用命令行操作树莓派 使用 网线 将笔记本电脑和

    2024年01月19日
    浏览(63)
  • 树莓派ssh远程连接和xrdp远程桌面连接

    远程连接树莓派有ssh连接和远程桌面连接两种方式,前者只能以命令行方式远程操作树莓派,而后者可以通过远程桌面的形式操作,虽然大部分的操作可以通过命令行操作实现,但是有一些操作通过桌面进行更为方便。因此本文将分别介绍ssh远程连接和xrdp远程连接在无线网络

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包