# openVPN+LDAP AD认证,组权限管理

原创内容http://www.cnblogs.com/elvi/p/7661178.html

# openVPN+LDAP AD认证,组权限管理

#环境 centos6
#关闭selinux、防火墙
#vim /etc/sysconfig/network #修改hostname
#vim /etc/hosts #添加hostname名称

#更换阿里源
yum -y install wget vim
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#安装epel包
#yum install epel-release #EPEL源
yum -y install http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum makecache #生成缓存

ntpdate ntp.shu.edu.cn ##同步时间

# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度
#yum -y install openssl openssl-devel
#yum -y install lzo
#yum -y install openvpn easy-rsa # 安装openvpn和easy-rsa
yum -y install openssl openssl-devel lzo openvpn easy-rsa

# 修改vars文件
cd /usr/share/easy-rsa/2.0/
cp vars vars.bak
vim vars
    # 修改注册信息,比如公司地址、公司名称、部门名称等。
    export KEY_COUNTRY="CN"
    export KEY_PROVINCE="ShangHai"
    export KEY_CITY="ShangHai"
    export KEY_ORG="elven"
    export KEY_EMAIL="[email protected]"
    export KEY_OU="elven"
# 初始化环境变量
source vars
# 清除keys目录下所有与证书相关的文件
./clean-all
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可,存放目录/usr/share/easy-rsa/2.0/keys)
./build-ca
# 服务端证书和密钥(一路按回车,提示y/n时,输入y再按回车,一共两次)
./build-key-server server
# 为客户端生成证书和密钥(一路按回车,提示y/n时,输入y再按回车,一共两次)
./build-key client
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程慢,不要去中断它)
./build-dh
# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key

###创建服务器端配置文件
# 在openvpn的配置目录下新建一个keys目录
mkdir /etc/openvpn/keys
# 将需要用到的openvpn证书和密钥复制一份到刚创建好的keys目录中
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys
# 复制一份服务器端配置文件模板server.conf到/etc/openvpn/
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
# 查看server.conf里的配置参数
grep '^[^#;]' /etc/openvpn/server.conf
# 编辑server.conf
cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak
vim /etc/openvpn/server.conf
    #--------
    port
    proto tcp
    dev tun
    ca keys/ca.crt
    cert keys/server.crt
    key keys/server.key  # This file should be kept secret
    dh keys/dh2048.pem
    server 192.168.98.0 255.255.255.0 #虚拟网段
    ifconfig-pool-persist ipp.txt
    push "route 192.168.98.0 255.255.255.0"
    push "route 192.168.0.0 255.255.255.0"
    push "route 172.16.11.0 255.255.255.0"
    push "dhcp-option DNS 172.16.11.12"
    push "dhcp-option DNS 172.16.11.14"
    ;push "redirect-gateway def1 bypass-dhcp"  #使客户端所有网络通信通过vpn
    client-to-client
    duplicate-cn
    keepalive
    tls-auth keys/ta.key  # This file is secret
    comp-lzo
    persist-key
    persist-tun
    status openvpn-status.log
    log-append openvpn.log
    verb
    #--------

###配置内核和防火墙,启动服务
# 开启路由转发功能
sysctl -
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p
# 配置防火墙,别忘记保存
iptables -I INPUT -p tcp --dport  -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s  -j MASQUERADE
service iptables save

# 启动openvpn并设置为开机启动
service openvpn start
chkconfig openvpn on
netstat -anpt |grep vpn #查看网络端口
#service iptables restart
#service openvpn restart

#客户端配置文件
#cp /usr/share/doc/openvpn-*/sample/sample-config-files/client.conf client.ovpn
vim /etc/openvpn/client.ovpn
    # client.ovpn
    client
    dev tun
    proto tcp
    #remote
    remote
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    #cert client.crt
    #key client.key
    remote-cert-tls server
    tls-auth ta.key
    comp-lzo
    verb
    auth-user-pass #密码认证

########################
# 开启客户端
openvpn /etc/openvpn/client.ovpn &
pkill openvpn #关闭进程

#client keys
mkdir /etc/openvpn/kk
# 客户端需要的证书复制到刚创建好的目录
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,client.{crt,key},ta.key} /etc/openvpn/kk

#Windows客户端
#将OpenVPN服务器上的client.ovpn、ca.crt、client.crt、client1.key、ta.key上传到Windows客户端安装目录下的config文件夹

#############Ldap  openvpn-auth-ldap认证(推荐)
cd /etc/openvpn
yum install openvpn-auth-ldap -y
vi /etc/openvpn/auth/ldap.conf
    #---
    ### OpenVPN LDAP 认证
    <LDAP>
    URL ldap://172.16.11.14:389
    #认证用户密码
    BindDN "CN=ldap,OU=Dev,OU=Tech,OU=XLH_users,DC=test,DC=cn"
    password "
    #设置网络超时时间
    Timeout
    TLSEnable no
    FollowReferrals no
    </LDAP>
    <Authorization>
    BaseDN "DC=test,DC=cn"
    SearchFilter "(&(sAMAccountName=%u)(memberof=CN=vpn,OU=role,OU=XLH_users,DC=test,DC=cn))"
    #SearchFilter "(sAMAccountName=%u)"
    RequireGroup false
    #使用AD组权限
    <Group>
    BaseDN "OU=role,OU=XLH_users,DC=test,DC=cn"
    SearchFilter "(|(cn=vpn))"
    #MemberAttribute "member"
    MemberAttribute uniqueMember
    </Group>
    </Authorization>
    #---
vim /etc/openvpn/server.conf
# openvpn-auth-ldap
    plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf cn=%u"
    client-cert-not-required
    username-as-common-name
service openvpn restart
##############################################
#@ checkpsw.sh  密码文件认证
vim /etc/openvpn/checkpsw.sh
##
chmod +x /etc/openvpn/checkpsw.sh
vim /etc/openvpn/psw-file
aa1 qq1
 vim /etc/openvpn/psw-file
vim /etc/openvpn/server.conf
    # ---- checkpsw.sh
    script-security  system
    auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
    client-cert-not-required
    username-as-common-name
service openvpn restart
##############################################
#合并证书到配置文件中,仅供参考
vim client.ovpn
#ca ca.crt 注释证书文件
#在最后面添加以下内容:
</key>
key-direction
<tls-auth>
ta.key文件内容
</tls-auth>
################ Python脚本 Ldap 认证
cd /etc/openvpn
echo elven >>/etc/openvpn/authfile.conf #openvpn Ldap授权用户文件
echo test2 >/etc/openvpn/user.conf  #Ldap认证用户
echo w1w1 >>/etc/openvpn/user.conf
#yum install python-ldap
vim /etc/openvpn/check_credit.py
 #openvpn-Ldap.py
chmod +x /etc/openvpn/check_credit.py
python check_credit.py user.conf

vim /etc/openvpn/server.conf
# openvpn-Ldap.py
auth-user-pass-verify /etc/openvpn/check_credit.py via-file
client-cert-not-required
username-as-common-name
script-security
##############################################
04-23 06:57