限制仅特定国家IP访问SSH的配置问题:执行过滤脚本时提示/usr/share/GeoIP是目录错误
看起来你遇到的核心问题是脚本里调用的GeoIP查询路径写错啦!咱们一步步来修正这个问题:
1. 修正脚本中的IP查询命令
你脚本里写的/usr/share/GeoIP是GeoIP数据库的存放目录,并不是可执行命令。你应该用geoip-bin包提供的geoiplookup工具来做IP查询。
把脚本里的这一行:
COUNTRY=`/usr/share/GeoIP $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`
替换成:
COUNTRY=$(geoiplookup $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1)
这里顺便提一句,用$(...)替代反引号来执行命令是更现代、可读性更好的写法,推荐使用。
2. 修正脚本权限的小错误
你设置权限时写的chmod +X filter.sh里的大写X是个小问题,应该改成小写的x:
chmod +x /usr/local/bin/filter.sh
大写X只会给目录或本身已有执行权限的文件加权限,小写x才是给普通脚本文件添加执行权限的正确方式。
3. 验证脚本功能
修改完成后,先单独测试脚本是否能正常工作:
bash /usr/local/bin/filter.sh 8.8.8.8
你可以替换成任意测试IP,比如沙特的IP,看看脚本是否能正确识别国家代码,并返回对应的允许/拒绝状态(返回0表示允许,1表示拒绝)。
另外,你也可以先单独运行geoiplookup 你的测试IP,确认工具本身能正常返回国家信息,比如类似这样的输出:
GeoIP Country Edition: US, United States
如果这一步有问题,可能需要重新安装geoip-bin或geoip-database包。
4. 确认hosts配置的有效性
当脚本正常工作后,记得重启一下sshd服务(比如systemctl restart sshd),确保hosts.allow和hosts.deny的配置生效。
备注:内容来源于stack exchange,提问作者ibraheem mohsen
相关产品推荐
相关产品推荐

