一 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