您的位置:控制工程论坛网论坛 » 工业机器人 » centons.8+openvpn实现账户密码连接

li18538579903

li18538579903   |   当前状态:在线

总积分:71  2024年可用积分:0

注册时间: 2017-08-25

最后登录时间: 2017-11-13

空间 发短消息加为好友

centons.8+openvpn实现账户密码连接

li18538579903  发表于 2017/8/28 16:42:01      1865 查看 0 回复  [上一主题]  [下一主题]

手机阅读

                                          centons.8+openvpn实现账户密码连接

#搭建openvpn(编译安装)

初始化环境

复制代码

#update epelmirror

yum install wget-y

cd/etc/yum.repos.d && rm -rf *

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

 

 

#Yum Packs

echo "install/update gcc make wget vimntpdate sysstat"

yum install -y gccgcc-c++ vim ntpdate lsof

 

 

#disable selinux

sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

setenforce 0

 

#alias vim

echo 'alias vi="vim"' >>/etc/profile

source /etc/profile

 

#modify UseDNS

 

sed -i '#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config

 

 

#ntpdate corntab

echo 'ntpdate ntp1.aliyun.com'

echo '*/5 * * * * /usr/sbin/ntpdatentp1.aliyun.com' >> /var/spool/cron/root

chmod 600 /var/spool/cron/root

ntpdatentp1.aliyun.com

cat  << EOF

 +--------------------------------------------------------------+

 |                    ===System init over===                    |

 +--------------------------------------------------------------+

 +---------------------------byliuhuihuang---------------------+

EOF

echo "##########################################################"

复制代码

 

创建一个专门存放openvpn软件的目录
mkdir -p /home/xianlai/tools/openvpn

通过xftplzo-2.06.tar.gz openvpn-2.2.2.tar.gzcheckpsw.sh传到/home/xianlai/tools/openvpn目录里

安装 lzo 软件,用于后面文件的压缩
tar zxf lzo-2.06.tar.gz
 
cd lzo-2.06
 
./configure && make && make install

通过 yum 安装 opensslopenssl-devel 两个软件,没有它俩openvpn 的安装就会报错
yum -y install openssl openssl-devel

安装 openvpn 软件
tar zxf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
make
make install

检查 openvpn 是否安装成功,并且查看其版本
which openvpn
openvpn --version

备份 var 文件,并且修改模板
cd /home/xianlai/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0
cp vars vars.bak
vim vars
export KEY_COUNTRY="CN"
 
export KEY_PROVINCE="BJ"
 
export KEY_CITY="BJ"
 
export KEY_ORG="XL"
 
export KEY_EMAIL="528634141@qq.com"
 
export KEY_EMAIL=528634141@qq.com
 
export KEY_CN=CN
 
export KEY_NAME=xianlai
 
export KEY_OU=xianlai
 
export PKCS11_MODULE_PATH=changeme
 
export PKCS11_PIN=1234

执行 source 命令使配置文件生效
source vars
./clean-all

创建 CA 证书,一路回车
./build-ca
 
生成服务器端证书和秘钥文件,输入两次y,一路回车
./build-key-server server
Sign the certificate? [y/n]:y
 
1 out of 1 certificate requests certified, commit? [y/n]y
 

生成客户端证书和 key 文件(用户user1
./build-key user1
 
Sign the certificate? [y/n]:y
 
1 out of 1 certificate requests certified, commit? [y/n]y
 

生成传输进行秘钥交换时用到的交换秘钥协议文件
./build-dh

生成一个防止恶意攻击的文件(效果似乎一般)
openvpn --genkey --secret keys/ta.key
 

创建openvpn 目录,用于存放配置文件
mkdir /etc/openvpn
 

拷贝2.0目录下的 keys 目录,并切换目录拷贝server.conf client.conf 文件
cp -ap keys/ /etc/openvpn/
cd /home/xianlai/tools/openvpn/openvpn-2.2.2/sample-config-files/
cp client.conf server.conf /etc/openvpn/

编辑 openvpn 的配置文件,在操作前养成好习惯,先进行备份
cd /etc/openvpn
cp server.conf server.conf.bak

可以通过 grep 命令过滤查看配置文件,并通过一个临时文件将过滤后的结果再次导入 server.conf
grep -vE "^;|^#|^$" server.conf > tmp.log
cat tmp.log > server.conf

编辑过滤后的 server.conf 文件
vim server.conf
port 1194 #
端口可以更改
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key # This file should be kept secret
dh /etc/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
push "route 192.168.**.0 255.255.255.0"
push "dhcp-option DNS *.*.*.*"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
client-cert-not-required #
不使用客户端证书,使用密码进行验证 
username-as-common-name #
使用认证用户名,不使用证书 
script-security 3 system #
允许通过环境变量将密码传递给脚本 
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env #
指定路径,允许登陆的用户名及密码

打开路由转发功能
vim /etc/sysctl.conf
 
net.ipv4.ip_forward = 1
sysctl -p

拷贝启动脚本至/etc/init.d目录
cp /home/xianlai/tools/openvpn/openvpn-2.2.2/sample-scripts/openvpn.init/etc/init.d/openvpn
chmod 700 /etc/init.d/openvpn
chkconfig --add openvpn

修改脚本openvpn
切到148行,把ls *.conf 改为lsserver.conf保存即可

#启动openvpn
/etc/init.d/openvpn start

切到/etc/openvpn目录下
cd /etc/openvpn
cp /home/xianlai/tools/openvpn/checkpsw.sh .
创建psw-file文件
touch psw-file
 
添加一个用户测试,刑如:liuhuiuhang 123456(用户和密码写在一行,需要添加用户的话往下顺延即可)

分别修改一下这两个文件的权限
chmod +x checkpsw.sh
 
chmod 400 psw-file

导出 client.conf ca.crt
sz -y client.conf
sz -y keys/ca.crt

创建一个后缀名为 .ovpn 的文件(my.ovpn),内容如下:
client
 
dev tun
 
proto tcp
 
remote
公网IP1194  
resolv-retry infinite
 
nobind
 
persist-key
 
persist-tun
 
ca ca.crt
 
comp-lzo
 
verb 3
 
auth-user-pass

##特别提示:
#
配置防火墙,别忘记保存
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn"-j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
service iptables save

##端口映射

本文使用的是端口映射的方式做的,具体命令如下:

nat server protocol tcp global 公网IP 80 inside 内网IP 80

 

#windows客户端配置
安装openvpn-2.2.2-install.exe,默认安装,一直默认,然后新建一个文件夹vpn,把client.confca.crtmy.ovpn放至文件夹vpn中,然后把vpn拷贝至openvpn的安装目录中的config目录中。

#MAC客户端配置
下载tunnelblick,然后安装,把vpn文件夹拷贝至MAC电脑中,把my.ovpn放至tunnelblick中即可。具体操作可参考链接:http://www.xitongzhijia.net/xtjc/20150414/45176.html

转载:http://aby028.blog.51cto.com/5371905/1886851

附件:checkpsw.sh如下所示:

复制代码

#!/bin/sh

###########################################################

# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>

#

# This script willauthenticate OpenVPN users against

# a plain textfile. The passfile should simply contain

# one row per userwith the username first followed by

# one or morespace(s) or tab(s) and then the password.

 

PASSFILE="/etc/openvpn/psw-file"

LOG_FILE="/var/log/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

 


1楼 0 0 回复