您的位置:控制工程论坛网论坛 » 工业机器人 » centos6.8+openvpn实现账户密码连接(通过端口映射的方式)

li18538579903

li18538579903   |   当前状态:在线

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

注册时间: 2017-08-25

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

空间 发短消息加为好友

centos6.8+openvpn实现账户密码连接(通过端口映射的方式)

li18538579903  发表于 2017/8/28 16:33:18      2558 查看 2 回复  [上一主题]  [下一主题]

手机阅读

                  centos6.8+openvpn实现账户密码连接(通过端口映射的方式)

#搭建openvpn(编译安装)

初始化环境

 

#update epel mirror

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 vim ntpdate sysstat"

yum install -y gcc gcc-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/ntpdate ntp1.aliyun.com' >> /var/spool/cron/root

chmod 600 /var/spool/cron/root

ntpdate ntp1.aliyun.com

cat  << EOF 

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

 |                    ===System init over===                    |

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

 +---------------------------by liuhuihuang---------------------+

EOF

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

 

 

创建一个专门存放openvpn软件的目录

mkdir -p /home/xianlai/tools/openvpn

通过xftp把lzo-2.06.tar.gz openvpn-2.2.2.tar.gz checkpsw.sh传到/home/xianlai/tools/openvpn目录里

安装 lzo 软件,用于后面文件的压缩

tar zxf lzo-2.06.tar.gz 

cd lzo-2.06 

./configure && make && make install

通过 yum 安装 openssl,openssl-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 改为ls server.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 公网IP 1194  

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.conf、ca.crt、my.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 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="/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 回复