天天看點

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

繼續閱讀