openvpn的搭建、使用以及设置分配用户密码 Linux教程



apt-get update

apt-get install openvpn easy-rsa


# 创建默认证书

make-cadir /etc/openvpn/ca

cd /etc/openvpn/ca

vim vars

---更改证书的如下内容

export KEY_COUNTRY="US"

export KEY_PROVINCE="CA"

export KEY_CITY="SanFrancisco"

export KEY_ORG="Fort-Funston"

export KEY_EMAIL="me@myhost.mydomain"

export KEY_OU="MyOrganizationalUnit"

有一个KEY_NAME,值可自定义,例如server

export KEY_NAME="server"

source vars


#CA数字证书认证机构,负责颁发证书,用于openvpn服务器和客户端的认证

./clean-all

./build-ca

./build-ca 后一直回车确认,或者./build-ca --batch保持默认设置,无须回车确认 之后证书的制作命令,直接按照添加--batch执行,也可不添加,不再单独说明


#服务器证书

./build-key-server --batch server

server为之前vars里export KEY_NAME="server"的值 自定义server或者其他时后面需要在服务器配置文件中 client名称可自定义,如果修改最后在客户端配置文件中,需更改对应:

cert server.crt

key server.key

作为修改之后的证书

制作Diffie-Hellman key

$ ./build-dh

生成HMAC签名加强TLS认证

$ openvpn --genkey --secret keys/ta.key

客户端证书

$ ./build-key --batch client

client名称可自定义,如果修改最后在客户端配置文件中,更改对应

cert client.crt

key client.key


# openvpn服务器配置

cd keys/

ls -l

cp ca.crt ca.key server.crt server.key ta.key dh2048.pem ../../

cd ../../

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .

gzip -d server.conf.gz

vim server.conf


以下内容替换为证书的路径名称,同路径下可直接写名称

ca ca.crt

cert server.crt

key server.key 

dh dh2048.pem


服务器证书一开始就命名为server默认值,后面就不用修改了

取消下面的注释(删掉;)

;push "redirect-gateway def1 bypass-dhcp"

;push "dhcp-option DNS 208.67.222.222"

;push "dhcp-option DNS 208.67.220.220"

;user nobody

;group nogroup

路由器作为client的话设置的话,DNS那里两行仍然是一个注释

去掉下面的注释,并再下一行添加key-direction 0

;tls-auth ta.key 0 # This file is secret


# 防火墙设置

net.ipv4.ip_forward=1

sysctl -p


启动服务端

$ systemctl start openvpn@server

$ systemctl enable openvpn@server


#客户端文件制作

cd /etc/openvpn/ca/keys

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .


# vi  client.conf

;local a.b.c.d

remote my-server-1 1194

;user nobody

;group nogroup

去掉里面的;,第一个local后面设置为0.0.0.0,第二句的my-server-1换为server端的ip或者自己绑定的域名

删掉分号:

;tls-auth ta.key 1

并在下一行添加

key-direction 1

为了简单,客户端导入的文件我们就只用一个.ovpn的文件,在服务端的ubuntu运行

$ cd

$ mkdir /client/ovpn

$ cat /etc/openvpn/ca/keys/client.conf <(echo -e '<ca>') /etc/openvpn/ca/keys/ca.crt <(echo -e '</ca>\n<cert>') /etc/openvpn/ca/keys/client.crt <(echo -e '</cert>\n<key>') /etc/openvpn/ca/keys/client.key <(echo -e '</key>\n<tls-auth>') /etc/openvpn/ca/keys/ta.key <(echo -e '</tls-auth>') > ~/client/ovpn/client.ovpn

将client.ovpn更改:

ca ca.crt

cert client.crt

key client.key

tls-auth ta.key 1

为:

ca [inline]

cert [inline]

key [inline]

tls-auth [inline] 1

进入/client/ovpn目录,将 client.ovpn给复制出来,直接复制内容或者用scp等,文件一定是.ovpn结尾的形式


# 测试工具推荐:

windows:

openvpn gui:  https://openvpn.net/index.php/open-source/downloads.html


# 账号密码分配

vim /etc/openvpn/server.conf

追加:

# use username and password login
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
client-cert-not-required
username-as-common-name
script-security 3 execve

cat /etc/openvpn/checkpsw.sh

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/etc/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then 
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then 
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1


# 配置账号密码

cd /etc/openvpn

vim psw-file

形式如下:

xu3352 123456@      # 表示账号密码,一行一个,账号密码空格分开


# 重启openvpn

/etc/init.d/openvpn restart

最后一步,客户端的文件client.ovpn

新添加:

auth-user-pass

修改之后,客户端文件需要重新导入到本地openvpn工具中


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回