我有这个内容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
你不需要: allow
in 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 问题)