Why SSLVPN & Why Ocserv
SSLVPN
SSLVPN 是一种简单且安全的远程隧道访问技术。采用了公钥加密的方式来保障数据在传输过程中的安全性,它采用浏览器和服务器直接沟通的方式,方便了用户又通过SSL 协议来保障了数据安全。SSL 协议采用了SSL/TLS 综合加密的方法来保障数据安全。
Ocserv
Ocserv 的主要优势有:
- 开源,大家可以免费使用
- 支持Cisco Anyconnect 客户端(稳定)
- 客户端多平台支援
- 服务器支持绝大部分Linux 和BSD
- 支持密码认证和证书认证
- 支持RADIUS 审计
- 支持Virtual Hosting - 虚拟主机(Nginx - multi domain)
- 部署简单
前置需求
- Ubuntu 20.04(1G RAM)
- 公网IP 地址
- 域名
部署手册
1. 安装Openconnect VPN Server
使用ssh
登陆服务器,使用apt
来安装ocserv
sudo apt update -y sudo apt upgrade -y sudo apt install ocserv sudo systemctl start ocserv
|
安装完成后,使用命令检查服务状态:
sudo systemctl status ocserv
|
示例:
2. 安装Let’s Encrypt Client(certbot)
使用Let's Encrypt
为VPN 服务器颁发证书。
sudo apt install certbot
certbot --version
ufw allow 80,443/tcp
|
3. 通过Let‘s Encrypt 获取可信任TLS 证书
主要有两种方式(standalone
和webroot
)为ocserv
获取一个TLS 证书。
Standalone
如果没有网站部署在你的VPN 服务器上同时你也希望VPN Server 使用443 端口来监听远程接入,那么可以使用standalone
插件来从Let’s Encrypt 获取TLS 证书。
- 首先在DNS 服务提供商,将VPN 服务器的公网IP 绑定到准备好的域名上
- 在VPN 服务器上使用命令获取证书
sudo certbot certonly --standalone --preferred-challenges http --argee-tos --email [email protected] -d yourdomain.vpn.example.com
|
如果你看到如下图的信息,那么表示你已经成功获取到了TLS 证书:
使用Webroot Plugin 获取证书
推荐在VPN服务器同时部署了网站服务的时候使用这种方法,因为Webroot插件适用于几乎所有的Web服务器,我们不需要在Web服务器中安装证书。
首先,需要在网页服务器中为域名创建一个虚拟主机(virtual Host)。
Nginx
用熟悉的编辑器打开/etc/nginx/conf.d/yourdomain.vpn.example.com.conf
将下列配置粘贴到文件中,并保存:
server { listen 80; server_name vpn.example.com;
root /var/www/ocserv/;
location ~ /.well-known/acme-challenge { allow all; } }
|
执行下列命令:
sudo mkdir -p /var/www/ocserv
sudo chown www-data:www-data /var/www/ocserv -R
sudo systemctl reload nginx
|
然后使用let's encrypt
后去TLS 证书:
sudo certbot certonly --webroot --agree-tos --email [email protected] -d yourdomain.vpn.example.com -w /var/www/ocserv
|
4. 编辑VPN 服务配置文件
ocserv
配置文件:/etc/ocserv/ocserv.conf
配置认证方式
默认情况下,ocserv
使用PAM 组件来进行认证(也就是使用Linux 用户的账号和密码来认证),建议使用独立的账号密码作为VPN 的账号:
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
|
修改VPN 服务监听端口
tcp-port = 4433 udp-port = 4433
|
修改VPN 使用的TLS 证书
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
|
设置最大客户端访问数量
设置同一用户最大接入数量
修改默认keepalive package 发送时间
允许MTU 探测
设置客户端保持空闲时间
idle-timeout=1200 mobile-idle-timeout=1800
|
设置默认域名
default-domain = yourdomain.vpn.exmaple.com
|
设置接入后获取的IP 网段
ipv4-network = 192.168.10.0 ipv4-netmask = 255.255.255.0
|
DNS 流量通过VPN 隧道
设置VPN 接入客户端使用的DNS 服务器
dns = 8.8.8.8 dns = 1.1.1.1
|
为个别网段设置VPN 服务器为默认网关
route = 10.0.0.0/8 route = 172.16.0.0/12
|
修改配置后重启ocserv 服务
sudo systemctl restart ocserv
|
5. 创建VPN 账户
使用 ocpasswd
工具创建本地VPN 账号:
sudo ocpasswd -c /etc/ocserv/ocpasswd username
|
若需要使用 VPN 服务器作为代理服务器访问互联网,请参考以下链接。Set Up OpenConnect VPN Server (ocserv) on Ubuntu 20.04 with Let’s Encrypt (linuxbabe.com)