SSH hosts.deny 和 hosts.allow

SSH hosts.deny 和 hosts.allow

我有这个内容hosts.deny(末尾有一个新行):

#
# hosts.deny    This file describes the names of the hosts which are
#       *not* allowed to use the local INET services, as decided
#       by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!

sshd : ALL

这是hosts.allow

#
# hosts.allow   This file describes the names of the hosts which are
#       allowed to use the local INET services, as decided
#       by the '/usr/sbin/tcpd' server.
#

sshd: our.ip.add.ress: allow

然后,我们执行这一段代码来重新启动SSH:

/etc/init.d/sshd restart

再次,这里末尾有一个新行。但是,我们仍然可以从另一台服务器访问 SSH 服务并尝试登录。我们做错了什么?

答案1

您的 /etc/hosts.deny,我认为您有语法错误。“sshd”和冒号之间不应该有空格。因此,它应该是:

sshd: ALL

在“允许”方面,我有如下几行:

sshd: 192.168.1.1

IP 地址后没有尾随文本。

答案2

你不需要: allowin hosts.allow。它应该看起来像这样:

sshd: 192.168.2.200

如果您有控制台访问权限,您可以尝试阻止所有使用 tcpwrappers 的内容,以防服务名称出现问题:

hosts.deny

ALL: ALL

hosts.allow

ALL: 192.168.2.200

答案3

是否值得检查对 tcp-wrappers 的支持是否实际上已被编译到您所使用的 sshd 中?

根据 o'reilly snail 书,它需要使用 --with-libwrap 或 --with-tcp-wrappers 选项进行编译。

(我不确定大多数发行版是否默认启用此功能,或者打开 ssh 的默认编译时选项是什么)。

我刚刚检查了我的操作:

ldd /usr/sbin/sshd | egrep 'wrap'

这表明

libwrap.so.0 => /lib64/libwrap.so.0 (0x00002ba50fa9c000)

(h/t至这个 Stack Exchange 问题

相关内容