天天看點

CentOS7部署ldap認證OpenVPN一、說明二、密鑰無密碼OpenVpn部署cat /etc/openvpn/server.conf |egrep '(^$|^;^#)'三、防火牆路由配置四、windows用戶端配置五、基于LDAP認證

一、說明

VPN直譯就是虛拟專用通道,是提供給企業之間或者個人與公司之間安全資料傳輸的隧道,OpenVPN無疑是Linux下開源VPN的先鋒,提供了良好的性能和友好的使用者GUI;平時同僚出差在外面連接配接公司,擷取公司資源;2020由于新型肺炎導緻春節假期延長,有條件的公司都實行在家辦公,那麼請問怎麼保證各部門同僚能在家辦公?如何保障同僚出差在外也能連接配接公司擷取需要的資源?答案顯然是使用vpn,本文主要講部署openvpn和windows用戶端使用。           

環境:

需要有windows域環境做ldap認證

server:CentOS7.6 X64

client: win7

軟體: openvpn-2.4.8-1.el7.x86_64 openvpn-auth-ldap-2.0.3-17.el7.x86_64

二、密鑰無密碼OpenVpn部署

1、軟體包安裝

yum install easy-rsa openssh-server lzo lzo-devel openssl openssl-devel openvpn NetworkManager-openvpn libgcrypt libgpg-error libgcrypt-devel openvpn-auth-ldap  openldap-clients -y           

2、配置openvpn

複制預設配置檔案

# cp /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf /etc/openvpn           

修改server.conf

cat /etc/openvpn/server.conf |egrep '(^$|^;^#)'

local 172.16.0.207 #本機ip

port 1194 #運作端口

proto udp # 運作協定 tcp較慢

dev tun # #采用路由隧道模式

ca ca.crt

cert server.crt

key server.key # 伺服器密鑰

dh dh2048.pem # 密鑰交換協定檔案

topology subnet

server 192.168.11.0 255.255.255.0 #給用戶端配置設定位址池,注意:不能和VPN伺服器内網網段相同

ifconfig-pool-persist ipp.txt

push "route 0.0.0.0 0.0.0.0" # 定義網關

push "route 192.168.11.0 255.255.255.0" #推送vpn伺服器内網網段給用戶端

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 172.16.0.1" # 推送dns配置

keepalive 10 120 #存活時間,10秒ping一次,120 如未收到響應則視為斷線

tls-auth ta.key 0 # 第二個參數在伺服器端應該為'0',在用戶端應該為'1'。

cipher AES-256-CBC # 選擇一個密碼加密算法

comp-lzo #傳輸資料壓縮

max-clients 100 #最多允許 50 用戶端連接配接

persist-key

persist-tun

status openvpn-status.log

log openvpn.log

verb 3

mute 20     # 相同類别的資訊隻有前20條會輸出到日志檔案中

explicit-exit-notify 1

3、easy-rsa配置證書密鑰

# wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
# unzip easy-rsa-release-2.x.zip
# unzip
# yum install unzip
# unzip 2.x.zip
# cd easy-rsa-release-2.x/
# cd easy-rsa/
# mkdir /etc/openvpn/easy-rsa
# cp 2.0/* /etc/openvpn/easy-rsa/
# cd /etc/openvpn/easy-rsa/
# cat vars
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="CN"        # 修改部分
export KEY_PROVINCE="SH"       # 修改部分
export KEY_CITY="SJ"                 # 修改部分
export KEY_ORG="ICKEY"         # 修改部分
export KEY_EMAIL="[email protected]"  # 修改部分
export KEY_OU="YunWei"        # 修改部分
export KEY_NAME="EasyRSA"           

4、建立證書

# cp  /etc/openvpn/easy-rsa/openssl-1.0.0.cnf  /etc/openvpn/easy-rsa/openssl.cnf
# source ./vars
# ./clean-all
# ./build-ca    #之前已配置好相關參數,故執行指令後,按Enter鍵,一直到結束即可。
# 建立服務端證書
# ./build-key-server server    #建立通用名(common name)為"server"的證書檔案;按Enter鍵進行,在提示輸入密碼的地方,設定一個密碼如ickey@2020,最後輸入兩次“y”确認
# 生成防攻擊的key檔案
# openvpn --genkey --secret keys/ta.key  # 生成ta.key檔案(防DDos攻擊、UDP淹沒等惡意攻擊)
## 建立用戶端證書
# ./build-dh    #建立秘鑰檔案,耗時1分鐘左右
# ls   /etc/openvpn/easy-rsa/keys/
# cd  /etc/openvpn/easy-rsa/keys
# cp  dh2048.pem  ca.crt  server.crt  server.key  ta.key   /etc/openvpn
# ./build-key client         #建立一個通用名(common name)為client的用戶端證書;建立用戶端證書檔案,按回車進行,提示輸入密碼的地方,輸入之前設定的證書密碼,
# ls /etc/openvpn/easy-rsa/keys/           

5、啟動openvpn

# systemctl status [email protected]
# systemctl enable [email protected]
# systemctl start [email protected]
# systemctl status [email protected]           

此時系統已經開放udp 1194端口

三、防火牆路由配置

1、做端口映射

将伺服器的udp 1194端口在公司出口防火牆上做端口映射為udp 1194或其他端口;

2、openvpn本身防火牆配置

建議将iptables關閉,并手動添加一條規則

# iptables -t nat -A POSTROUTING -s 192.168.11.0/24  -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

重新開機openvpn服務 
# systemctl restart [email protected]           

四、windows用戶端配置

1、用戶端下載下傳與安裝

windows用戶端下載下傳位址
https://openvpn.net/community-downloads/
以下是win7
https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.8-I602-Win7.exe
win10:
https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.8-I602-Win10.exe
           

一路next 最後會彈出如下圖 提示安裝虛拟網卡驅動 鈎選并安裝 即可如圖

2、配置用戶端

安裝好openvpn用戶端軟體後,将openvpn伺服器端/etc/openvpn/easy-rsa/keys目錄下的 ta.key,client.key,client.crt,ca.crt證書複制到用戶端的安裝目錄的config檔案夾下,然後從用戶端的sample-config檔案夾内拷貝client.ovpn 到config檔案夾下,編輯client.ovpn

C:\Program Files\OpenVPN\config\cliet.ovpn配置如下:

client
dev tun
proto tcp
remote "你的防火牆映射出來的公網ip" 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 cipher AES-256-CBC
comp-lzo
verb 3 mute 20
           

儲存配置後輕按兩下桌面的OpenVPNGUI即完成登入;

以上是基于證書密鑰登入openvpn;

五、基于LDAP認證

1、伺服器端修改

# cat /etc/openvpn/auth/ldap.conf
<LDAP>
        URL             ldap://172.16.0.26:389
                # cat ldap.txt |grep CN=Administrator |head -n 1   
        BindDN          "CN=Administrator,CN=Users,DC=PKEY,DC=LOCAL"
        Password        PASSWORD
        Timeout         15
        TLSEnable       no
        FollowReferrals no
</LDAP>

<Authorization>
        BaseDN          "OU=PKEY,DC=PKEY,DC=LOCAL"    #查出來後範圍最大化
        SearchFilter    "(&(sAMAccountName=%u)(memberof=CN=myvpn,OU=openvpn,OU=PKEY,DC=PKEY,DC=LOCAL))"
        RequireGroup    false
        <Group>
                BaseDN      "OU=openvpn,OU=PKEY,DC=PKEY,DC=LOCAL"
                SearchFilter    "(cn=openvpn)"
                MemberAttribute     "member"
        </Group>
</Authorization>           

說明:

以上BaseDN部分通過這個工具測試得到;另外openvpn 這個ou域上需要有,myvpn是openvpn下的安全組,即加到這個openvpn下的myvpn組中的使用者可以通過認證登入openvpn,不加入這個組則不行;

ldapsearch -LLL -x -h 172.16.0.26 -D "[email protected]" -W -b "dc=pkey,dc=local" "*" >/tmp/ldap.txt

# cat ldap.txt |grep myvpn   #
memberOf: CN=myvpn,OU=openvpn,OU=PKEY,DC=PKEY,DC=LOCAL
           

2、修改server.conf配置

server.conf配置檔案隻需要在之前的基礎上添加以下三行即可

# cat server.conf |egrep -v '(^$|^;|^#)' |tail -n 6
log         openvpn.log
verb 3
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"    #ldap認證需要添加
client-cert-not-required  # ldap認證需要添加
username-as-common-name   # ldap認證需要添加
mute 20
           

重新開機openvpn服務

systemctl restart [email protected]

3、用戶端配置

此時用戶端配置隻需要修改

C:\Program Files\OpenVPN\config\client.ovpn配置檔案即可,最終配置如下:

client
dev tun
proto udp
remote  "你的防火牆映射出來的公網ip" 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
#cert client.crt    ## 結合了ldap注釋
#key client.key      ## 結合了ldap注釋
auth-user-pass     # 結合了ldap認證需要添加
remote-cert-tls server
tls-auth ta.key 1 
cipher AES-256-CBC
comp-lzo
verb 3
mute 20           

此時再次運作OpenVPNGUI會彈出如下圖所示:

CentOS7部署ldap認證OpenVPN一、說明二、密鑰無密碼OpenVpn部署cat /etc/openvpn/server.conf |egrep '(^$|^;^#)'三、防火牆路由配置四、windows用戶端配置五、基于LDAP認證
**LDAP user "donyc" was not found.**
Wed Feb  5 22:47:27 2020 101.80.125.78:34260 PLUGIN_CALL: POST /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so/PLUGIN_AUTH_USER_PASS_VERIFY status=1
Wed Feb  5 22:47:27 2020 101.80.125.78:34260 PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so
Wed Feb  5 22:47:27 2020 101.80.125.78:34260 TLS Auth Error: Auth Username/Password verification failed for peer           

繼續閱讀