使用 Duo Secrity 二部验证保护你的 SSH 安全

Duo 可以轻松地使用在 Unix 系统中,以保护你的 SSH 或者本地连接。它已经在 Linux 系统 ( RedHat, Fedora, CentOS, Debian, Ubuntu, Gentoo, Amazon Linux)、BSD 系统 (FreeBSD, NetBSD, OpenBSD, MacOS X ) 、Solaris、HP-UX 以及 AIX 系统中经过测试。

Duo Unix - Two-Factor Authentication for SSH

工作原理

  1. SSH 连接初始化
  2. 使用密码、密钥等进行初级验证
  3. Duo Unix 通过 TCP 443 端口和 Duo Security 取得连接
  4. 通过 Duo Security 进行二部验证
  5. Duo Unix 收到验证响应
  6. SSH 会话登入

准备工作

首先,你需要一个 Duo Security 的帐号。https://signup.duosecurity.com/

注册后登入后台,部分的界面可以参照我的上一篇文章:Duo Security - 一款好用的双因素身份验证产品

选择左侧的 Applications 标签,然后选择 Protect an Application

然后,定位到 UNIX Application ,点击 Protect this Application

然后,记好我们的 Integration KeySecret Key 以及 API hostname

配置

配置 login_duo

为了运行 login_suo ,我们必须先安装我们的运行环境。OpenSSLlibpamzlib都是我们的运行所需要的。

下面仅仅列出常见的系统

Debian, Ubuntu

apt-get install libssl-dev libpam-dev

Red Hat, Fedora, CentOS, Amazon Linux

yum install openssl-devel pam-devel

当上面的依赖安装完成后,我们就可以进行 duo_unix 的编译安装了。checksum

$ wget https://dl.duosecurity.com/duo_unix-latest.tar.gz
$ tar zxf duo_unix-latest.tar.gz
$ cd duo_unix-1.9.15
$ ./configure --prefix=/usr && make && sudo make install

如果你不想自己去编译安装的话,也可以添加官方的源然后从源进行安装。

Red Hat Enterprise Linux 经6.4 32/64-bit and 7.0 64-bit 测试

保存下面的内容为/etc/yum.repos.d/duosecurity.repo

[duosecurity]
name=Duo Security Repository
baseurl=http://pkg.duosecurity.com/RedHat/$releasever/$basearch
enabled=1
gpgcheck=1

然后运行以下的命令安装 duo_unix

# rpm --import https://www.duosecurity.com/RPM-GPG-KEY-DUO
# yum install duo_unix

CentOS 经5.9 32/64-bit and 6.4 32/64-bit 测试

保存下面的内容为/etc/yum.repos.d/duosecurity.repo

[duosecurity]
name=Duo Security Repository
baseurl=http://pkg.duosecurity.com/CentOS/$releasever/$basearch
enabled=1
gpgcheck=1

然后运行以下的命令安装 duo_unix

# rpm --import https://www.duosecurity.com/RPM-GPG-KEY-DUO
# yum install duo_unix

Debian 经7.1 32/64-bit 测试

保存下面的内容为/etc/apt/sources.list.d/duosecurity.list

deb http://pkg.duosecurity.com/Debian wheezy main

然后运行以下的命令安装 duo_unix

# curl -s https://www.duosecurity.com/APT-GPG-KEY-DUO | sudo apt-key add -
# apt-get update && apt-get install duo-unix

Ubuntu 经12.04.3 32/64-bit and 14.04 32/64-bit 测试

保存下面的内容为/etc/apt/sources.list.d/duosecurity.list

deb http://pkg.duosecurity.com/Ubuntu precise main

或者

deb http://pkg.duosecurity.com/Ubuntu trusty main

然后运行以下的命令安装 duo_unix

# curl -s https://www.duosecurity.com/APT-GPG-KEY-DUO | sudo apt-key add -
# apt-get update && apt-get install duo-unix

duo_unix 安装完成后,我们需要修改 login_duo.conf 文件,一般来说,这个文件会在 /etc/duo 或者 /etc/security 。把我们刚刚拿到的 integration key, secret key, API hostname 添加进去

[duo]
; Duo integration key
ikey = INTEGRATION_KEY
; Duo secret key
skey = SECRET_KEY
; Duo API hostname
host = API_HOSTNAME

测试 login_duo

手动运行下面的命令即可手动测试 login_duo

$ /usr/sbin/login_duo

在另外一些操作系统中,也有可能是需要运行下面的命令

$ /usr/local/sbin/login_duo

如果设置正确的话,会出现一个地址来让你绑定你的帐号,这里由于我已经绑定过了所以没有截图,只能用官方的截图。

访问上面这个让你去 enroll 的地址,验证你的手机,进行绑定,然后就完成了操作了。

运行下面的命令,进行测试的验证,如果你看到 SUCCESS! 字样的话,说明你的绑定已经完成了。

$ /usr/sbin/login_duo echo 'SUCCESS!'

启用 login_duo

通过上面的操作,我们已经绑定了 duo_unix 的绑定以及测试工作了,下面就可以正式的进行启用了。

修改 /etc/ssh/sshd_config 文件,加入下面这一行

ForceCommand /usr/sbin/login_duo

Duo 强烈建议你禁止 SSH 代理,加入以下的行即可实现。

PermitTunnel no
AllowTcpForwarding no

你也可以限制进行二部验证的用户,用过 UID 等等的方式。

group = wheel

最后,重启 SSH 服务即可完成!

完成

当你完成上面操作的时候,断开当前的 SSH 连接,然后重新连接,具体效果应该和我的差不多了。