为重要账户启用2FA,这几乎已经成为保护账户和数据安全的一种标准做法。无论登录常见应用或服务,或是访问企业内部资源,时不时都会需要进行2FA验证。那么当你在Akamai Connected Cloud云平台中部署了各类资源(云计算、云存储、SaaS、Docker……),需要进行管理时,该如何为访问过程启用2FA?
简单,本文就一起来试试吧。
首先定义“跳板机”是什么
跳板机就是一台或一组服务器,其唯一目的是为基础设施的不同部分提供一个单一入口。
典型的配置是一台加固的Unix(或类Unix)机器,配置有SSH和本地防火墙。管理员从个人计算机以SSH方式连接到跳板机,随后通过SSH转发来访问目标机器,即可连接到DMZ中的目标机器。
使用SSH端口转发或基于SSH的隧道连接到目标主机,可以使用不安全协议管理服务器,而无需创建特殊的防火墙规则或在内部网络上暴露流量。
用到的软件组件
- 用于服务器和用户管理的Cockpit Web界面
- Google Authenticator插件
- Yubikey(可选) – 本文未涉及
- Termius作为SSH客户端(任何可支持2FA的SSH客户端均可使用)
用到的Akamai Connected Cloud Compute组件
- 1个充当跳板机的Nanode
- 一些已部署的服务器或服务。本例中将以MySQL数据库为例。
- Linode Firewall
- VLAN(可选)
还需要准备什么?
- 装有Google Authenticator应用的手机
- SSH公钥和私钥
如何使用?
简而言之,这种方法实际上就是在为SSH通道启用2FA。使用这种方法的好处是:可以在几乎任何使用TCP协议通信的服务之间创建隧道。网站?可以!数据库服务器?没问题!SSH协议?支持!Redis?小意思!……这样就好理解了吧。
Cockpit又是什么?Cockpit是一个基于Web的服务器图形界面,适用于所有人,尤其适合:
- Linux新手(包括Windows管理员)
- 熟悉Linux并希望以简单的图形方式管理服务器的用户
- 主要使用其他工具但希望了解单个系统概况的专家管理员
如何设置运行?
最简单的方法是使用如下的StackScript。
#!/bin/bash
#<UDF name="HOSTNAME" label="The hostname for the new Linode.">
# HOSTNAME=
#<UDF name="MANAGEMENTUSER" label="Cockpit Management user." default="CockpitMGR">
# MANAGEMENTUSER=
#<UDF name="MANAGEMENTUSERPASSWORD" label="Cockpit management user password." default="ReplaceMeN0w!">
# MANAGEMENTUSERPASSWORD=
yum update -y
yum install cockpit nano wget cockpit-dashboard cockpit-packagekit bind-utils -y
systemctl enable --now cockpit.socket
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh epel-release-latest-7.noarch.rpm
yum install google-authenticator -y
#Create user
pass=$(echo $MANAGEMENTUSERPASSWORD | openssl passwd -crypt -stdin)
useradd -m -p $pass $MANAGEMENTUSER
usermod -aG wheel $MANAGEMENTUSER
#Configure hostname SSH & PAM modules
hostnamectl set-hostname $HOSTNAME
sed -i '/preserve_hostname: false/c\preserve_hostname: true' /etc/cloud/cloud.cfg
sed -i '2s/^/auth required pam_google_authenticator.so\n/' /etc/pam.d/sshd
sed -i '2s/^/auth [success=done default=ignore] pam_access.so accessfile=/etc/security/access-local.conf\n/' /etc/pam.d/sshd
sed -i '/auth substack password-auth/c\#auth substack password-auth' /etc/pam.d/sshd
echo 'auth required pam_google_authenticator.so nullok' >> /etc/pam.d/cockpit
echo 'idmsync ALL=(ALL) NOPASSWD: ALL' | sudo EDITOR='tee -a' visudo
echo 'AuthenticationMethods publickey,keyboard-interactive' >> /etc/ssh/sshd_config
sed -i '/ChallengeResponseAuthentication no/c\ChallengeResponseAuthentication yes' /etc/ssh/sshd_config
sed -i '/SELINUX=enforcing/c\SELINUX=disabled' /etc/selinux/config
service sshd restart
#Branding stuff
#Other stuff
systemctl start NetworkManager.service
systemctl start cockpit
systemctl enable NetworkManager.service
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload
shutdown -r now
系统会提示输入Cockpit管理用户名、密码和服务器根密码。
使用下面的脚本在Cloud Manager中新建一个StackScript,选择Centos 7作为目标镜像,为其命名,保存并按下“Deploy a new Linode”按钮。
稍等片刻,访问这个URL:https://IPOF_YOUR_LINODE:9090,我们将看到一个Cockpit登录界面,类似下图所示。
这样就好了!
需要再次提醒大家注意,这种方式不仅操作简单,而且适用性非常广泛,无论云计算、云存储、数据库、Docker……你在Akamai Connected Cloud中部署的任何资源,只要使用TCP协议进行通信,就支持用这种方式启用2FA!
在下篇文章中,我们将介绍如何创建用户以及进行2FA身份验证的过程。敬请期待。