跳至主要内容

web管理openvpn

 

web管理openvpn

一部署目标
  • 客户端使用openvpn客户端使用证书密钥+用户密码验证登录,拨入内网
  • 服务器端使用mysql存储用户信息,并加密用户密码
  • 开发openvpn管理平台,可以web界面管理openvpn
  • 指定人员IP,通过策略限制人员访问资源
二部署openvpn
1安装openvpn服务端
1.1环境

系统
centos7.3
IP地址
100.100.100.100
Openvpn版本
2.4.3
安装方式
YUM
数据库
percona-server-5.7.18-15
验证工具
pam_mysql
openvpn插件版本
2.0.9

1.2安装依赖
  • yum -y install epel-release
  • yum install pam-devel pam
  • yum install -y easy-rsa
  • yum -y install mariadb-server mariadb-devel mariadb-libs
  • yum install -y cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-lib cyrus-sasl-gssapi
1.3安装openvpn
使用yum命令安装openvpn
yum install -y openvpn
1.4配置证书密钥
  • 复制证书密钥工具
#cp -R /usr/share/easy-rsa /etc/openvpn/
  • 进入工具目录
#cd /etc/openvpn/easy-rsa
  • 修改证书生成信息
#vim /etc/openvpn/easy-rsa/2.0/vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="CA"
export KEY_CITY="HangZhou"
export KEY_ORG="xxx"
export KEY_EMAIL="server_monitor@xxx.com"
export KEY_OU="YunWei
  • 重新加载
#source ./vars
  • 重新产生CA证书
./clean-all
./build-ca
  • 创建服务端证书
./build-key-server server
./build-dh
  • 创建客户端证书
./build-key client
  • 证书放到server目录下
cp /etc/openvpn/easy-rsa/keys/{ca.crt,ca.key,dh2048.pem,server.crt,server.csr,server.key} /etc/openvpn/server/
1.5配置数据库
  • 添加数据库oms
CREATE DATABASE IF NOT EXISTS openvpn DEFAULT CHARSET utf8mb4;
 
  • 创建vpn用户,允许操作数据库oms
use mysql;
GRANT ALL ON oms.* TO oms@'localhost' IDENTIFIED BY 'Oms.2017yw' WITH GRANT OPTION;
  • 创建vpnusers表
use oms;
CREATE TABLE `vpnusers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `active` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `clientip` varchar(50) NOT NULL,
  `serverip` varchar(50) NOT NULL,
  `vpngroup` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `vpnusers_username_de99699b_uniq` (`username`),
  UNIQUE KEY `vpnusers_clientip_1d6852f5_uniq` (`clientip`),
  UNIQUE KEY `vpnusers_serverip_6bd119b1_uniq` (`serverip`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4;
  • 创建测试数据
insert into vpnusers(username,password,name)\
values("test",md5("123456"),"测试用户");
1.6安装验证pam_mysql
  • 下载pam_mysql
下载:https://github.com/NigelCunningham/pam-MySQL
  • 安装:
unzip pam-MySQL-master.zip
cd pam-MySQL-master
./configure --with-mysql=/usr --with-pam=/usr/  --with-pam-mods-dir=/lib64/security/
make
make install
1.7配置pam验证openvpn
  • 创建openvpn验证模块文件
vim /etc/pam.d/openvpn
  • 配置:
auth required /lib64/security/pam_mysql.so user=oms passwd=Oms.2017yw host=localhost db=oms table=vpnusers usercolumn=username passwdcolumn=password where=active=1 sqllog=0 crypt=md5
account required /lib64/security/pam_mysql.so user=oms passwd=Oms.2017yw host=localhost db=oms table=vpnusers usercolumn=username passwdcolumn=password where=active=1 sqllog=0 crypt=md5
graphic
1.8测试验证
  • 命令
testsaslauthd -u test -p 123456 -s openvpn
test    测试用户
123456  测试密码
openvpn 配置的pam_mysql验证openvpn模块(创建的文件名称)
graphic
返回:0: OK "Success."  成功
  • 排错
查看/var/log/secure
2配置openvpn服务端
2.1安装验证模块
  • 下载http://swupdate.openvpn.org/community/releases/openvpn-2.0.9.tar.gz
  • 安装
tar zxvf openvpn-2.0.9.tar.gz
cd ./openvpn-2.0.9/plugin/auth-pam
make
cp -rf ./openvpn-auth-pam.so /etc/openvpn
2.2配置server文件
vim   /etc/openvpn/server.conf
########################## openvpn server config file
local                          100.100.100.100
port                           13579
proto                          tcp
dev                            tun
ca                             /etc/openvpn/server/ca.crt
cert                           /etc/openvpn/server/aliyun_openvpn_server.crt
key                            /etc/openvpn/server/aliyun_openvpn_server.key
dh                             /etc/openvpn/server/dh2048.pem
server                         172.31.0.0 255.255.0.0
push                           "route 10.0.0.0 255.0.0.0"
log                            /var/log/openvpn/openvpn.log
status                         /var/log/openvpn/openvpn-status.log
client-config-dir             /etc/openvpn/clientip
verb                           3
username-as-common-name
client-to-client
management localhost 7135
plugin openvpn-auth-pam.so openvpn
max-clients 1000
keepalive                      10 120
comp-lzo
persist-key
persist-tun
duplicate-cn
reneg-sec 0
2.3配置firewalld
  • 开放端口
firewall-cmd --permanent --add-port=13579/tcp
firewall-cmd --reload
  • 配置转发
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
  • 限制访问
根据实际情况配置访问控制
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0  -i tun0 -s 172.31.0.0/24 -d 192.168.3.10/32 -j DROP
firewall-cmd --complete-reload
2.4配置系统
开启系统转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
  • 重新载入
sysctl -p
2.5启动openvpn
  • 添加自启
systemctl enable openvpn@server
  • 启动进程
systemctl start openvpn@server
三管理平台
1环境

开发语言
Python2.7
框架
Django1.11
数据库
Mariadb
  

2界面


评论

此博客中的热门博文

Django使用markdown

Django使用markdown 安装markdown Pygments xxxxxxxxxx pip install Pygments markdown 生成css文件 xxxxxxxxxx pygmentize -S default -f html -a .codehilite > pygments.css -S 选择高亮模板,查看支持的高亮模板 xxxxxxxxxx from pygments . styles import STYLE_MAP STYLE_MAP . keys () 在对应APP添加 templatetags文件夹 custom_markdown.py xxxxxxxxxx import markdown from django import template from django . template . defaultfilters import stringfilter from django . utils . safestring import mark_safe register = template . Library () #自定义filter时必须加上 @register . filter ( is_safe = True ) #注册template filter @stringfilter       #希望字符串作为参数 def custom_markdown ( value ):     return mark_safe ( markdown . markdown ( value ,         extensions =[ 'markdown.extensions.fenced_code' , 'markdown.extensions.codehilite' ],         safe_mode = True ,         enable_attributes = False )) 模板中引用 xxxxxxxxxx {% load custom_markdown %...

Django部署

Django部署   uwsgi配置 官方文档 : uwsgi-docs 选项 描述 chdir the base directory (full path) module Django's wsgi file master 启动管理主进程 processes 启动的进程数 threads 每个进程的线程数 uid 启动uwsgi的用户 gid 启动uwsgi的用户组 pidfile 进程号文件 max-requests 最大请求数 vacuum clear environment on exit 服务停止自动清理sock文件和pid文件 daemonize 日志目录 home python虚拟环境路径 socket scoket地址(tcp或者sock文件路径) chmod-socket sock文件权限 http uwsgi监听IP和端口 x [uwsgi] chdir = /opt/Platform module = Platform.wsgi master = True pidfile = /tmp/tzop.pid vacuum = True max-requests = 5000 processes = 8 #socket=/var/run/op_uwsgi.sock # unxi scoket need set chmod-socket #chmod-socket=666 #socket=127.0.0.1:8000 http = 127 .0.0.1:8000 #static-map = /static=/application/Platform/static daemonize = /opt/Platform/logs/uwsgi.log 启动 x uwsgi --ini tzop.ini 停止 x uwsgi --stop /tmp/tzop.pid 重载 x uwsgi --reload /tmp/tzop.pid nginx配置 uwsgi_pass 不对 location 目录转发 x server {       listen         80 ;       server_name _...