天天看点

RHEL5.4 上部署openvpn 服务

一 openvpn 简介

     openvpn 是基于SSL的vpn ,其使用工业标准的SSL/TLS协议实现第二层和第三层的安全数据链路××× .其优点如下:

      1 基于SSL协议,安全,并使用单一TCP 或者UDP 端口即可实现

      2 使用双向验证,服务器只需保存自己的证书和密钥;

      3 服务器只接受那些由主CA证书签名的客户端,并有撤回机制,而不需要重建个PKI;

      4 可以实现基于Common Name 的权限控制

二 系统环境:RHEL5.4

应用软件

 openvpn-2.1.4.tar.gz

     lzo-2.05.tar.gz

三 安装openvpn

   # tar xvf   lzo-2.05.tar.gz

   #cd lzo-2.05

   # ./configure

   # make

   # make check

   # make test    

   # make install 

   #tar xvf openvpn-2.1.4.tar.gz

   #cd openvpn-2.1.4

   #./configure

   #make && make install

四   配置openv

   1 为openvpn 建立专用CA,并分别为Openvpn的服务器端机器各个客户端申请所需要的证书;openvpn 支持两种认证模型:以共享密钥及基于TLS 认证模型.

出于安装机器简话认证过程等目的,Openvpn 要求服务器端在建立通信前进行基于证书的双向认证.而证书的使用依赖于PKI

 Open××× 为使用私有的CA 来颁发证书准备了许多脚本,在openvpn 源码包下面的easy-rsa 下面

2 创建CA及Openvpn 服务器和个客户端所需要的证书,需啊哟为证书使用者所处的国家等信息,而这些可以在vars 文件中指定其默认值,参数包括

#cd /root/openvpn/openvpn-2.1.4/easy-rsa/2.0

#vim   vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="SHANGHAI"

export KEY_CITY="SHANGHAI"

export KEY_ORG="Frank"

export [email protected]

3 配置PKI

#source vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/openvpn/openvpn-2.1.4/easy-rsa/2.0/keys

[root@openvpn 2.0]# ./clean-all

4 创建本地CA

[root@openvpn 2.0]# ./build-ca 

Generating a 1024 bit RSA private key

...............................................................++++++

........++++++

writing new private key to 'ca.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

Country Name (2 letter code) [CN]:

State or Province Name (full name) [SHANGHAI]:

Locality Name (eg, city) [SHANGHAI]:

Organization Name (eg, company) [Frank]:

Organizational Unit Name (eg, section) []:Frank

Common Name (eg, your name or your server's hostname) [Frank CA]:FRANK

Name []:frank

Email Address [[email protected]]:

4 为Openvpn 创建密钥及证书

 [root@openvpn 2.0]# ./build-key-server server

................................................................++++++

..++++++

writing new private key to 'server.key'

Common Name (eg, your name or your server's hostname) [server]:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /root/openvpn/openvpn-2.1.4/easy-rsa/2.0/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

countryName           :PRINTABLE:'CN'

stateOrProvinceName   :PRINTABLE:'SHANGHAI'

localityName          :PRINTABLE:'SHANGHAI'

organizationName      :PRINTABLE:'Frank'

organizationalUnitName:PRINTABLE:'Frank'

commonName            :PRINTABLE:'server'

name                  :PRINTABLE:'frank'

emailAddress          :IA5STRING:'[email protected]'

Certificate is to be certified until Aug 9 17:43:47 2021 GMT (3650 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

5 创建客户端的的密钥及证书

[root@openvpn 2.0]# ./build-key frank

.......................++++++

....++++++

writing new private key to 'frank.key'

Common Name (eg, your name or your server's hostname) [frank]:  

commonName            :PRINTABLE:'frank'

Certificate is to be certified until Aug 9 18:45:05 2021 GMT (3650 days)

1 out of 1 certificate requests certified, commit? [y/n]

CERTIFICATION CANCELED

6 创建Dffie Hellman 参数.DiffieHellman 用于增强安全性,在Open××× 是必须的,在Open×××的主配置文件中,tls-auth指令可以为SSL/TLS协议的handshake 数据包添加HMAC 签名,任何未经过签名验证的UDP包都会被丢弃,这就是SSL/TLS的安全提升了一个级别.他可以为Openvpn 的UDP 提供防止Dos 或端口洪泛攻击,避开对Openvpn 监听端口的扫描及防止缓冲区溢出等

[root@openvpn 2.0]# ./build-dh

Generating DH parameters, 1024 bit long safe prime, generator 2

This is going to take a long time

......+.................+....................+...........................+...............+......+....................................+...................................................................................................................................................................................................+..........+...............+..........+.........................................................................+...........+....................................................................................................................+.............+.............................................................................................................+.......+..............................................................................................................+.......+........................................................................+...............+........+................................................................................................................+........................................+..........................................................................................................................................................................+...............................................+...+.........+........................+.+...........+.......................+..................................................................+..............................................+.........................................................+.....................................................................+.................+.....................................+..................+....................+.+..................................................+....................................................................+..................................+..............+.............................................................................+...............+.+..........................................+................+............................+.+................................................+..............................................................+.................................+..............................................+.......+.......................................................................................................+..............................+......................................................................................+.....+......................+.........................................................................................................................................................+............................................+....................++*++*++*

7 开启tls-auth功能需要用到一个预共享密钥,此密码经常跟证书等文件一起存放,此预共享密钥可以使用下面的的命令生成

[root@openvpn 2.0]# openvpn --genkey --secret ta.key

8 配置openvpn 服务器端openvpn 主配置文件

 #mkdir /etc/openvpn/keys

 #cp -v keys/{ca.crt,server.crt.server.key,dh1024.pem} /etc/openvpn/keys

 #cp ta.key /etc/openvpn/keys

 #cd /etc/openvpn

#cat openvpn.conf

#openvpn 监听的IP地址

local 1.1.1.1

#openvpn 监听的端口

port 1194

#openvpn 使用的协议,如果使用HTTP proxy ,必须使用TCP协议

;proto tcp

proto udp

#生命使用的设备可选tap 和tun,tap 是二层设备,支持数据链路层协议

#tun 是IP层的点对点协议,限制稍微多一些

dev tun

#Openvpn 使用ROOT CA,使用build-ca 生成的,用于验证客户端证书是否合法

ca /etc/openvpn/keys/ca.crt

#openvpn 服务器server 使用的证书文件

cert /etc/openvpn/keys/server.crt

#openvpn 服务器Server 使用的证书对应的key,注意文件的权限,防止被盗

key /etc/openvpn/keys/server.key # This file should be kept secret

 #builddh 生成的Diffie-Hellman 文件

dh /etc/openvpn/keys/dh1024.pem

#配置××× 使用的网络,Openvpn 会自动提供基于该网段的DHCP服务,但是不能和任何一方的局域网端重复,并保证唯一性;

#server 端的IP默认会设置为.1 的地址

server 10.8.0.0 255.255.255.0

#防止openvpn 重新启动后”忘记”Client 曾经使用过的IP地址

ifconfig-pool-persist ipp.txt

;server-bridge

 #把该条路由发送给客户端,客户端连接成功后自动加入路由表,省略了下一跳地址

push "route 192.168.1.0 255.255.255.0"

;client-config-dir ccd

;route 192.168.40.128 255.255.255.248

;route 10.9.0.0 255.255.255.252

;learn-address ./script

;push "redirect-gateway def1 bypass-dhcp"

#为客户端指定默认的网关,即是客户端所有的数据流量都通过该网关

push "redirect-gateway def1 bypass-dhcp"

#为客户端指定DNS服务器

 push "dhcp-option DNS 210.5.153.250"

 push "dhcp-option DNS 192.168.0.1"

#配置允许客户端之间进行访问

client-to-client

#开启允许多个客户端同时连接.如果Client使用的CA的Common Name 有重复,或者说客户端都使用相同的CA 和keys 连接×××,一定要打开这个选项,否则只允许一个人连接

duplicate-cn

#NAT 后面使用的×××,如果长时间不通信,NAT Session 可能会失效,导致××× 连接丢失,为防止此类事情发生,keepalive 提供一个类似于ping 的机制,

#下面表示没10 秒通过××× 的Control 通道ping对方,如果连续120 秒无法ping通.认为连接丢失,并重新启动×××,重新连接,对于mode server 模式下的openvpn 不会重新连接

keepalive 10 120

;tls-auth ta.key 0 # This file is secret

#在上面提起的HMAC 防火墙,防止DOS 攻击,对于所有的控制信息,都使用HMAC signature ,没有HMAC signature的控制信息不予处理,主要server 后面的数字肯定使用0,client 使用的是1

tls-auth /etc/openvpn/keys/ta.key 0 # This file is secret

;cipher BF-CBC        # Blowfish (default)

;cipher AES-128-CBC   # AES

;cipher DES-EDE3-CBC # Triple-DES                      

 #对数据进行压缩,主要Server 和Client 一致

comp-lzo

#定义最大连接数

max-clients 100

#定义运行openvpn 的用户

user nobody

group nobody

#通过keepalive 检查超时,重启×××,不重读取keys,保留第一次使用的keys

persist-key

#通过keepalive 检查超时后,重新启动×××,一直保持tun 或者tap 设备是linkup 的,否则网络连接会先linkdown 然后linkup

persist-tun

#定期把openvpn 额状态信息写到文件中,以便自己写程序计费或者进行其他操作

status /var/log/openvpn_status.log

#记录日志,每次重新启动openvpn后删除原有的log信息

;log         openvpn.log

#和log一致,每次重新启动openvpn 后保留原有的log信息,新信息追加到文件的尾部

log-append /var/log/openvpn.log

verb 4

;mute 20

9 修改系统参数并把openvpn 添加到开机自动启动,启动openvpn

 #vim /etc/sysctl.conf

net.ipv4.ip_forward=0

 修改为

net.ipv4.ip_forward=1

 #sysctl -p

 #chkconfig   add openvpn

 #chkconfig openvpn on

 #service openvpn start

10 配置客户端openvpn ,windows 下安装

 openvpn-2.1.4-install.exe

11 并配置openvpn,用记事本打开openvpn 安装目录下面conf 中client.ovpn

 配置如下

#定义客户端

client

#定义使用的是路由IP模式,必须与服务器一致

#使用的协议,必须与服务器端一致

#指定服务器地址和端口,可以用多行指定多台服务器

remote 1.1.1.1 1194

# Choose a random host from the remote

# list for load-balancing. Otherwise

# try hosts in the order specified.

#如果有多台服务器,让客户端随机连接

;remote-random

#解析服务器域名

resolv-retry infinite

#客户端不需要绑定端口

nobind

;user nobody

;group nobody

#指定ca和客户端的证书

ca ca.crt

cert client.crt

key client.key

#安装配置参数

ns-cert-type server

# If a tls-auth key is used on the server

# then every client must also have the key.

#此处的值必须是1

tls-auth ta.key 1

#使用lzo 压缩,与服务器端一致

#设置日志级别

verb 3

# Silence repeating messages

继续阅读