Linux下Open×××密钥认证和用户名/密码认证笔记
Linux下Open×××密钥认证和用户名/密码认证笔记http://blog.chinaunix.net/uid-24250828-id-3536671.htmlOpen×××是一个开源的虚拟专用通道工具,是基于OpenSSL的SSL协议.可以实现在互联网中的点对点的安全连接.Open×××优点:1.安全,易用,稳定.2.验证方式多样,包括:预享私钥,第...
Linux下Open×××密钥认证和用户名/密码认证笔记
http://blog.chinaunix.net/uid-24250828-id-3536671.html
Open×××是一个开源的虚拟专用通道工具,是基于OpenSSL 的SSL协议.可以实现在互联网中的点对点的安全连接.
Open×××优点:
1.安全,易用,稳定.
2.验证方式多样,包括:预享私钥,第三方证书以及用户名/密码组合.
3支持多种操作系统平台(Linux、 Unix、 Mac OS、 Windows).
原理:
在Open***中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
环境说明:
Open×××服务器内网ip:172.16.1.64 外网ip:111.207.244.100 (可以在本机,也可以在路由上做映射)
操作系统CentOS5.4
软件包:
lzo-2.03.tar.gz
open***-2.0.9.tar.gz
准备工作:
Open××× 安装需要ssl 和gcc. 还需要TUN设备和iptables的nat模块支持.
首先同步一下时间服务器
[root@lvs src]# ntpdate time.nist.gov
[root@lvs src]# yum install openssl openssl-devel gcc (已安装的略过此步)
检查TUN模块,一般系统自带
[root@lvs src]# modinfo tun
filename: /lib/modules/2.6.18-164.el5/kernel/drivers/net/tun.ko
alias: char-major-10-200
license: GPL
author:(C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
description: Universal TUN/TAP device driver
srcversion: 9DE80B8421E85BE6D3B9E06
depends:
vermagic: 2.6.18-164.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f3504a9f782a581431131ff6a52711218ff0a0cb17a7f7462a56b587d3919a824faa39d2d786e0a0ee3f10e7a4b9f03efc5c87b418191eea5a66171
编译软件包安装:
1) 安装LZO
LZO是一种数据压缩算法
[root@lvs src]# cd lzo-2.03
[root@lvs lzo-2.03]#./configure --prefix=/usr/local/lzo && make && make install
[root@lvs lzo-2.03]# ls /usr/local/lzo/
include lib
2)安装Open×××
[root@lvs src]# cd open***-2.0.9
[root@lvs open***-2.0.9]#./configure --prefix=/usr/local/open*** --with-lzo-headers=/usr/local/lzo/include--with-lzo-lib=/usr/local/lzo/lib --with-ssl-headers=/usr/include/openssl --with-ssl-lib=/usr/lib && make && make install
[root@lvs open***-2.0.9]#echo $?
[root@lvs open***-2.0.9]# ls /usr/local/open***/
man sbin
[root@lvs etc]# mkdir /usr/local/open***/etc
[root@lvs etc]# cp -r /usr/local/src/software/open***-2.0.9/easy-rsa/ /usr/local/open***/etc/
[root@lvs etc]# cp /usr/local/src/software/open***-2.0.9/sample-config-files/server.conf
/usr/local/open***/etc/
3)自定义公钥变量,根据自己的信息添写
[root@lvs etc]# cd /usr/local/open***/etc/easy-rsa/2.0/
[root@lvs 2.0]# vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="BeiJing"
export KEY_ORG="manzuo.com"
export KEY_EMAIL="lizonggang@manzuo.com"
使其变量生效
[root@lvs 2.0]# source ./vars
NOTE:If you run ./clean-all, I will be doing a rm -rf on /usr/local/open***/etc/easy-rsa/2.0/keys
[root@lvs 2.0]#./clean-all
生成ca证书:
[root@lvs 2.0]# ./build-ca
[root@lvs 2.0]#./build-ca
由于之前设置过vars 文件,一路回车,
生成Diffie Hellman
[root@lvs 2.0]#./build-dh
生成Diffie Hellman 密钥为必要步骤,不能省略.这一步根据选择密钥的长度,花费的时间不一样.会生成 1024位的 dh1024.pem文件.
生成服务器证书,server名字可以自定义
[root@lvs 2.0]#./build-key-server server
遇到询问
Sign the certificate?[y/n]:时输入y
1 outof 1 certificate requests certified, commit?[y/n] 输入y
生成客户端证书
./build-key lizonggang
[root@lvs keys]# pwd
/usr/local/open***/etc/easy-rsa/2.0/keys
[root@lvs keys]# cp ca.crt dh1024.pem server.crt server.key /usr/local/open***/etc/keys/
[root@lvs keys]# ls /usr/local/open***/etc/keys/
ca.crt dh1024.pem server.crt server.key
Open×××的配置文件:
[root@lvs etc]# vim /usr/local/open***/etc/server.conf
local 172.16.1.64
port 1194
proto tcp
dev tun
server 1.1.1.0 255.255.255.0
push"route 111.207.244.0 255.255.255.0"
push"route 192.168.0.0 255.255.255.0"
push"route 172.16.0.0 255.255.255.0"
push"dhcp-option DNS 202.106.0.20"
ca /usr/local/open***/etc/keys/ca.crt
cert /usr/local/open***/etc/keys/server.crt
key /usr/local/open***/etc/keys/server.key
dh /usr/local/open***/etc/keys/dh1024.pem
ifconfig-pool-persist /usr/local/open***/etc/ipp.txt
keepalive 10 7200
comp-lzo
max-clients 100
persist-key
persist-tun
status /var/log/open***-status.log
log /var/log/open***.log
log-append /var/log/open***.log
verb 3
启动:
/usr/local/open***/sbin/open*** --daemon --config /usr/local/open***/etc/server.conf
开机自动启动:
/usr/local/open***/sbin/open*** --daemon --config /usr/local/open***/etc/server.conf >>/etc/rc.local
note
如果在启动里加上--cd 参数,那么server.conf 里可写相对路径
/usr/local/open***/sbin/open*** --daemon --config /usr/local/open***/etc/server.conf --cd /usr/local/open***/
那么server.conf里可这样写
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt
这个tun0设备就是Open×××虚拟出来的网络接口,如果运行Open×××进程失败的话,是看不到这个设备的.
[root@lvs etc]# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:1.1.1.1 P-t-P:1.1.1.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
转发:
[root@lvs etc]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs etc]# sysctl -p
iptables 脚本 这里的网卡要指定为服务器外网的接口
[root@server1 ~]# cat iptables.sh
#!/bin/sh
iptables -F
iptables -Z
iptables -X
iptables -P INPUT ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 1.1.1.0/24 -o eth0 -j MASQUERADE
service iptables save
[root@server1 ~]# cat iptables.sh
#!/bin/sh
iptables -F
iptables -Z
iptables -X
iptables -P INPUT ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 1.1.1.0/24 -o eth0 -j MASQUERADE
service iptables save
客户端设置:
这里将服务器上的ca.crt lizonggang.crt lizonggang.key 拷到本地的 Progam File(x86)/Open×××/config 文件夹下,再新建一个client.o***文件。
客户端client.o***
client
dev tun
proto tcp
remote 111.207.244.110 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert lizonggang.crt
key lizonggang.key
route-method exe
route-delay 2
ns-cert-type server
comp-lzo
verb 3
redirect-gateway def1
密钥测试成功.
下面介绍用户名/密码的验证方式。
1.在server.conf 文件里添加如下三行文件
[root@lvs ~]# tail -3 /usr/local/open***/etc/server.conf
auth-user-pass-verify /usr/local/open***/etc/checkpsw.sh via-env
client-cert-not-required
username-as-common-name
[root@lvs ~]# cd /usr/local/open***/etc/
[root@lvs ~]# wget http://open***.se/files/other/checkpsw.sh
[root@lvs ~]# chmod +x checkpsw.sh
2.这个文件根据自己的环境修改PASSFILE和LOG_FILE变量.
[root@lvs etc]# cat checkpsw.sh
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@open***.se>
#
# This script will authenticate Open××× users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s)or tab(s)and then the password.
PASSFILE="/usr/local/open***/etc/psw-file"
LOG_FILE="/usr/local/open***/log/open***-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if[!-r "${PASSFILE}"]; then
echo"${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading.">> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if["${CORRECT_PASSWORD}"=""]; then
echo"${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\".">> ${LOG_FILE}
exit 1
fi
if["${password}"="${CORRECT_PASSWORD}"]; then
echo"${TIME_STAMP}: Successful authentication: username=\"${username}\".">> ${LOG_FILE}
exit 0
fi
echo"${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\".">> ${LOG_FILE}
exit 1
3.用户名和密码文件fsw-file,用户名和密码之间用空格或者Tab键分隔
[root@lvs ~]# cat /usr/local/open***/etc/psw-file
lizonggang man1234567
[root@lvs ~]# chmod 400 psw-file
4.修改客户端配置文件client.o***
注释掉cert 和key
;cert lizonggang.crt
;key lizonggang.key
增加询问用户名的密码访问
auth-user-pass
测试
[root@lvs ~]# tail /usr/local/open***/log/open***-password.log
2013-03-21 09:54:40: Successful authentication: username="lizonggang".
==============================================================
遇到的问题:
1)
Windows Client
日志里面提示有这样的错误:
ROUTE: route addition failed using CreateIpForwardEntry: 至少有一个参数不正确。
Route addition via IPAPI failed
解决办法是:
在配置文件里加入:
route-method exe
route-delay 2
2)
iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon: command not found
要安装一个软件包:
yum install policycoreutils
3)
客户端连接时报错:
There are no TAP-Win32 adapters on this system. You should be able to create a TAP-Win32 adapter by going to Start -> All Programs -> Open××× -> Add a new TAP-Win32 virtual ethernet adapter.
需要安装Add a new TAP-Win32 virtual ethernet adapter, 在Open×××的安装程序下有.
4)
Mon May 20 11:15:51 2013 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Mon May 20 11:15:52 2013 VERIFY ERROR: depth=1, error=self signed certificate in certificate chain: /C=CN/ST=BJ/L=BeiJing/O=manzuo.com/OU=manzuowang/CN=manzuo.com_CA/emailAddress=lizonggang@manzuo.com
Mon May 20 11:15:52 2013 TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Mon May 20 11:15:52 2013 TLS Error: TLS object -> incoming plaintext read error
Mon May 20 11:15:52 2013 TLS Error: TLS handshake failed
Mon May 20 11:15:52 2013 Fatal TLS error (check_tls_errors_co), restarting
Mon May 20 11:15:52 2013 TCP/UDP: Closing socket
Mon May 20 11:15:52 2013 SIGUSR1[soft,tls-error] received, process restarting
Mon May 20 11:15:52 2013 Restart pause, 5 second(s)
如果报这个错误,我知道两个原因
1, 证书错误
2,服务端和客户端时间相差5分钟以上。
======================= 2013/09/18 更新 open*** 使用技巧========================
1)记住密码设置
如果大家使用的open*** 是用户名和密码登陆的,每次登陆时都输入用户名和密码是不是很烦啊。下面介绍一个方法让大家解放双手。
步骤:
a.打开 client.o*** 文件在最后加入
auth-user-pass pass.txt
b.在同级文件夹下新建pass.txt文件。第一行写用户名,第二行写密码。这样就可以了。
例如:
lizonggang
123456
这样我们每次登陆只需要点Connect 就可以自己连接了。
2)多网段设置
如果我们有多个网段都需要***登陆,那怎么办呢?虽然每次只能登陆一个,但是我们手工替换config文件夹也不是个事啊。
步骤
a.在config 文件夹下新建文件夹,再把各自的文件放在各自的文件夹内
b.默认的都有自己的client.o*** ,记住,只能有一个client.o*** ,其它的修改成 xxx.o*** 各自的名字。
转载于:https://blog.51cto.com/ljl2013/1348990
更多推荐
所有评论(0)