1、服務器程序安裝:html
一、安裝依賴程序:mysql
[root@dba~]# yum install epel-release #Open×××軟件包不在CentOS標準Yum源裏,因此須要安裝先經過yum安裝epel源才能正常安裝相關軟件包!
[root@dba~]# yum -y install lzo lzo-devel openssl openssl-devel gcc gcc-c++ #部署基礎環境安裝
二、open***服務器端程序安裝:c++
[root@dba ~]# yum install open*** -y [root@dba ~]# rpm -qa | grep"open***" open***-2.4.3-1.el7.x86_64 安裝完成涉及目錄以下: [root@dba ~]# whereis open*** #查看Open×××安裝成功後的相關路徑 open***: /usr/sbin/open*** /usr/lib64/open*** /etc/open*** /usr/share/man/man8/open***.8.gz /usr/sbin/open***:Open×××二進制程序文件 /etc/open***:Open×××配置文件存儲路徑
[root@dba ~]# yum -y install easy-rsa #包含生存Open×××認證所需的證書、密鑰等程序文件
2、配置生成open***運行所需證書文件:sql
Open×××服務器與客戶端雙方基於PKI(公鑰基礎設施)驗證雙方身份並進行認證,因此開始配置時首先要創建認證所需的證書以及密鑰。數據庫
一、證書、密鑰生成流程(推薦):http://www.softown.cn/post/146.htmlcentos
[root@dba ~]# mkdir -p/etc/open***/easy-rsa/keys [root@dba~]# cp -rf /usr/share/easy-rsa/2.0/* /etc/open***/easy-rsa/ [root@dba easy-rsa]# ll total 116 -rwxr-xr-x 1 root root 119 Aug 22 03:08 build-ca #建立CA證書和密鑰,對應文件爲ca.crt,ca.key -rwxr-xr-x 1 root root 352 Aug 22 03:08 build-dh #建立迪菲·赫爾曼密鑰,會生成dh2048.pem文件 -rwxr-xr-x 1 root root 188 Aug 22 03:08 build-inter -rwxr-xr-x 1 root root 163 Aug 22 03:08 build-key #用於建立客戶端證書及私鑰 -rwxr-xr-x 1 root root 157 Aug 22 03:08 build-key-pass #用於建立通過密碼加密的私鑰 -rwxr-xr-x 1 root root 249 Aug 22 03:08 build-key-pkcs12 -rwxr-xr-x 1 root root 268 Aug 22 03:08 build-key-server #用於建立服務器端證書及私鑰 -rwxr-xr-x 1 root root 213 Aug 22 03:08 build-req -rwxr-xr-x 1 root root 158 Aug 22 03:08 build-req-pass -rwxr-xr-x 1 root root 449 Aug 22 03:08 clean-all #用於清空服務器端已經生成端證書及密鑰,慎用! -rwxr-xr-x 1 root root 1471 Aug 22 03:08 inherit-inter drwx------ 2 root root 4096 Aug 22 03:22 keys -rwxr-xr-x 1 root root 302 Aug 22 03:08 list-crl -rw-r--r-- 1 root root 7791 Aug 22 03:08 openssl-0.9.6.cnf -rw-r--r-- 1 root root 8348 Aug 22 03:08 openssl-0.9.8.cnf -rw-r--r-- 1 root root 8245 Aug 22 03:08 openssl-1.0.0.cnf -rwxr-xr-x 1 root root 12966 Aug 22 03:08 pkitool -rwxr-xr-x 1 root root 928 Aug 22 03:08 revoke-full -rwxr-xr-x 1 root root 178 Aug 22 03:08 sign-req -rw-r--r-- 1 root root 2057 Aug 22 03:11 vars #用於存儲服務器/客戶端生成證書、密鑰過程當中須要的參數信息 -rwxr-xr-x 1 root root 740 Aug 22 03:08 whichopensslcnf
1.1 修改vars文件,配置生成證書所需的信息(能夠安本身需求修改,或保持默認):服務器
[root@dba ~]# vi/etc/open***/easy-rsa/vars # These are the default values forfields # which will be placed in thecertificate. # Don't leave any of these fieldsblank. export KEY_COUNTRY="CN" exportKEY_PROVINCE="BeiJing" export KEY_CITY="BeiJing" export KEY_ORG="YunWei" exportKEY_EMAIL="yunwei@163.com" exportKEY_OU="YunWeiUnit"
1.2 開始生成ca證書、密鑰;服務器端證書、密鑰;客戶端證書、密鑰(注:生成證書以前,請保證服務器端時區、時間等信息正確!);網絡
[root@dba open***]# cd /etc/open***/easy-rsa/ [root@dba easy-rsa]# source vars #讓上面修改端的vars參數文件生效,以後生成證書時就能夠調用到了 NOTE: If you run ./clean-all, Iwill be doing a rm -rf on /etc/open***/easy-rsa/keys [root@dba easy-rsa]# ./clean-all [root@dba easy-rsa]# ./build-ca # 一、生成CA證書及密鑰,能夠一直回車,默認用的vars中的參數進行配置,可是Common Name請保證每臺主機惟一。 Common Name (eg, your name or yourserver's hostname) [YunWei CA]: ##注意:生成服務器客戶端證書時,請保證各證書該名不一致!!! [root@dba easy-rsa]# ll keys/ -rw-r--r-- 1 root root 1712 Aug 22 03:15 ca.crt #生成的CA證書 -rw------- 1 root root 1704 Aug 22 03:15 ca.key #生成的CA密鑰
1.3 生成服務器端證書及對應端密鑰:
app
[root@dba easy-rsa]# ./build-key-server server [root@dba easy-rsa]# ll keys/ -rw-r--r-- 1 root root 5457 Aug 22 03:16 server.crt #生成的服務器端證書 -rw-r--r-- 1 root root 1074 Aug 22 03:16 server.csr -rw------- 1 root root 1704 Aug 22 03:16 server.key #生成的服務器端密鑰
1.4 生成客戶端用戶對應的證書及密鑰:socket
[root@dbaeasy-rsa]# ./build-key client -rw-r--r-- 1 root root 5339 Aug 22 03:17 client.crt #生成的客戶端證書 -rw-r--r-- 1 root root 1074 Aug 22 03:17 client.csr -rw------- 1 root root 1708 Aug 22 03:17 client.key #生成的客戶端密鑰
1.5 生成迪菲·赫爾曼參數(必須生成):
[root@localhost easy-rsa]# ./build-dh [root@localhost easy-rsa]# ll keys/dh2048.pem -rw-r--r--. 1 root root 424 8月 23 18:13 keys/dh2048.pem
1.6 生成ta.key,用於預防Dos***:
[root@dba easy-rsa]# open***--genkey --secret /etc/open***/easy-rsa/keys/ta.key -rw------- 1 root root 636 Aug 22 03:22 ta.key
二、服務器/客戶端配置文件構建:
示例配置文件路徑以下,能夠在此基礎上作修改:
[root@dba ~]# ll /usr/share/doc/open***-2.4.3/sample/sample-config-files/client.conf /usr/share/doc/open***-2.4.3/sample/sample-config-files/server.conf -rw-r--r-- 1 root root 3584 Jun 20 08:48 /usr/share/doc/open***-2.4.3/sample/sample-config-files/client.conf -rw-r--r-- 1 root root 10782 Jun 20 08:48 /usr/share/doc/open***-2.4.3/sample/sample-config-files/server.conf
2.1 服務器端:
複製open***配置文件模版到配置文件目錄: [root@dba ~]# cp /usr/share/doc/open***-2.4.3/sample/sample-config-files/server.conf /etc/open***/ [root@dba ~]# cp /usr/share/doc/open***-2.4.3/sample/sample-config-files/client.conf /etc/open***/client 複製服務器端和客戶端對應的證書和密鑰文件到各自的目錄: [root@dba ~]# cd /etc/open***/easy-rsa/keys [root@dba ~]# cp ca.crt server.crt server.key dh2048.pem ta.key ../../server [root@dba ~]# cp ca.crt client.crt client.key ta.key ../../client 根據具體狀況修改配置文件: [root@dba ~]# vi server.conf local 0.0.0.0 #open***服務監聽地址,默認爲本地 port 1194 #監聽端口 proto udp #使用的協議,默認tcp,proxy模式下必須用tcp dev tun #申明使用的設備可選tap和tun,tap是二層設備,支持鏈路層協議;tun是ip層的點對點協議,限制稍微多一些 ca /etc/open***/server/ca.crt #用於驗證客戶的證書是否合法 cert /etc/open***/server/server.crt #Server使用的證書文件 key /etc/open***/server/server.key #Server使用的Key文件,注意本文件權限配置,防止泄漏 dh /etc/open***/server/dh2048.pem server 10.8.0.0 255.255.255.0 #配置×××服務使用的地址池,不能與實際的局域網衝突 ifconfig-pool-persist ipp.txt #用於記錄某個Client得到的IP地址,相似於dhcpd.lease文件,防止open***從新啓動後「忘記」Client曾經使用過的IP地址 push "route 10.8.0.0 255.255.255.0" #配置客戶端網絡內網段須要訪問服務器所在局域網的網絡的路由 push "route 192.168.20.0 255.255.255.0" ;push "redirect-gateway def1 bypass-dhcp" #開啓以後,客戶端全部流量都走Open××× push "dhcp-option DNS 180.76.76.76" #推送給客戶端的DNS地址 push "dhcp-option DNS 114.114.114.114" keepalive 10 120 #連通性檢測機制,10s進行ping檢測一次,120s不通認證鏈接丟失,自動重啓×××並進行鏈接 tls-auth /etc/open***/server/ta.key 0 # 用於防止Dos*** cipher AES-256-CBC comp-lzo #對數據進行壓縮,注意Server和Client一致 max-clients 100 #容許鏈接Open×××的最大客戶端數量 user nobody #運行Open×××的用戶和組 group nobody persist-key persist-tun status /etc/open***/server/log/open***-status.log log /etc/open***/server/log/open***.log log-append /etc/open***/server/log/open***.log verb 3 #至關於debug level,改爲verb 5能夠多查看一些調試信息 #服務器端啓用用戶名/密碼認證的配置 client-cert-not-required plugin /lib64/security/open***-auth-pam.so open***_mysql username-as-common-name auth-nocache
2.2 客戶端:
2.2.1 默認值配置文件(5個文件):
[root@dba client]# more client.conf client dev tun proto udp remote my-server-1 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt #單獨以一個文件存在 cert client.crt #單獨以一個文件存在,用戶名/密碼認證時須要註釋該行! key client.key #單獨以一個文件存在,用戶名/密碼認證時須要註釋該行! remote-cert-tls server tls-auth ta.key 1 #ta.key用於預防Dos*** cipher AES-256-CBC verb 3 #客戶端啓用用戶名/密碼認證的配置 auth-user-pass
上面默認的客戶端配置文件,管理起來很不方便,爲便於客戶端用戶使用能夠整合成一個文件來進行配置!
2.2.2 整合後的配置文件(1個文件):
模版(Mac,Windos系統整合後的客戶端配置文件的後綴名爲o***):
[root@dba client]# more client.o*** client dev tun proto udp remote my-server-ip 1194 #my-server-ip替換爲open***服務器對應到域名或IP地址。 resolv-retry infinite nobind persist-key persist-tun <ca> ca ca.crt #本行以ca.crt文件內容替換 </ca> <cert> cert client.crt #本行以client.crt文件內容替換 </cert> <key> key client.key #本行以client.key文件內容替換 </key> <tls-auth> tls-auth ta.key 1 #本行以ta.key文件內容替換 </tls-auth> key-direction 1 #須要增長本行,指定上面參數1對應的配置 remote-cert-tls server cipher AES-256-CBC verb 3 comp-lzo
三、使用MySQL-PAM模塊進行用戶認證:
3.1 安裝配置MySQL數據庫:
[root@localhost open***]# yum -y install mariadb mariadb-libs mariadb-server mariadb-devel mariadb-test [root@localhost open***]# rpm -qa | grep -i mariadb mariadb-5.5.52-1.el7.x86_64 mariadb-libs-5.5.52-1.el7.x86_64 mariadb-server-5.5.52-1.el7.x86_64 mariadb-test-5.5.52-1.el7.x86_64 mariadb-devel-5.5.52-1.el7.x86_64 [root@localhost open***]# mysql_secure_installation #安裝完成以後,執行mysql_secure_installation進行數據庫初始化設定root帳號密碼 [root@localhost open***]# systemctl start mariadb.service #啓動mariadb(CentOS 7.x)數據庫 [root@localhost ~]# mysql -u root -p123456 MariaDB [(none)]>create user open*** identified by '123456'; MariaDB [(none)]>create database open***; MariaDB [(none)]>use open***; MariaDB [(none)]>create table users ( -> id int AUTO_INCREMENT NOT NULL, -> name char(16) binary NOT NULL, -> passwd char(48) binary NOT NULL, -> primary key(id) -> ); MariaDB [open***]> INSERT INTOuser(name, passwd) VALUES('test', ENCRYPT('123456')); MariaDB [open***]> grant all on open***.* to 'open***'@'%' identified by '123456'; MariaDB [open***]> flush privileges; [root@localhost ~]# mysql -u open*** -p123456 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 29 Server version: 5.5.52-MariaDB MariaDB Server
3.2 安裝pam_mysql插件:
Google搜索下載tar包:pam_mysql-0.7RC1.tar.g [root@localhost ~]# tar -zxf pam_mysql-0.7RC1.tar.gz [root@localhost ~]# cd pam_mysql-0.7RC1 [root@localhost pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-openssl=/usr --with-pam-mods-dir=/lib64/security [root@localhost pam_mysql-0.7RC1]# make && make install 確認/lib64/security目錄下是否生成pam_mysql.so文件: [root@localhost pam_mysql-0.7RC1]# ll /lib64/security/pam_mysql.so -rwxr-xr-x. 1 root root 141680 Aug 24 10:25 /lib64/security/pam_mysql.so
3.3 安裝pam_mysql插件:
Google搜索下載tar包:open***-2.0.9.tar.gz [root@localhost auth-pam]# tar -zxvf open***-2.0.9.tar.gz [root@localhost ~]# cd open***-2.0.9/plugin/auth-pam/ [root@localhost auth-pam]# make [root@localhost auth-pam]# ll open***-auth-pam.so -rwxr-xr-x. 1 root root 22712 Aug 24 12:32 open***-auth-pam.so [root@localhost auth-pam]# cp open***-auth-pam.so /lib64/security/
3.4 修改配置文件:
在/etc/pam.d下新建pam認證文件:open***_mysql
[root@localhost auth-pam]# cd /etc/pam.d/ [root@localhost pam.d]# more open***_mysql auth sufficient /lib64/security/pam_mysql.so user=open*** passwd=123456 host=localhost db=open*** table=user usercolumn=name passwdcolumn =passwd sqllog=0 crypt=1 account sufficient /lib64/security/pam_mysql.so user=open*** passwd=123456 host=localhost db=open*** table=user usercolumn=name passwdcolumn =passwd sqllog=0 crypt=1
open***服務器端配置文件,在最後面添加下面四行:
[root@localhost open***]# vi server.conf client-cert-not-required plugin /lib64/security/open***-auth-pam.so open***_mysql username-as-common-name auth-nocache
open***客戶端配置文件,在最後面添加下面四行:
[root@localhost open***]# vi client.o*** cert client.crt #註釋該行或證書文件內容替換的該行! key client.key #註釋該行或證書文件內容替換的該行! #客戶端啓用用戶名/密碼認證的配置 auth-user-pass #添加該行!
3.5 修改open***服務器路由相關配置:
開啓路由轉發功能 # echo 1 > /proc/sys/net/ipv4/ip_forward 或者 # sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf # sysctl -p 配置防火牆,別忘記保存 # iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT # 開啓虛擬網段 # iptables -A INPUT -s 10.8.0.0/24 -m state --state NEW -m tcp -p tcp -j ACCEPT # # iptables -A INPUT -m state --state NEW -m udp -p udp --dport 1194 -j ACCEPT # # iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 10.2.8.0/24 -o eho0 -j SNAT --to-source 10.2.8.10 # 將虛擬網段10.8.0.0/24訪問內網10.2.8.0/24都經過內網網卡eth0而且將源地址轉換成10.2.8.10轉發 # service iptables save # service iptables restart # 重啓
3.6 重啓open***服務器端程序,客戶端從新加載配置文件進行測試。。。Ok啦
四、配置啓動服務器,客戶端程序並進行測試:
CentOS 6.x啓動方式:
[root@dba ~]# /etc/init.d/open*** start(restart,stop)
CentOS 7.x啓動方式:
[root@dba ~]# systemctl restart open***@server [root@dba ~]# ss -lnup State Recv-Q Send-Q Local Address:Port Peer Address:Port Cannot open netlink socket: Protocol not supported UNCONN 0 0 *:1194 *:* users:(("open***",pid=15933,fd=6))
3、安裝配置過程問題解決:
一、問題報錯:VERIFY ERROR: depth=1, error=certificate is not yet valid or error 9 at 1 depth lookup:certificate is not yet valid
解決方法:更新服務器系統時間到最新,從新生成服務器和客戶端全部證書以及配置文件便可。由於centos7默認安裝(沒有桌面)的狀況下timezone沒設置對而且時間沒有校對,致使服務器時間還沒到證書的簽名時間,因此須要重新設置一下timezone並校對時間。