sshd_config - “匹配地址“ 不匹配

sshd_config - “匹配地址“ 不匹配

总长DR

sshd_配置(5),此配置段:

Match Address fe80::/10
        PasswordAuthentication yes

...未按预期匹配链路本地 IPv6 地址。为什么以及如何解决?


我正在尝试配置sshd为仅在从本地地址连接时允许密码身份验证。否则需要公钥认证。这是 中的相关配置sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication no

# Allow password auth on local network
Match Address 169.254.0.0/16,192.168.0.0/16
        PasswordAuthentication yes
Match Address fe80::/10
        PasswordAuthentication yes

什么有效:

  • 正如预期的那样,在所有地址上启用了公钥身份验证。
  • 169.254.0.0/16,192.168.0.0/16正如预期的那样,通过 IPv4 连接时在地址范围上启用了密码身份验证。

什么不起作用:

  • fe80::/10通过 IPv6 连接时,不会在地址范围上启用密码身份验证。

腻子错误

相关行var/log/secure

sshd[9457]: Connection reset by fe80::39c9:9db5:5a2a:1299%eth0 port 60468 [preauth]

...这是一个应该匹配的地址fe80::/10

我已完成的清单项目:

  • IPv6 流量未被防火墙阻止
  • sshd正在监听两个堆栈
$ netstat -tupln | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      8903/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      8903/sshd
  • 组合/拆分MatchIPv4 和 IPv6 的语句不会 执行任何操作Match Address 169.254.0.0/16,192.168.0.0/16,fe80::/10 这也不起作用。
  • 将 IPv6 地址放在方括号中 Match Address [fe80::]/10 不行。
  • sshd不记录任何配置错误var/log/secure
  • 不是客户端问题 - 尝试了 OpenSSH、PuTTY、WinSCP 并得到了相同的错误

版本:

sshd在 CentOS 7 上运行

$ uname -msr
Linux 5.4.72-v8.1.el7 aarch64
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

我已经在/r/sysadmin不和谐服务器上问过这个问题,人们的反应是“奇怪”。查看我们的完整对话这里如果你感兴趣。它有一些关于我尝试过的不同事情的更多小细节。

答案1

在尝试了我能想到的所有方法之后,我找到了一个适合我的解决方案。我想允许对 LAN 上的用户进行密码身份验证,但只允许来自 LAN 外部的基于密钥的身份验证,这就是我最终找到这篇文章的原因。

从其他阅读中,我看到一些指示表明方括号应该与 ipv6 地址一起使用,并且我还在 sshd 日志中看到它记录了当我使用 ipv6 连接时我的连接来自的接口名称(即eth0, )。wlan0

我决定测试所有的组合,直到找到有效的组合。我输入了完整的 ipv6 地址,并且没有使用 /10 以确保其格式不会干扰,并且我尝试了带或不带接口名称以及带或不带括号(并将它们放在地址的不同部分周围)我可以肯定地说 sshd 不喜欢括号。任何时候我将它们包含在内都不起作用。

即使我使用了完整的精确 ipv6 地址,如果没有指定接口名称,它也无法工作,因此看起来 sshd 期望 ipv6 地址不包含方括号,就像在 URL 中一样,并且期望它将包含接口名称什么。

最后一部分是 /10,包含所有链接本地地址。我最初期望正确的形式,fe80::/10%eth0但令人惊讶的是,这不起作用。相反,sshd 希望您编写fe80::%eth0/10.我想如果你将 /10 视为修改整个 ip 地址,其中正确且完整的 ipv6 地址是某个数字和接口名称,而 ipv4 只是数字,那么这种情况是有意义的,但无论哪种情况,这种扭曲都已解开,我有一个解决方案。

这是我用来允许 ipv4 和 ipv6 本地连接使用密码进行身份验证的完整匹配块:

Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fe80::%eth0/10
        PasswordAuthentication yes

显然,您需要将名称修改eth0为您机器的正确接口名称(您可以查看它们的列表,ifconfig或者在尝试通过 ipv6 连接时检查 sshd 日志,以查看您的连接使用的接口)如果您想支持来自多个接口的连接,我认为您需要,fe80::%name/10为每个接口指定。

我希望这个答案可以帮助其他偶然发现这个帖子的人(也许还有OP,尽管我不确定五个月后这会有多大帮助)

相关内容