有没有办法配置 OpenVPN 服务器,以便它限制通过操作系统连接到它的客户端?
我们目前使用 OpenVPN 服务器将笔记本电脑连接到 AWS 上的服务器(在 VPC 中运行)。我们的一位客户要求我们禁止移动设备进行 VPN 访问 - 因此我们想阻止 Android、iOS 和 Windows Phone 客户端。
答案1
如果使用错误的操作系统,请使用 IV_PLAT 对等信息和连接脚本(在服务器上)拒绝连接(以非零退出)
复制/粘贴至此处,以供子孙后代使用。
将以下行附加到 basic-udp-server.conf 服务器配置文件:
script-security 2 client-connect /etc/openvpn/cookbook/example9-11.sh
接下来创建连接脚本:/etc/openvpn/cookbook/example9-11.sh
#!/bin/bash # Redirect the default gateway for all Android clients if [ "x_${IV_PLAT}" = "x_android" ] then echo "push "redirect-gateway def1" >> $1 fi
您可能希望将“echo”命令更改为“exit 99”或类似命令,这将断开客户端连接。(我还没有尝试过。)并且显然对 conf 文件和脚本使用不同的名称!
答案2
因此,如果你有权访问 OpenVPN 服务器,你可以使用以下命令阻止那里的请求被动操作系统指纹识别。和奥斯福将您的桌面操作系统列入白名单。
我将针对 Centos 编写此代码,因为这是我使用过它的时候。您将安装应用程序 nfnl_osf,然后安装 OpenBSD 的指纹签名数据库来帮助匹配机器。
yum -y install libpcap libpcap-devel iptables-utils
wget http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/etc/pf.os?rev=1.27 -O /usr/libexec/iptables/pf.os
nfnl_osf -f /usr/libexec/iptables/pf.os
完成设置后,我们将数据库导入 iptables,然后运行下面的 iptables 命令来运行检查。
iptables -I INPUT -j ACCEPT -p udp --dport 1194 -m osf --genre Windows --log 2 --ttl 2
iptables -I INPUT -j ACCEPT -p udp --dport 1194 -m osf --genre Mac --log 2 --ttl 2
iptables -A INPUT -p udp --dport 1194 -j DROP
希望有帮助!
答案3
OpenVPN做通过...将客户端信息推送到服务器--push-peer-info
。客户端操作系统是被推送的元素之一,理论上可以用来根据预期/阻止的客户端操作系统来筛选连接。
服务器日志示例:
Tue Dec 19 13:21:42 2017 us=348489 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_PLAT=linux
Tue Dec 19 13:21:42 2017 us=348521 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_PROTO=2
Tue Dec 19 13:21:42 2017 us=348551 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_NCP=2
Tue Dec 19 13:21:42 2017 us=348580 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_LZ4=1
Tue Dec 19 13:21:42 2017 us=348608 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_LZ4v2=1
Tue Dec 19 13:21:42 2017 us=348636 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_LZO=1