-
-
li18538579903 | 当前状态:在线
总积分:71 2024年可用积分:0
注册时间: 2017-08-25
最后登录时间: 2017-11-13
-
centons.8+openvpn实现账户密码连接
li18538579903 发表于 2017/8/28 16:42:01 1864 查看 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
通过xftp把lzo-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 安装 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 改为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.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 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