虽然简单地 能够运行一个基本的密码认证的VPN服务器,但是如果不能部署web服务以提供证书下载和导入。则对于一些安全要求严格的VPN客户端,例如,我使用的Ubuntu Touch手机内置的OpenVPN客户端,会提示This VPN is not safe to use. It does not provide a certificate.The VPN provider could be impersonated.
本文是为了进一步完善 ,实现证书下载以及密钥认证(免密码)方便个人或小型企业使用。
OCserv是OpenConnect VPN服务器,采用OpenConnect SSL VPN协议,并且和Cisco AnyConnect SSL VPN协议的客户端兼容。OpenConnect协议提供了 TCP/UDP VPN通道,使用标准的IETF安全协议加密。虽然主要是在GNU/Linux平台部署,但是其设计是兼容任何Unix平台的。Ubuntu 16.04发行版提供了OCserv软件包,所以不需要源代码编译。客户端可以使用 iOS平台的Cisco AnyConnect VPN客户端。
安装软件
CentOS 7可以通过EPEL软件仓库安装ocserv
服务
安装ocserv
服务时会同时安装gnutls-utils
,提供了创建CA证书的工具。
创建CA证书和服务器证书
GnuTLS证书工具(certtool
)可以在一个配置模板文件中指定证书的字段内容。
创建证书权威(Certificate Authority, CA)证书的配置模板:
Copy cd /etc/ocserv
sudo vim ca.tmpl
在配置文件中添加
Copy cn = "My CA"
organization = "My Org"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key
Copy sudo certtool --generate-privkey --outfile ca-key.pem
sudo certtool --generate-self-signed --load-privkey ca-key.pem \
--template ca.tmpl --outfile ca-cert.pem
服务器证书摹本文件内容如下:
Copy cn = "vpn.xuri.me"
organization = "My Org"
expiration_days = 3650
signing_key
encryption_key
tls_www_server
注意:这里 cn = "vpn.xuri.me"
需要体换成实际的服务器名字
Copy sudo certtool --generate-privkey --outfile server-key.pem
sudo certtool --generate-certificate --load-privkey server-key.pem \
--load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem \
--template server.tmpl --outfile server-cert.pem
使用商业证书(可选)
可以使用 Let’s Encrypt 客户端 (Certbot) 来获取免费的服务器证书
配置OpenConnect VPN server
Copy #auth = "pam[gid-min=1000]"
auth = "plain[/etc/ocserv/ocpasswd]"
#server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem
#server-key = /etc/ssl/private/ssl-cert-snakeoil.key
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
#try-mtu-discovery = false
try-mtu-discovery = true
ipv4-network = 192.168.1.0/24
#dns = 192.168.1.2
dns = 8.8.8.8
# Comment out all route fields
#route = 10.10.10.0/255.255.255.0
#route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#no-route = 192.168.5.0/255.255.255.0
cisco-client-compat = true
创建用户id和密码
这里创建一个用户名xuri
Copy sudo ocpasswd -c /etc/ocserv/ocpasswd xuri
设置包转发
Copy net.ipv4.ip_forward=1
设置防火墙
Copy sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
Copy iptables -t nat -A POSTROUTING -j MASQUERADE
Copy sudo systemctl start ocserv
Copy sudo netstat -tulpn | grep 443
设置CA证书能够被下载
为了能够在客户端验证服务器证书,需要部署一个http服务提供CA证书下载以便能够安装到客户端作为信任的根证书。
Copy sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Copy sudo cp /etc/ocserv/ca-cert.pem /var/www/html
参考