基於CentOS 7.x搭建Open***服務器與配置詳解

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並校對時間。

相關文章
相關標籤/搜索