前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS6.5 基于AD域账号联动认证的Open***服务器配置

CentOS6.5 基于AD域账号联动认证的Open***服务器配置

作者头像
木子-Lee
发布2019-03-13 11:13:37
2.4K0
发布2019-03-13 11:13:37
举报

前言:

        最近一直在研究Linux下基于AD联动认证服务器的配置(包括FTP服务器、OPEN***服务器、邮件服务器等),一方面降低公司成本,二方面提高信息化管理实现单点登录方便用户管理。下面就详细说一下Open***服务器的配置,可能您的环境可能和我的不一样的,所有我不能保证你配置以后能够正常使用,具体的根据自己的环境而言,有需要帮助的可以留言。

一、Open***简介

        Open***是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。Open***允许创建的***使用公开密钥、数字证书、或者用户名/密码来进行身份验证。

        它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

        目前Open***能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista/7/8/8.1以及Android和iOS上运行,并包含了许多安全性的功能。它并不是一个基于Web的***软件,也不与IPsec及其他***软件包兼容。

二、原理

      Open***的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在Open***的中的工作机理进行介绍:

        虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是Open***能够跨平台一个很重要的理由。

        在Open***中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发提交去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。

三、加密

        Open***使用OpenSSL库来加密数据与控制信息。这意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

四、身份验证

Open***提供了多种身份验证方式,用以确认连接双方的身份,包括:

  • 预享私钥  第三方证书  用户名/密码组合          预享密钥最为简单,但同时它只能用于创建点对点的***;基于PKI的第三方证书提供了最完善的功能,但是需要额外维护一个PKI证书系统。Open***2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍需要一份服务器证书用作加密。
五、功能与端口

        Open***所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时也支持TCP。IANA(Internet Assigned Numbers Authority)指定给Open***的官方端口为1194。Open*** 2.0以后版本每个进程可以同时管理数个并发的隧道。Open***使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定***协议的情况下。

        Open***连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。

         服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。

        Open***提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以创建三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。

六、安全

        Open***与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。

        Open***通过PKCS#11支持硬件加密标识,如智能卡。

七、对比

        Open***,能实现二/三层的基于隧道的***。

stunnel,使用SSL向任何单一端口的TCP服务提供安全保护。

八、Open***实现LDAP认证方法

        网上关于Open***服务器部署的部署太多了,但都是相对来说比较旧或比较简单的一些方法,如果您需要实现与公司AD域服务器进行联动认证,那您可能需要继续往下看。Open***实现LDAP认证的方法很多,用户可以根据自己的需求来选择,下面我们简单说一下:

1:Open***-pam-ldap

通过pam的ldap验证,来实现,open***是支持pam的验证的。通过pam,您可以实现mysql或者ldap的验证,这个pam验证,我们在Vsftpd的部署的时候可以采用这种方法实现,实现方法简单可靠。

2:Open***-Radius-ldap

通过Radius,也是可以实现ldap的验证,不过您需要在部署Radius服务器,通过它可以实现mysql或者ldap的验证。

3:Open***-auth-ldap

这应该是最简单的方式,直接通过一个插件就实现Open*** 采用ldap验证,在第一次配置的时候您可能需要用心去研究一下。

、本次实验网络拓扑
clip_p_w_picpath002[4]
clip_p_w_picpath002[4]
十、测试需求

        *** Client通过AD域服务器进行账号密码认证,认证通过后,可以访问公司内部网络。

说明:

        网上有很多关系Open***的配置文档,基本上都是您抄我,我抄您的,真正能够说明原因与解决问题的太少了。而且关于基于AD域账号认证的文章基础上面没有什么,下面我就基于AD认证的Open***服务器的安装与配置做一个详细的说明。

十一、详细配置
1、常规设置

① 设置Open***服务器的静态IP如上图所示,也可以根据自己的需求进行设置。

② 设置Open***服务器的主机名。

③ 更新Open***服务器系统的需要补丁与配置。

④ 启动防火墙配置。

2、Open***服务器的安装与配置
1)Open***服务器的安装
代码语言:javascript
复制
Yum install open*** open***-auth-ldap -y //安装Open***与LDAP认证插件
Yum install easy-rsa -y //安装RSA证书管理工具
2)设置Open*** Server与easy-rsa

vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本

clean-all 脚本, 是创建生成ca证书及密钥文件所需要的文件及目录

build-ca 脚本, 生成ca证书(交互)

build-dh 脚本, 生成Diffie-Hellman文件(交互)

build-key-server 脚本, 生成服务器端密钥(交互)

build-key 脚本, 生成客户端密钥(交互)

pkitool 脚本, 直接使用vars的环境变量设置, 直接生成证书(非交互)

代码语言:javascript
复制
Cd /etc/open*** //进入到Open***配置目录
Cp -ra /usr/share/easy-rsa/2.0/ /etc/open*** //复制样式证书管理工具到Open***目录
Mv 2.0 easy-rsa //重命名文件夹名称

3)创建当前OpenSSL的符号链接

代码语言:javascript
复制
Cd /etc/open***/easy-rsa //进入Easy-rsa目录
Ln -s openssl-1.0.0.cnf openssl.cnf //设置符号链接

4)设置Vars证书变量配置文件

代码语言:javascript
复制
<<< OUTPUT OMMITTED >>>
# Increase this to 2048 if you
# are paranoid. This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
exportKEY_SIZE=2048 //设置加密长度
# In how many days should the root CA key expire?
exportCA_EXPIRE=3650 //设置CA有效期
# In how many days should certificates expire?
exportKEY_EXPIRE=3650 //设置Key有效期
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
exportKEY_COUNTRY="CN" //设置国家名称
exportKEY_PROVINCE="GD" //设置省份名称
exportKEY_CITY="SZ" //设置城市名称
exportKEY_ORG="www.Lidongni.com" //设置组织名称
exportKEY_EMAIL="2306867585@qq.com" //设置邮件地址
exportKEY_EMAIL=2306867585@qq.com
exportKEY_CN=Test //设置名称
exportKEY_NAME=Test
portKEY_OU=Test //设置组织名称
portPKCS11_MODULE_PATH=Test
exportPKCS11_PIN=1234

5)服务器端证书生成与配置

代码语言:javascript
复制
Cd /etc/easy-rsa
Source ./vars
./clean-all
Build "ca" //生成Root Ca证书, 用于签发Server和Client证书,可以看到已经生成了ca.crt ca.key文件
./build-ca
Build "server" //生成服务器使用的*** server Ca证书,server是您为CA证书起的一个名字, 以server名字为例,生成的服务器使用的CA证书文件为: server.crt server.key
./build-key-server server
Build "client"
这里我们在前面有做相应的配置,默认即可。在后面有一个需要确认的地方,输入y继续执行即可。
./build-key client
Build "dh2048.pem" //生成Diffie-Hellman文件,可以看到生成了2048位的Diffie-Hellman文件
由于我们采用的2048位,所以配置的时间相对来说会比较长,您可以先去喝口茶。
./build-dh dh2048.pem

6)建立对应目录,并将对应的证书复制到相关目录

代码语言:javascript
复制
Cd /etc/open*** //进入Open***目录
Mkdir {client,server} //建立Client与Server目录

# Server相关配置

代码语言:javascript
复制
Cp easy-rsa/keys/ca.crt server/
Cp easy-rsa/keys/server.crt server/
Cp easy-rsa/keys/server.key server/
Cp easy-rsa/keys/dh2048.pem server/
Cp auth/ldap.conf server/ldap.conf
Touch server/staticip.txt

# Client相关设置

代码语言:javascript
复制
Cp easy-rsa/keys/ca.crt client/
Cp easy-rsa/keys/client.crt client/
Cp easy-rsa/keys/client.key client/

7)配置Open***配置文件Server.conf

代码语言:javascript
复制
;local a.b.c.d //监听IP地址,默认监听所有IP
mode server //模式设置
tls-server //使用TLS加密传输,本端为Server
port 1194 //通讯端口设置
;proto tcp //Open***服务器默认采用UDP 1194端口,但是很多运营商封了这个端口,注意修改
proto udp //测试采用UDP端口,如果您的网络不是很稳定建议采用UDP端口
topology subnet
dev tun //设置创建tun的路由IP通道,还是创建tap的以太网通道路由IP容易控制,所以推荐使用它;但如果如IPX等必须使用第二层才能通过的通讯,则可以用tap方式,tap也就是以太网桥接。
;dev-node MyTap //Windows需要给网卡一个名称,linux不需要设置
ca /etc/open***/server/ca.crt //证书位置设置最好设置成绝对路径,有时候采用相对路径会报错。
#这里是重点必须指定SSL/TLS root certificate (ca),certificate(cert), and private key (key),ca文件是服务端和客户端都必须使用的,但不需要ca.key服务端和客户端指定各自的.crt和.key,请注意路径,可以使用以配置文件开始为根的相对路径,也可以使用绝对路径,请小心存放.key密钥文件。
cert /etc/open***/server/server.crt
key /etc/open***/server/server.key
dh /etc/open***/server/dh2048.pem //指定Diffie hellman parameters.
script-security 2
username-as-common-name
### LDAP AUTH ###
//我们采有open***-auth-ldap认证,所以设置如下所示:
plugin /usr/lib/open***/plugin/lib/open***-auth-ldap.so "/etc/open***/server/ldap.conf"
#################
#tmp-dir "/tmp"
#up "/etc/open***/sky***server/tuzfal_all"
server 192.168.75.0 255.255.255.0 //配置***使用的网段,Open***会自动提供基于该网段的DHCP服务,注意不能和任何一方的局域网段重复,保证唯一性。
ifconfig-pool-persist staticip.txt //绑定IP的设置
;ifconfig-pool 202.96.17.2 202.96.17.254 //DHCP分配的地址池
#为客户端创建对应的路由,以另其到达公司内网服务器。但记住,公司内网服务器也需要有可用路由返回到客户端。
push "route 192.168.1.0 255.255.255.0" //***用户连接过来后推送的路由信息
push "route 192.168.75.0 255.255.255.0"
#若客户端希望所有的流量都通过***传输,则可以使用该语句,其会自动改变客户端的网关为***服务器,推荐关闭。一旦设置,请小心服务端的DHCP设置问题。
;push"redirect-gateway def1 bypass-dhcp"
;push"dhcp-option DNS 208.67.222.222" //***用户连接过来后的DNS设置
;push"dhcp-option WINS 208.67.220.220" //***用户连接过来后的WINS设置
;duplicate-cn
keepalive 10 120 //设置服务端检测的间隔和超时时间
comp-lzo //启用LZO 压缩技术,客户端服务器端都必须设置
;max-clients 200 //***服务器最多允许连接的有用户数
;user nobody //出于安全考虑,初始化后UID 和GID 权限将降为 "nobody"
;group nobody
persist-key //通过keepalive检测超时后,重新启动***,不重新读取keys,保留第一次使用的keys
persist-tun //通过keepalive检测超时后,重新启动***,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup
Client-to-client //允许客户端之间进行互访
Duplicate-cn //允许一个用户多次访问
status open***-status.log //输出短日志,每分钟刷新一次以显示当前的客户端,重启系统后记录丢失
# 缺省日志会记录在系统日志中,但也可以设置到其它位置
;log         /var/log/open***/open***.log
;log-append  /var/log/open***/open***.log
# 日志记录的记录等级
# 0 -- 除非发生致命错误,否则保持安静。
# 1 -- 非常安静,但会显示一些非致命网络错误。
# 3 -- 中等输出,通常情况下的很好选择。
# 9 -- 非常详细,用于诊断错误。
verb 3 //设置日志记录的级别为3级,默认有4个级别。
mute 10
reneg-sec 1800 //设置最大超时时间为1800秒

8)配置LDAP配置文件ldap.conf

假设OU为Open***Usersou,用户组为:Open***Users,AD服务器为:adone.testad.local。LDAP配置的端口可以为两个:LDAP服务器端口:389或全局编录服务器端口:3268。如果您是AD域服务器设置如下所示:

代码语言:javascript
复制
<LDAP>
# LDAP server URL
URL ldap://adone.testad.local:389 //配置域服务器与端口号
# Bind DN (If your LDAP server doesn't support anonymous binds)
# BindDN uid=Manager,ou=People,dc=example,dc=com
BindDN "CN=administrator,CN=Users,DC=testad,DC=local" //配置域管理员用户地址
# Bind Password
# Password SecretPassword
Password www.lidongni.com //配置域管理员密码,这里采用明文,也可以采用加密码方式
# Network timeout (in seconds)
Timeout 15 //设置网络超时时间
# Enable Start TLS
TLSEnable no //设置是否启用TLS
# Follow LDAP Referrals (anonymously)
FollowReferrals no
# TLS CA Certificate File
#TLSCACertFile /usr/local/etc/ssl/ca.pem
# TLS CA Certificate Directory
#TLSCACertDir /etc/ssl/certs
# Client Certificate and key
# If TLS client authentication is required
#TLSCertFile /usr/local/etc/ssl/client-cert.pem
#TLSKeyFile /usr/local/etc/ssl/client-key.pem
# Cipher Suite
# The defaults are usually fine here
# TLSCipherSuite ALL:!ADH:@STRENGTH
</LDAP>
<Authorization>
# Base DN
BaseDN "OU=Open***Usersou,DC=testad,DC=local" //设置基础DN
# User Search Filter
SearchFilter "(&(sAMAccountName=%u)" //设置用户搜索
# Require Group Membership
RequireGroup false
# Add non-group members to a PF table (disabled)
#PFTable ips_***_users
<Group>
BaseDN "OU=Open***Usersou,dc=testad,dc=local" //设置组基础DN
SearchFilter "(|(cn=Open***USERS))" //查询用户组
MemberAttribute "member"
# Add group members to a PF table (disabled)
#PFTable ips_***_eng
</Group>
</Authorization>

9) 测试Open***运行是否正常

代码语言:javascript
复制
open*** ./server.conf

如果显示运行的最后内容为:Initialization Sequence Completed 则说明正常。

10) 客户端配置文件的配置client.conf
代码语言:javascript
复制
client
auth-user-pass //配置登录的时候提示输入用户名密码
Tls-client //使用TLS加密传输,本端为client
;dev tap
dev tun //设置驱动类型
;dev-node MyTap
proto tcp //设置所采用的协议类型
;proto udp
remote 10.10.10.80 11940 //设置连接的服务器IP地址与端口号
;remote my-server-2 1194
;remote-random
resolv-retry infinite //非正常断开后自动尝试重新连接
nobind
# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody
# Try to preserve some state across restarts.
persist-key
persist-tun
;http-proxy-retry# retry on connection failures
;http-proxy [proxy server] [proxy port#]
mute-replay-warnings
ca ca.crt //设置证书位置
cert client.crt
key client.key
ns-cert-type server
comp-lzo //配置LZO压缩
verb 3
mute 10

11) 客户端文件打包

代码语言:javascript
复制
Cd /etc/open***
Rm -rf powa-****
Cp -ra client powa-***
Mv powa-***/client.conf powa-***/powa-***.o***
Zip -r powa-***.zip powa-***

12) 防火墙配置

代码语言:javascript
复制
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT //允许ping
iptables -A FORWARD -s 192.168.75.0/24 -j ACCEPT //同意通过本地转发192.168.75.0
iptables -A FORWARD -j REJECT //同意转发所有包

13) 开启IPV4 的NAT功能

代码语言:javascript
复制
echo 1 > /proc/sys/net/ipv4/ip_forward //为了使CentOS重启后仍然开启路由转发功能我们需要再执行下列命令
sysctl -w net.ipv4.ip_forward=1  //也可以修改配置文件
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

14) 关闭Selinux

代码语言:javascript
复制
vi /etc/selinux/config
SELINUX=disabled

15)时间同步(重要)

为什么这里标识为重点了,如果您的时间与AD服务器的时间不能够进行同步一样的话,那么在验证的时候有可能出现这样那样的错误,所以这里重点说明一下。

代码语言:javascript
复制
ntpdate asia.pool.ntp.org

16)设置Open***开机自启动

chkconfig –add open***

提示:服务器端运行Open***前需要加载tun模块:modprobe -v tun

17) Windows GUI客户端的安装与配置

        确保客户端的安装版本为:open***-install-2.3.2-I003-i686.exe,前期测试Win8.1的时候发现低版本的死活连接不上去,连接就报错,后来安装了这个版本后连接正常。

        客户端安装完成后,在对应的目录新建一个Config文件夹,将客户端的证书与配置文件放于以下目录中。

clip_p_w_picpath004[14]
clip_p_w_picpath004[14]

测试连接:已经连接成功,如下图所示。

clip_p_w_picpath005[4]
clip_p_w_picpath005[4]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-03-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Open***简介
  • 二、原理
  • 三、加密
  • 四、身份验证
  • 五、功能与端口
  • 六、安全
  • 七、对比
  • 八、Open***实现LDAP认证方法
  • 九、本次实验网络拓扑
  • 十、测试需求
  • 十一、详细配置
    • 1、常规设置
      • 2、Open***服务器的安装与配置
        • 1)Open***服务器的安装
        • 2)设置Open*** Server与easy-rsa
        • 10) 客户端配置文件的配置client.conf
        • 17) Windows GUI客户端的安装与配置
    相关产品与服务
    多因子身份认证
    多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档