我如何仅从我的国家/地区建立 ssh 连接?

我如何仅从我的国家/地区建立 ssh 连接?

我尝试这样做:apt install geoip-bin geoip-database

我在 /usr/local/bin/ 中创建了这个脚本

纳米过滤器.sh

#!/bin/bash
ALLOW_COUNTRIES="SA"
if [ $# -ne 1 ]; then
  echo "Usage:  `basename $0` <ip>" 1>&2
  exit 0
fi

COUNTRY=`/usr/share/GeoIP $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`

[[ $COUNTRY = "IP Address not found" || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"
if [ $RESPONSE = "ALLOW" ]
then
  exit 0
else
  logger "$RESPONSE sshd connection from $1 ($COUNTRY)"
  exit 1
fi

chmod +X filter.sh

为了启用它,/etc/hosts.deny我添加了:

sshd: ALL

我补充说/etc/hosts.allow

sshd: ALL: aclexec /usr/local/bin/filter.sh %a

但问题是当我输入时bash filter.sh anyIP,出现/usr/share/GeoIP is a directory错误。

答案1

根据这些描述(geoip-bingeoip-数据库),/usr/share/GeoIP实际上是一个目录,是 geoip-database 包的一部分,其中包含两个数据库文件GeoIP.datGeoIPv6.dat

您不能使用目录名称作为命令。您也不能使用数据库文件作为命令。您必须使用可以运行的实际可执行命令的名称。这可能/usr/bin/geoiplookup来自包 geoip-bin(请参阅第一个链接中的描述)。

/usr/share/GeoIP因此,在脚本中将其替换为/usr/bin/geoiplookup,它就应该可以工作了。

相关内容