拒绝主机忽略 /etc/hosts.allow

拒绝主机忽略 /etc/hosts.allow

我正在运行Ubuntu 13.10(不是 LTS,我知道……)。我已经denyhosts安装了。我有/etc/hosts.deny/etc/hosts.allow。我已将 2 个 IP 添加到hosts.allow(家庭 + 工作)。但是,每当我从这些 IP 登录时,我都会收到一封电子邮件,告诉我发生了可疑登录。

我尝试hosts.allow用两种不同的方法格式化我的文件。但似乎都没有用。

首先:

...
sshd: iii.i.i.iii : allow
sshd: iii.i.i.iii : allow

第二:

...
sshd: iii.i.i.iii
sshd: iii.i.i.iii

我不知道这是否相关,但如果我注意到了某些我无法解释的事情。

如果我跑

$ sudo service denyhosts restart
 * Stopping DenyHosts denyhosts                                                                                                                                                                                                                                        [ OK ] 
/etc/init.d/denyhosts: 44: test: /etc/hosts.deny: unexpected operator
 * Starting DenyHosts denyhosts  

但是如果我在 hosts.deny 或 hosts.allow 中搜索错误,则找不到任何错误:

sudo test -e /etc/hosts.allow
sudo test -e /etc/hosts.deny

在我忘记之前,我的/etc/denyhosts.conf文件:

...
# Most operating systems:
HOSTS_DENY = /etc/hosts.deny
#
# Some BSD (FreeBSD) Unixes:
HOSTS_DENY = /etc/hosts.allow
...

正如评论所说,/etc/hosts.allow 显然在某些 BSD Unix 上使用。这是问题吗?在我读过的一些 Ubuntu 指南中,显然不是这样。

编辑:

文件/etc/init.d/denyhosts运行:

HOSTS_DENY=$(grep ^HOSTS_DENY $CONFIG  | cut -d = -f 2)

在我的例子中它同时hosts.allow返回hosts.deny

答案1

你没有注释掉这两个,所以这让我相信denyhosts正在使用/etc/hosts.allow。注释掉第二HOSTS_DENY行,然后重新启动denyhosts。

如果您仍然收到电子邮件,则需要将其添加SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS = NO到您的denyhosts.conf文件中。这需要DenyHosts 0.6或更高版本。请参阅了解详情。

您还需要创建一个allowed-hosts包含受信任 IP 地址的文件,每行一个。该文件位于WORK_DIR配置中定义的同一文件夹中。

答案2

您需要注释掉HOSTS_DENY = /etc/hosts.allow行,因为您使用的是 Ubuntu 而不是 BSD 系统。

然后,您需要了解hosts.(allow|deny)文件的处理方式。使用这些文件的服务始终在第一次匹配hosts.allow之前进行检查hosts.deny并在第一次匹配时停止。因此,如果您在hosts.allow文件中授予 IP 地址访问权限,则无论 的内容如何,​​都将授予访问权限hosts.deny。您无需关心 Denyhosts 是否向该文件添加更多地址。hosts.allow文件基本上允许您将 IP 地址列入白名单。

请参阅hosts_access(5)手册页以了解更多信息。

答案3

有时 sshd 编译时不支持 hosts.allow 和 hosts.deny(tcp-wrappers 支持)。在我安装的 Ubuntu 18.04 LTS 上就出现了这种情况。要检查您的 sshd 版本是否支持它,请运行以下命令:

  1. 哪个 sshd
  2. 字符串 /usr/sbin/sshd | egrep'hosts.(allow|deny)'

上面的第 1 行用于检查 sshd 的具体安装位置(例如,在我的 RedHat 机器上它是 /sbin/sshd,而 Ubuntu 是 /usr/sbin/sshd),因此请相应地修改第 2 行。

如果不支持 hosts.deny + hosts.allow,则第 2 行的输出为空。在这种情况下,您需要从 openssh.com 下载源代码并重建它:

./configure --with-libwrap 
make
sudo make install

相关内容