另类 OpenSSH 公共网络环境的访问控制

环境描述
服务器 192.168.0.1 的公共网络地址是 218.92.5.110,由 NAT 映射了 22 端口,即内网用户可访问 192.168.0.1:22,公网用户可访问 218.92.5.110:22。

功能需求
1. 公网地址只能登录用户 jack。
2. 内网地址可以登录任意用户。

实现原理
利用 OpenSSH 的 ForceCommand 参数强制用户登录后执行指定程序 shield,此程序验证环境变量 SSH_CLIENT 中的地址是否在白名单。如果为允许地址即运行环境变量 SHELL 中指定的程序;否则输出访问禁止信息后退出。

shield 程序源代码

#!/bin/bash
# Heiher <admin@heiher.info>
 
ALLOWED_NETWORKS=(192.168.0.)
 
for NETWORK in ${ALLOWED_NETWORKS[@]}; do
	if [ "${SSH_CLIENT:0:${#NETWORK}}" = "${NETWORK}" ]; then
		if [ -n "${SSH_ORIGINAL_COMMAND}" ]; then
			exec ${SSH_ORIGINAL_COMMAND}
		else
			exec ${SHELL}
		fi
	fi
done
 
echo 'Access denied!'
 
exit 1

Over!

Leave a Reply

Your email address will not be published. Required fields are marked *