====== ocserv - OpenConnect Server ====== ===== 安装 ===== ports 或者 pkg : /usr/ports/net/ocserv 手动编译, 需要依赖 /usr/ports/archivers/liblz4 和 /usr/ports/security/gnutls ===== 证书生成 ===== == CA == CA模板 $ cat > ca.tmpl cn = "OpenConnect CA" organization = "OpenConnect" serial = 1 expiration_days = 3650 ca signing_key cert_signing_key crl_signing_key 生成私钥 $ certtool --generate-privkey --outfile ca.key 生成CA证书 $ certtool --generate-self-signed --load-privkey ca.key --template ca.tmpl --outfile ca.crt == 服务器证书 == 服务器模板, 其中cn必须对应client连进来的域名或者ip $ cat > server.tmpl cn = "host.domin" organization = "OpenConnect" expiration_days = 3650 signing_key encryption_key tls_www_server 生成私钥和证书 $ certtool --generate-privkey --outfile server.key $ certtool --generate-certificate --load-ca-certificate ca.crt --load-ca-privkey ca.key --template server.tmpl --load-privkey server.key --outfile server.crt == 客户端证书 == 如果不用证书, 则如果使用Cisco AnyConnect连接的时候每次都会提示输入密码 客户端模板 $ cat > user.tmpl cn = "vpn_user" unit = "all" organization = "OpenConnect" expiration_days = 3650 signing_key tls_www_client 生成私钥 $ certtool --generate-privkey --outfile vpn_user.key 生成证书 $ certtool --generate-certificate --load-ca-certificate ca.crt --load-ca-privkey ca.key --template vpn_user.tmpl --load-privkey vpn_user.key --outfile vpn_user.crt 合并成p12, 用于AnyConnect导入, 会提示输入证书名和密码, 密码将用于导入 $ certtool --to-p12 --pkcs-cipher 3des-pkcs12 --outder --load-privkey vpn_user.key --load-certificate vpn_user.crt --outfile vpn_user.p12 ===== 配置要点 ===== == 验证方式 == * 普通列表项目如果需要用密码连入, 则修改 auth = "plain[passwd=/path/ocserv.passwd]" 对应的密码文件 密码文件的生成使用 ocpasswd -c /path/ocserv.passwd username 生成 * 如果同时支持密码连接和证书连接, 则在上面基础上增加 enable-auth = "certificate" 必须先启用密码验证再启用证书验证, 反之则不能使用密码验证. * 如果只是证书验证, 则直接修改验证方式为 auth = "certificate" == 证书的用户获取 == 如果按照上面的模板生成的用户证书, 配置文件中获取用户的设置为 cert-user-oid = 2.5.4.3 == cookie设置 == cookie有助于用户在重新链接时快速恢复, 相关设置 cookie-timeout = 86400 persistent-cookies = true == 其他 == 建议打开mtu检测, 这个会同时打开DPD检测 try-mtu-discovery = true mobile-dpd = 1800 如果编译依赖lz4, 可以打开数据压缩 compression = true 如果要记录用户的登陆情况到系统记录里, 可以开启使用utmp use-utmp = true == 正在使用精简配置文件 == auth = "plain[passwd=/path/etc/ocserv.passwd]" enable-auth = "certificate" tcp-port = 1000 udp-port = 1000 run-as-user = nobody run-as-group = daemon socket-file = /var/run/ocserv-socket server-cert = /path/etc/certs/server.crt server-key = /path/etc/certs/server.key dh-params = /path/etc/certs/dh.pem ca-cert = //path/etc/certs/ca.crt max-clients = 200 max-same-clients = 2 keepalive = 32400 dpd = 90 mobile-dpd = 1800 try-mtu-discovery = true cert-user-oid = 2.5.4.3 compression = true no-compress-limit = 256 tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0" auth-timeout = 40 min-reauth-time = 300 max-ban-score = 50 ban-reset-time = 300 cookie-timeout = 86400 cookie-rekey-time = 14400 persistent-cookies = true deny-roaming = false rekey-time = 172800 rekey-method = ssl use-utmp = true use-occtl = true pid-file = /var/run/ocserv.pid device = tun predictable-ips = true ipv4-network = 192.168.100.0 ipv4-netmask = 255.255.255.0 dns = 8.8.8.8 dns = 8.8.4.4 ping-leases = false config-per-user = /path/etc/config-per-user/ default-user-config = /path/etc/default-user.config cisco-client-compat = true