![denyhosts 正在阻止现有用户从未知(新)IP 地址登录](https://linux22.com/image/33246/denyhosts%20%E6%AD%A3%E5%9C%A8%E9%98%BB%E6%AD%A2%E7%8E%B0%E6%9C%89%E7%94%A8%E6%88%B7%E4%BB%8E%E6%9C%AA%E7%9F%A5%EF%BC%88%E6%96%B0%EF%BC%89IP%20%E5%9C%B0%E5%9D%80%E7%99%BB%E5%BD%95.png)
我已经在 Ubuntu 12.04 上设置并运行了拒绝主机。它显然运作良好,但过于严格。
我可以从预先添加到hosts.allow 的任何IP 地址登录。我的 sshd_config 不允许密码登录,只能使用密钥登录。
但是,使用我的有效 RSA 密钥(适用于我已知的 IP 地址)从新 IP 地址登录时,服务器会在 /var/log/auth.log 中显示此消息:
6 月 23 日 19:16:31 MyServerName sshd[5949]:拒绝从 hostname.comcast.net (XXX.XXX.XXX.XXX) 连接
为了进行连接,我所要做的就是将新的 IP 地址添加到 /etc/hosts.allow 中。就是这样。然后我就可以登录了:
Jun 23 19:45:03 MyServerName sshd[6024]:接受来自 XXX.XXX.XXX.XXX 端口 61236 ssh2 的用户名公钥
6月23日 19:45:03 MyServerName sshd[6026]:pam_unix(sshd:session):会话打开对于用户用户名 (uid=0)
我没有更改任何默认的拒绝主机配置值,它工作得很好——只是它太严格了。
(或者是否有其他内容读取/etc/hosts.allow?)
我需要允许任何linux用户(其帐户已经存在于服务器上)从任何IP地址登录,而无需提前在服务器上进行更改(例如将IP添加到hosts.allow中)。
EvenBitTony 建议 denyhosts 应该允许这种行为。为了回应EightBitTony,我更改了这个问题和标题。
答案1
拒绝主机仅阻止失败的登录(在预定义的计数之后)。据我所知,它并没有先发制人地阻止人们。
答案2
您不能同时阻止较低级别 (IP) 上的访问并要求较高级别协议 (SSH) 覆盖该阻止 – 仅仅是因为永远不会到达较高级别(在阻止的情况下)。
您可以限制一般用户的登录主机,并只允许一个用户从任何地方登录。但这不是一个动态的解决方案。
您还可以运行两个sshd
实例,一个使用 denyhosts,另一个仅可由该用户使用。不幸的是,似乎不可能在配置中禁用 libwrap,因此您可能必须sshd
使用相应的选项进行编译或在虚拟机或容器中运行第二个实例。
答案3
我想我发现了问题。我的 /etc/hosts.deny 包含这两行:
ALL: PARANOID
sshd: ALL
这看起来像问题吗?
这是我的 /etc/hosts.deny 的一部分:
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#
# Example: ALL: some.host.name, .some.domain
# ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
ALL: PARANOID
sshd: ALL
ALL: 200.125.165.10
ALL: 203.144.65.53
ALL: 85.31.203.35
...