最近又开始了异地工作和生活,
对我来说能随时管理家庭内网又成了比较重要的事。
(否则就浪费了近 100mbps 的上行?)

内网部分设备开启了 SSH 服务,
常见的方案就是利用路由器做“跳板”,
会比直接 dst-nat 到特定的 SSH 端口要“相对”更安全。

我使用的是 RouterOS (下称 ROS ),
下面来看看如何配置——

首先当然是准备公钥登录。
我们希望为跳板机使用独立的密钥对,
假设你已将其生成对并安全地存放于本地 ~/.ssh/id_rsa_bastion
请将其通过 WebFig 或 Winbox 上传至 ROS 存储区。

6.31rc10 之后 ROS 终于支持了 RSA 密钥,
因此建议放弃 DSA 并至少使用 RSA 2048 强度。

然后确保你在 ROS 开启了 SSH 服务并提升了安全要求:

/ip service enable ssh
/ip ssh set strong-crypto=yes

当然,很重要地,
请别忘了允许 SSH 转发:

需注意的是若之前曾将此项设为 yes 的话,
则之前某次 ROS 版本升级曾将其改为 remote
这是很多人(包括我)一开始失败的原因。
具体配置项含义请参考官网

/ip ssh set forwarding-enabled=local

现在可以先用现有账号 SSH 尝试登录试试。
若成功,
我们继续为跳板机新建一个仅有 SSH 权限的用户组,
如名叫 ssh_bastion

/user group add name="ssh_bastion" policy=ssh,!local,!telnet,!ftp,!reboot,!read,!write,!policy,!test,!winbox,!password,!web,!sniff,!sensitive,!api,!romon,!dude,!tikapp

/user
add

跟着交互式命令行我们增加一个用户,如 joe_black
将其加入刚建立的 ssh_bastion 组,
并为其导入之前已上传的公钥:

/user ssh-keys import public-key-file=id_rsa_ehome.pub user=chappell

最后我们修改 ~/.ssh/config 配置:

Host 1.home
    HostName 1.0.0.1
Host 2.home
    HostName 1.0.0.2
Host *.home
    ProxyJump bastion
    ForwardAgent no
    IdentityFile ~/.ssh/id_ed25519_home
Host home.bastion
    HostName ddns.example.tld
    User joe_black
    IdentityFile ~/.ssh/id_rsa_bastion
Host *
    PubkeyAuthentication yes

重新进行连接测试:

ssh 1.home -vvv

ROS 的 SSH 服务和 User 权限还可以增加 IP 段限制,
比如可以限定仅接受来自某些公网 IP 的访问来提升安全,
但终究仍让人觉得不够强大。
还请 ROS 高手不吝赐教。

最终我仍回到类似此文所述的方案,
优势是设置好规则之后便能适用于各种代理终端,
配合 Cloud-init 和 RancherOS 也方便部署 fail2ban, knock 等来进一步提升安全,
有空再另撰文总结。

标签: RouterOS

已有 2 条评论

  1. 陈其林Chaney 陈其林Chaney

    超哥去哪里发展了,才发现dingding找不到超哥了,略想念。。。

    1. Chao QU Chao QU

      @陈其林Chaney:
      正在创业中~
      遥祝大家一切顺利。

添加新评论