You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置OpenVPN实现站点专属访问及限制用户仅访问指定站点?

实现仅OpenVPN访问Moodle站点+限制客户端流量的方案

一、调整OpenVPN服务器核心配置

先把OpenVPN改成路由模式,给客户端分配独立子网(比如10.8.0.0/24),然后修改服务器配置文件(一般是/etc/openvpn/server.conf):

  • 添加 push "route 你的Moodle站点IP 255.255.255.255":只让客户端访问这个站点时走VPN,别加默认网关推送的配置,不然客户端所有流量都走VPN
  • 关掉client-to-client:防止学生之间通过VPN互相通信
  • 用证书认证代替用户名密码:给每个学生发唯一的客户端证书,每个证书的CN(通用名称)设成唯一标识(比如学号)

二、用防火墙锁死客户端流量

这是最关键的一步,确保VPN客户端只能碰你的Moodle站点,以DigitalOcean常用的ufw为例:

  1. 先放行OpenVPN的端口:
    ufw allow 1194/udp
    
  2. 只允许VPN子网访问Moodle的80/443端口:
    ufw allow in on tun0 to 你的Moodle站点IP port 80,443
    
  3. 直接拒绝VPN客户端的其他所有出站请求:
    ufw deny out on tun0 from 10.8.0.0/24 to any
    
  4. 记得打开ufw的转发功能:编辑/etc/default/ufw,把DEFAULT_FORWARD_POLICY改成"ACCEPT",然后重启ufw

如果用iptables的话,命令是:

# 放行OpenVPN端口
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# 允许VPN到Moodle的HTTP/HTTPS流量
iptables -A FORWARD -i tun0 -o eth0 -d 你的Moodle站点IP -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -d 你的Moodle站点IP -p tcp --dport 443 -j ACCEPT
# 拒绝其他所有VPN出站流量
iptables -A FORWARD -i tun0 -o eth0 -j DROP
# 保存规则
iptables-save > /etc/iptables/rules.v4

三、给Moodle加访问白名单

确保只有VPN客户端能访问Moodle,直接访问的都拦掉:

  • 如果用Nginx,在站点的server块里加:
    allow 10.8.0.0/24;
    deny all;
    
  • 如果用Apache,在VirtualHost或者.htaccess里加:
    Require ip 10.8.0.0/24
    

四、解决并发连接问题(替代blockconcurrent)

之前的blockconcurrent connection不好用,换这两个方法:

  1. 服务器配置里加 duplicate-cn 0:同一个证书不能同时连多个设备,直接阻止并发
  2. 加个监控脚本踢重复连接:
    写个bash脚本,定时检查OpenVPN状态日志,发现同一个CN的多个连接就踢掉旧的:
    #!/bin/bash
    LOG_FILE="/var/log/openvpn/openvpn-status.log"
    # 找出重复的CN
    awk '/^CLIENT_LIST/ {print $3}' $LOG_FILE | sort | uniq -d | while read cn; do
      # 获取该CN的所有连接进程ID
      PIDS=$(ps aux | grep openvpn | grep "$cn" | awk '{print $2}')
      # 保留最新的一个进程,杀掉其他的
      LAST_PID=$(echo "$PIDS" | tail -n1)
      echo "$PIDS" | grep -v "$LAST_PID" | xargs kill -SIGUSR1
    done
    
    把脚本存成/usr/local/bin/kill_duplicate_vpn.sh,加执行权限,然后用crontab设成每分钟跑一次:
    * * * * * /usr/local/bin/kill_duplicate_vpn.sh >> /var/log/vpn_duplicate_kill.log 2>&1
    

五、额外防作弊补充

  • 客户端配置里加route-nopull:防止学生手动修改路由绕过限制,服务器强制推送唯一的Moodle站点路由
  • Moodle里开IP锁定:设置用户只能从10.8.0.0/24子网登录,就算证书被共享也没法用
  • 定期查VPN日志:看看有没有异常的连接记录,比如同一个CN频繁换设备的,及时处理

内容的提问来源于stack exchange,提问作者Balya Rochmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:42:31