在 CentOS 上使用hosts.allow/hosts.deny 拒绝来自未列出国家/地区的 SSH 连接

在 CentOS 上使用hosts.allow/hosts.deny 拒绝来自未列出国家/地区的 SSH 连接

我尝试了几个小时让我的自定义脚本在使用时工作hosts.allow/hosts.deny,以防止连接到 SSH 和其他支持服务TCP 包装器来自未列出的国家。

SSH 示例:

  1. 主机拒绝文件

    sshd : ALL

  2. 主机.允许文件

    sshd: ALL: spawn /usr/local/bin/country_filter %h

  3. 国家过滤器脚本:


#!/bin/bash

# Specify the two-letter ISO Country Code(s) to accept
ALLOW_COUNTRIES="RU\|CY" # list of country codes in the exampled format ("RU\|GR\|CY")

COUNTRY=`/usr/bin/geoiplookup $1 | /bin/grep -w $ALLOW_COUNTRIES`

[[ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"

if [ $RESPONSE = "ALLOW" ]
then
  echo "$RESPONSE"
  exit 0
else
  echo "$RESPONSE"
  exit 1
fi

上面的脚本在控制台上运行得很好,但我不能使其工作,使用时主机.允许

我在这里缺少什么?

答案1

如手册页中所述hosts_options(5),标准输出被重定向到/dev/null,因此您没有机会从 获取输出echo。当您希望考虑退出状态时,您应该使用aclexec而不是spawn.事实上,手册页说aclexec:“连接将被允许或拒绝,具体取决于命令是否返回 true 或 false 退出状态。”

相关内容