安装环境:CentOS6 32bit
一、安装依赖
yum install -y pam-devel readline-devel http-parser-devel unbound gmp-devel tar gzip xz wget gcc make autoconf texinfo
以下所有 lib64
因为是64
位系统,32
系统是lib
二、安装nettle
wget ftp://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz tar zxvf nettle-2.7.1.tar.gz cd nettle-2.7.1/ ./configure --prefix=/usr/local/nettle make && make install echo '/usr/local/nettle/lib64/' > /etc/ld.so.conf.d/nettle.conf ldconfig
三、安装gnutls
export NETTLE_CFLAGS="-I/usr/local/nettle/include/" export NETTLE_LIBS="-L/usr/local/nettle/lib64/ -lnettle" export HOGWEED_LIBS="-L/usr/local/nettle/lib64/ -lhogweed" export HOGWEED_CFLAGS="-I/usr/local/nettle/include" wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.9.tar.xz tar xvf gnutls-3.3.9.tar.xz cd gnutls-3.3.9/ ./configure --prefix=/usr/local/gnutls make && make install ln -sf /usr/local/gnutls/bin/certtool /usr/bin/certtool echo '/usr/local/gnutls/lib/' > /etc/ld.so.conf.d/gnutls.conf ldconfig
四、安装libnl
yum install -y bison flex wget http://www.carisma.slowglass.com/~tgr/libnl/files/libnl-3.2.24.tar.gz tar xvf libnl-3.2.24.tar.gz cd libnl-3.2.24 ./configure --prefix=/usr/local/libnl make && make install echo '/usr/local/libnl/lib/' > /etc/ld.so.conf.d/libnl.conf ldconfig
五、安装radcli
和freeradius-client
(可选项,仅需要用radius
服务器验证的时候才用得上)
yum install freeradius-client -y export LIBNL3_CFLAGS="-I/usr/local/libnl/include/libnl3" export LIBNL3_LIBS="-L//usr/local/libnl/lib/ -lnl-3 -lnl-route-3" export LIBGNUTLS_LIBS="-L/usr/local/gnutls/lib/ -lgnutls" export LIBGNUTLS_CFLAGS="-I/usr/local/gnutls/include/" wget https://github.com/radcli/radcli/releases/download/1.2.5/radcli-1.2.5.tar.gz tar xvzf radcli-1.2.5.tar.gz cd radcli-1.2.5 ./configure --prefix=/usr/local/radcli echo '/usr/local/radcli/lib/' > /etc/ld.so.conf.d/radcli.conf make && make install ldconfig
六、安装ocserv
export LIBNL3_CFLAGS="-I/usr/local/libnl/include/libnl3" export LIBNL3_LIBS="-L//usr/local/libnl/lib/ -lnl-3 -lnl-route-3" export LIBGNUTLS_LIBS="-L/usr/local/gnutls/lib/ -lgnutls" export LIBGNUTLS_CFLAGS="-I/usr/local/gnutls/include/" wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.10.10.tar.xz tar xvf ocserv-0.10.10.tar.xz cd ocserv-0.10.10
编辑 src/vpn.h
vim src/vpn.h
找到
#define DEFAULT_CONFIG_ENTRIES 96
改为
#define DEFAULT_CONFIG_ENTRIES 200
因为默认只能下发96条路由表,需要改成200,再改大也不生效。
./configure --prefix=/usr/local/ocserv make && make install echo 'export PATH=$PATH://usr/local/ocserv/sbin:/usr/local/ocserv/bin' >>/etc/profile source /etc/profile
七、制作证书
编辑 ca.tmpl
vim ca.tmpl
添加以下内容:
cn = "Anyconnect VPN" organization = "www.sproxy.info" serial = 1 expiration_days = 3650 ca signing_key cert_signing_key crl_signing_key
生成ca-key
密匙
certtool --generate-privkey --outfile ca-key.pem
生成ca-cert
证书
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
编辑 server.tmpl
vim server.tmpl
添加以下内容:
cn = "Your hostname or IP" organization = "www.sproxy.info" expiration_days = 3650 signing_key encryption_key tls_www_server
生成server-key.pem
密匙
certtool --generate-privkey --outfile server-key.pem
生成server-cert.pem
证书
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
编辑 user.tmpl
vim user.tmpl
添加以下内容:
cn = "Anyconnect VPN" unit = "www.sproxy.info" uid = "1024" expiration_days = 3650 signing_key tls_www_client
生成user-key
密匙
certtool --generate-privkey --outfile user-key.pem
生成user-cert.pem
证书
certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem
转化为user.p12
证书
openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -certfile ca-cert.pem -out user.p12
转化的user.p12
证书可用于iPhone客户端验证,执行命令的时候会要求输入密码,也可以直接按回车,输了密码之后导入证书的时候需要输入密码来验证。
八、freeradius-client
的设置
vim /etc/radiusclient/radiusclient.conf
yourserveraddress
改为 radius
服务器的地址
authserver yourserveraddress:1812 acctserver yourserveraddress:1813 dictionary /etc/radiusclient/dictionary
vim /etc/radiusclient/servers
youserveraddress yourserversecret
Radius
服务端的通信密匙默认是:testing123
九、pam
验证
再介绍一种pam
验证的方式,可以用系统用户验证ocserv
yum install pam_radius
编辑 pam_radius.conf
vim /etc/pam_radius.conf
添加以下内容:
ip address password 5
3列内容:服务器ip地址、密码、超时秒数 (不是系统用户密码,随便设置一个)
编辑 server
vim /etc/raddb/server
ip address password
2列内容:服务器ip地址、密码(不是系统用户密码,随便设置一个,和上面对应)
编辑 ocserv
vim /etc/pam.d/ocserv
添加以下内容:
#%PAM-1.0 auth sufficient /lib64/security/pam_radius_auth.so auth include password-auth account required pam_nologin.so account include password-auth session include password-auth
其中/lib64
是64
位系统,如果是32
位系统,就是lib
创建 /etc/ocserv
目录
mkdir /etc/ocserv
复制 server-key.pem、server-cert.pem、ca-cert.pem 到 /etc/ocserv目录下
cp server-key.pem server-cert.pem ca-cert.pem /etc/ocserv
现在介绍下各种验证方式怎么配置
在ocserv.conf
配置文件中设置
1、密码验证
找到以下内容取消前面的#号注释,没有就自行添加(其它所有auth相关的选项都需要添加#注释)
auth = "plain[/etc/ocserv/passwd]"
生成password
文件
ocpasswd -c /etc/ocserv/passwd test
会在/etc/ocserv
目录下生成一个password
文件,用户名为test
,回车的时候会要求输入两次密码
2、freeradius-client 验证
找到以下内容取消前面的#号注释,没有就自行添加(其它所有auth相关的选项都需要添加#注释)
auth = "radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true]"
3、pam验证
找到以下内容取消前面的#号注释,没有就自行添加(其它所有auth相关的选项都需要添加#注释)
auth = "pam"
4、证书验证
找到以下内容取消前面的#号注释,没有就自行添加(其它所有auth相关的选项都需要添加#注释)
auth = "certificate" ca-cert = /etc/ocserv/ca-cert.pem cert-user-oid = 0.9.2342.19200300.100.1.1
不管用哪种验证方式,改了之后执行以下命令启动服务
ocserv -f -d 1
然后客户端连接测试以下
如果测试没问题, 我们可以用supervisor
工具守护进程。
yum -y install python-setuptools easy_install pip pip install supervisor echo_supervisord_conf >/etc/supervisord.conf
添加以下内容就再启动supervisord就可以守护进程了
[program:ocserv] command=ocserv -f -d 1 autostart=true autorestart=true startsecs=3 redirect_stderr=true stdout_logfile=/var/log/ocserv.log'
iptables 的设置
自动调整MTU
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
开启 NAT (记得把 eth0 改成自己的网卡名,openvz 的基本是 venet0,或是干脆去掉 -o ehto 选项 )
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
开启 IPv4 的转发
sysctl -w net.ipv4.ip_forward=1
放行 443 端口 (假如配置文件中是这个端口)
iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -I INPUT -p udp --dport 443 -j ACCEPT
验证方式一次只能选择一种,一般使用制作个证书就完事儿了。