在 CentOS 7 上搭建 Cisco AnyConnect ocserv

  • 在 CentOS 7 上搭建 Cisco AnyConnect ocserv已关闭评论
  • 121 次浏览
  • A+
所属分类:linux技术
摘要

@ocserv 是一个 OpenConnect SSL VPN 协议服务端,0.3.0 版后兼容使用 AnyConnect SSL VPN 协议的终端。
官方主页:http://www.infradead.org/ocserv/

@

1. 安装 ocserv (OpenConnect server)

ocserv 是一个 OpenConnect SSL VPN 协议服务端,0.3.0 版后兼容使用 AnyConnect SSL VPN 协议的终端。
官方主页:http://www.infradead.org/ocserv/

ocserv 已经在 epel 仓库中提供了,所以可以直接通过 yum 安装

yum install epel-release yum install ocserv 

2.生成证书

阅读官方文档

1) 创建工作文件夹

mkdir /opt/anyconnect cd /opt/anyconnect/ 

2) 生成 CA 证书

certtool --generate-privkey --outfile ca-key.pem 
cat >ca.tmpl <<EOF cn = "VPN CA" organization = "Big Corp" serial = 1 expiration_days = 3650 ca signing_key cert_signing_key crl_signing_key EOF 
certtool --generate-self-signed --load-privkey ca-key.pem  --template ca.tmpl --outfile ca-cert.pem 

把生成的 ca-cert.pem 放到 /etc/ocserv/

cp ca-key.pem /etc/ocserv/ 

3) 生成本地服务器证书

certtool --generate-privkey --outfile server-key.pem 
cat >server.tmpl <<EOF cn = "VPN server" organization = "MyCompany" serial = 2 expiration_days = 3650 encryption_key signing_key tls_www_server EOF 
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 

把生成的 server-cert.pemserver-key.pem 放到 /etc/ocserv/

cp server-cert.pem server-key.pem /etc/ocserv/ 

4) 生成客户端证书(不生成)

3. 配置 ocserv

vim /etc/ocserv/ocserv.conf  # 使用密码登录注释掉 #auth = "pam" auth = "plain[/etc/ocserv/ocpasswd]"  # 端口 TCP and UDP port number tcp-port = 443 udp-port = 443  # 证书地址 server-cert = /etc/ocserv/server-cert.pem server-key = /etc/ocserv/server-key.pem  # 取消注释设置客户端IP段 ipv4-network = 192.168.111.0 ipv4-netmask = 255.255.255.0  # 取消注释设置客户端DNS dns = 114.114.114.114   # 必须配置一个自己连接的VPN服务器IP段,允许访问下面的网段 route = 192.168.0.0/255.255.0.0 

4.创建用户

#username为你要添加的用户名 ocpasswd -c /etc/ocserv/ocpasswd username 

5.配置系统设置

1) 开启内核转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf  sysctl -p 

2) 配置iptables规则(不需要配置)

# 对指定的表 table 进行操作,添加一个规则,把192.168.111.0的流量指定到ens36出去 iptables -t nat -A POSTROUTING -s 192.168.111.0 -o ens36 -j MASQUERADE  iptables -A FORWARD -i vpns+ -j ACCEPT iptables -A FORWARD -o vpns+ -j ACCEPT  # 保存路由表 iptables-save > /etc/sysconfig/iptables 

3) 放行端口(必须配置)

firewall-cmd --permanent --add-port=443/tcp firewall-cmd --permanent --add-port=443/udp firewall-cmd --add-masquerade --permanent #必须配置,重要 firewall-cmd --reload 

6.测试

现在我们可以开启服务器试试了

ocserv -c /etc/ocserv/ocserv.conf -f -d 10 

如果没有问题,那么就可以配置成开机运行了

systemctl enable ocserv systemctl start ocserv 

Tips:

注意:一定要配置route=VPN自己的IP段,否则连接VPN后无法访问VPN服务器

#ocserv支持多种认证方式,这是自带的密码认证,使用ocpasswd创建密码文件 #ocserv还支持证书认证,可以通过Pluggable Authentication Modules (PAM)使用radius等认证方式 auth = "plain[passwd=/etc/ocserv/ocpasswd]" #指定替代的登录方式,这里使用证书登录作为第二种登录方式 enable-auth = "certificate" #证书路径 server-cert = /etc/ocserv/server-cert.pem server-key = /etc/ocserv/server-key.pem #ca路径 ca-cert = /etc/ocserv/ca-cert.pem #从证书中提取用户名的方式,这里提取的是证书中的 CN 字段作为用户名 cert-user-oid = 2.5.4.3 #最大用户数量 max-clients = 16 #同一个用户最多同时登陆数 max-same-clients = 10 #tcp和udp端口 tcp-port = 4433 udp-port = 4433 #运行用户和组 run-as-user = ocserv run-as-group = ocserv #虚拟设备名称 device = vpns #分配给VPN客户端的IP段 ipv4-network = 10.12.0.0 ipv4-netmask = 255.255.255.0 #DNS dns = 8.8.8.8 dns = 8.8.4.4    #注释掉全部route的字段,这样表示所有流量都通过 VPN 发送 #route = 192.168.1.0/255.255.255.0 #route = 192.168.5.0/255.255.255.0  #只允许访问下面的网段 route = 192.168.0.0/255.255.0.0 route = 172.16.0.0/255.255.0.0 route = 120.79.158.102/255.255.255.255 route = 120.79.166.14/255.255.255.255 
# 采用账号密码方式认证 auth = "plain[passwd=/etc/ocserv/ocpasswd]"  # 设置服务器监听端口,默认的是443端口,但是会和https冲突, # 可以设置成任意不冲突的端口 tcp-port = 4433 udp-port = 4433  # 程序以哪个用户和组运行 run-as-user = ocserv run-as-group = ocserv  # socket文件 socket-file = /var/run/ocserv.sock  # 默认证书配置 server-cert = /etc/pki/ocserv/public/server.crt server-key = /etc/pki/ocserv/private/server.key  # 开启lz4压缩 compression = true  # 隔离工作,默认不动 isolate-workers = true  # 最大客户端数量,0表示无限数量 max-clients = 16  # 同一用户可以同时登陆的客户端数量 max-same-clients = 5  # 默认不动 rate-limit-ms = 100 # 服务器统计重置时间,不动 server-stats-reset-time = 604800  # 保持连接,每隔多少秒向客户端发送连接数据包,防止断线。 # IOS系统5分钟会关闭后台数据通讯,然后就会断线。 # 因此将keepalive和mobile-dpd设置成200秒 keepalive = 200 dpd = 90 mobile-dpd = 200  # udp端口无传输25秒后转成tcp端口 switch-to-tcp-timeout = 25  # 启用MTU转发以优化性能 try-mtu-discovery = true  # 空闲断开时间,如果想无限期连接,注释这两行 # idle-timeout=1200 # mobile-idle-timeout=2400  # 仅使用TLS1.2以上版本 cert-user-oid = 0.9.2342.19200300.100.1.1 tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1"  # 认证超时时间 auth-timeout = 240 # 最小重新认证时间 min-reauth-time = 300 max-ban-score = 80 ban-reset-time = 1200 cookie-timeout = 324000 deny-roaming = false rekey-time = 172800 rekey-method = ssl use-occtl = true pid-file = /var/run/ocserv.pid device = vpns predictable-ips = true  # 默认域名,修改为你的域名或ip地址,这个设置没有任何作用 default-domain = xxx.com:4433  # 配置自定义私有IP地址范围,注释默认的两行 #ipv4-network = 192.168.1.0 #ipv4-netmask = 255.255.255.0 ipv4-network = 10.70.25.0 ipv4-netmask = 255.255.255.0  # 以VPN隧道传输所有DNS查询 tunnel-all-dns = true  # 更改DNS服务器(国内服务器就填写国内dns) dns = 8.8.8.8 dns = 1.1.1.1  # 允许思科客户端连接 cisco-client-compat = true  # 以下路由表不通过VPN隧道,直接本地网络连接 # 一定要添加自己服务器的ip地址,否则连上VPN后打不开自己的网站 no-route = x.x.x.x / 255.255.255.255