一、 网络环境如下
1.OpenVPN Server
外网卡eth1配置 IP:121.12.x.y MASK:255.255.255.128 GateWay:121.12.x.1 |
LAN eth0卡配置 IP:192.168.38.87 MASK:255.255.255.0 DNS:192.168.38.1 |
远程拨号DHCP池: 172.16.0.0 -172.16.0.127 掩码:255.255.255.128 |
2.内网三层交接口IP:192.168.38.254
二、网络配置注意点
1. OpenVPN Server内网卡上配置反向路由(eth0为内网口,eth1为外网口)
vi/etc/sysconfig/network-scripts/route-eth0
添加如下内容:192.168.0.0/16 via 192.168.38.254
2. VPN Server防火墙配置(eth0为内网口,eth1为外网口)
#开放外网口UDP 1194(OpenVPN)
iptables -I INPUT -i eth1 -p udp --dport 1194 -j ACCEPT
#内网口全部接受
iptables -I INPUT -i eth0 -j ACCEPT
#影响所有有出主动出去的返回包
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#默认策略拒绝所有
iptables -A INPUT -j DROP
iptables -I OUTPUT -o eth1 -p udp --sport 1194 -j ACCEPT
iptables -I OUTPUT -o eth0 -j ACCEPT
iptables -A OUTPUT -j DROP
#接受外网口ping(允许ping入)
iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT
#允许ping出
iptables -I OUTPUT -p icmp -m icmp--icmp-type echo-reply -j ACCEPT
iptables -I OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
保存配置/sbin/iptables-save
说明:配置外网卡开放了udp端口1194;内网卡全开放同时开启了ping
3.在三层交换机配置路由
iproute 172.16.0.0 255.255.255.128 192.168.38.87
三、服务器软件安装
1.建议停用SELinux 及开启IP转发
vi /etc/selinux/config
修改前:SELINUX=enforcing
修改后:SELINUX=disabled
开启系统的路由功能 echo "1" >/proc/sys/net/ipv4/ip_forward
然后重启服务器
2. Googele authenticator安装
准备打包的软件环境
yum -y install git gcc \
libtool autoconf \
automake pam-devel \
rpm-build qrencode-libs;
抓取源代码,打包
git clone https://github.com/google/google-authenticator-libpam.git
cd google-authenticator-libpam
./bootstrap.sh
./configure
make dist
cp google-authenticator-*.tar.gz~/rpmbuild/SOURCES/
上面这一步如果提示~/rpmbuild目录不存在,则先把下一步执行一次然后再试
下面这一步会确保有~/rpmbuild目录
rpmbuild -ba contrib/rpm.spec
# 成功以后,编好的rpm包路径在:
/root/rpmbuild/RPMS/x86_64/google-authenticator-1.03-1.el6.x86_64.rpm
进入 cd /root/rpmbuild/RPMS/x86_64/
安装:rpm -ivh google-authenticator-1.03-1.el6.x86_64.rpm
3. OpenVPN安装
准备打包的软件环境
正常yum是没有openvpn、easy_rsa的安装包,需要另外添加yum安装源:epel源
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install openvpn \
pam_ldap \
openvpn-auth-ldap \
pamtester \
lzo \
openssl \
zlib;
4. 证书配置
mkdir/etc/openvpn/easy-rsa
cp/usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
vi/etc/openvpn/easy-rsa/vars修改vars中的以下信息,并保存
内容如下:
export KEY_COUNTRY="CN"
export KEY_PROVINCE="GD"
export KEY_CITY="ZS"
export KEY_ORG="NEO"
export KEY_EMAIL="[email protected]"
exportKEY_OU=“NEO”
进入cd /etc/openvpn/easy-rsa/
source ./vars初始化
./clean-all清理证书(此步骤第一次可以省去)
./build-ca创建根证书 在keys下生成ca.crt ca.key
./build-key-serverNEO创建服务器端证书 在keys下生成neo.crt neo.csr neo.key
./build-keyNEO-client创建客户端证书 在keys下生成neo-client.crt neo-client.csr neo-client.key
./build-dh生成diffiehellman参数 在keys下生成dh2048.pem
四、服务器软件配置
1.用户认证配置
vi/etc/pam_ldap.conf
内容如下:
host 192.168.38.1 192.168.38.8
base dc=nccn,dc=int
uri ldap://192.168.38.1/
binddncn=ldapuser,ou=Special,ou=ZS,ou=NEOUsers,dc=nccn,dc=int
bindpw ldapuser账号密码
pam_login_attributesAMAccountName
2.OpenVPN配置
vi /etc/openvpn/server.conf
内容如下:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/neo.crt
key /etc/openvpn/easy-rsa/keys/neo.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 172.16.0.0 255.255.255.128
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.0.0"
push "dhcp-option DNS 192.168.38.1"
client-to-client
#keepalive 10 120
comp-lzo
max-clients 100
log /etc/openvpn/openvpn.log
log-append /etc/openvpn/openvpn.log
client-cert-not-required
username-as-common-name
plugin/usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so /etc/pam.d/openvpn
vi/etc/pam.d/openvpn
内容如下:
auth required pam_google_authenticator.so nullokforward_pass debug
auth required pam_ldap.so use_first_pass debug
account required pam_unix.so
第一行的 forward_pass 参数使得一次读入系统密码(ldap,也就是 AD 密码)和 google authenticator 的密码,然后把系统密码扔给后续的pam(也就是带有 use_first_pass 参数的pam模块)处理
第二行的 use_first_pass 上面已有讲到(前两行都带 debug 参数完全是调试的需要,生产环境可以不用)
第三行是必须的,否则 openvpn 登录不上
3. 添加VPN服务为自启动
chkconfig --add openvpn
chkconfig openvpn on
service openvpn start
五、VPN Client配置
1. Googele authenicator以及用户初始化:
useradd ldapuser
su ldapuser
google-authenticator 全部回答”Y”
2. 安装手机端
使用app商店查找Googeleauthenicator,进行安装
在手机客户端扫码或者输入账号名和此账号的 secretkey
完成后,每隔36000就会生成一个新6位码:
3. 验证是否成功
pamtester openvpn ldapuser authenticate
4. 电脑端OpenVPN Client配置
从OpenVPN服务器上的 /etc/openvpn/easy-rsa/keys/位置下载ca.crt到windows
同时在windows下生成一个叫client.ovpn的配置文件,内容如下:
client
dev tun
proto udp
remote 121.12.x.y 1194
ca ca.crt
verb 3
auth-user-pass
comp-lzo
在Windows OPENVPN客户端(此软件安装略)上,点“+”号
导入client.ovpn文件
即可进行测试拨号
下面成功显示
查看一下系统IP
查看网络路由表:
上面表示VPN拨号成功
后续
编写一脚本自动建VPN账号和发邮件给VPN 用户
修改/etc/nail.rc (/etc/mail.rc)
Set [email protected]maildomain.com smtp=mail.maildomain.com set smtp-auth-user=notice smtp-auth-password=password set smtp-auth=login
说明:
from是发送的邮件地址
smtp是发生的外部smtp服务器的地址
smtp-auth-user是外部smtp服务器认证的用户名
smtp-auth-password是外部smtp服务器认证的用户密码
smtp-auth是邮件认证的方式
vi vpnuseradd
内容(其中:OpenVPN Client Setting Manual.pdf是OpenVPN用户端操作手册):
----------------------
#!/bin/bash
echo "please input openvpnusername:"
read a
if test-e /home/$a
then echo "this vpn user is exist!"
else
useradd $a
su -c \
"google-authenticator -t -f -d -w17 -r 3 -R 30 -q" \
$a
echo "Below is $a ‘s new secretkey:" >gs-temp
echo " " >>gs-temp
head -1 /home/$a/.google_authenticator>>gs-temp
echo " ">>gs-temp
echo "1. Please follow the attachment Manual to do!" >>gs-temp
echo "2. Any question, please call IT NO.xxxx !" >>gs-temp
mail -s "Google_authenticatorKey" -a OpenVPN\ Client\ Setting\ Manual.pdf [email protected] <gs-temp
fi
------------------------------
chmod755 vpnuseradd (chmod vpnuseradd 为可执行文件)