堡垒主机
企业会使用私有网络来存储敏感数据。随着这些网络的扩大,管理安全且受控的访问变得至关重要。您不希望随便有人能访问您的数据,对吧?因此,适当的访问控制变得尤为重要,确保只有授权用户才能访问。一种堡垒主机是用于保障资源访问安全的一个最有效的工具。
什么是堡垒服务器?堡垒服务器是一台专用服务器,允许授权用户从如互联网这样的外部网络访问私有网络。其主要目的是为了提供一种安全的方式,让授权用户可以通过远程连接来访问您的网络,尤其是对于远程连接。
你知道堡垒机是怎么工作的吗?堡垒主机就像是网络的安全守护者。当有人试图远程访问网络内部时,堡垒主机就会要求他们验证身份。它不决定谁能进来——它只是执行规则。一旦验证通过,用户就会受到监控以确保一切安全。
为什么使用堡垒主机?使用堡垒主机的主要目的是提高安全性。
设置堡垒主机增加了对访问敏感数据的控制和监控。只有授权用户才能访问。
堡垒主机(bastion主机)在你需要安全的远程访问时是一个很好的选择。
当你需要合作伙伴和供应商访问内部系统,或者你的团队远程工作时。当你处理敏感数据时,任何未经授权的访问都可能导致严重的安全问题。在这种情况下,它也非常适合。
- 使用IP白名单限制访问: 只允许特定的、受信任的IP地址访问堡垒主机。
- 更改默认的SSH端口: 默认情况下,将SSH端口(22)更改为非标准端口可以帮助防止自动化攻击并减少潜在攻击者对SSH服务的可见性。
- 使用密钥的SSH身份验证: 强制要求使用密钥的SSH身份验证来访问堡垒主机。启用SSH代理转发,而不是将密钥存储在堡垒主机上。
- 禁用密码身份验证: 关闭密码身份验证以增强安全性,确保仅允许密钥访问。
好处:
- 增强的安全: 它缩小了攻击面,并提供了集中的访问权限控制。
- 监控: 它让监控谁在访问您的网络以及他们在做什么变得更容易。
不足之处:
- 单一故障点: 由于堡垒主机是唯一的入口点,任何该主机上的问题都可能导致您完全无法访问网络。
- 访问潜在瓶颈: 如果很多用户同时进行连接,堡垒主机可能会成为瓶颈,减慢所有人的访问速度。
zh: 前提
- 一个在公共子网中的服务器(例如堡垒服务器)
- 一个在私有子网中的服务器(例如数据库服务器)
步骤1:生成SSH密钥(本地电脑)
在你的本地计算机(例如 Macbook)上,使用以下命令进行 SSH 密钥对的生成:
ssh-keygen
在终端中执行以下命令以生成RSA密钥:
ssh-keygen -t rsa -b 4096 -f /Users/$USER/.ssh/id_rsa
将 $USER
替换为你的用户名。
这将生成一个私有
密钥和一个公有
密钥。你会看到类似这样的内容。
-rw------- 1 kawin.p kawin.p 2622 10月11日 04:00 时 id_rsa (-rw------- 表示文件权限)
-rw-r--r-- 1 kawin.p kawin.p 580 10月11日 04:00 时 id_rsa.pub
注意: 复制这个 id_rsa.pub
公钥,后面会用到它。
第二步:在跳板服务器上生成SSH密钥对
连接到堡垒服务器之后,通过运行以下命令生成SSH密钥:
生成用于bastion主机的RSA密钥对
ssh-keygen -t rsa -b 4096 -f /home/$USER/.ssh/bastion # (将替换为当前用户的用户名)
这会生成一个私有
和公有
密钥,输出应类似于以下内容,
-rw------- 1 ubuntu ubuntu 3414 10月11日早上4:01 bastion (堡垒主机文件)
-rw-r--r-- 1 ubuntu ubuntu 769 10月11日早上4:01 bastion.pub (堡垒主机公钥文件)
注:权限 -rw-------
表示只有文件所有者可以读写,-rw-r--r--
表示文件所有者可以读写,其他用户只能读取。.pub
扩展名通常表示公钥文件。
注意: 复制 bastion 服务器上的 bastion 私钥,你以后会需要用到。
步骤3:将您的本地公钥添加到bastion的授权密钥列表中。
在 堡垒服务器(Bastion server) 上,将如步骤 1 所示在本地机器上生成的公钥加入到 ~/.ssh
目录下的 authorized_keys
文件中。
如果找不到文件,你可以创建它,然后输入本地机器的公钥。
# the local machine (Macbook)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDilKr6/sN+bdjgTBSM0kqJURj9hj03Mj...
# 注意:ssh-rsa 是用于安全登录的公钥。
把堡垒服务器的公钥加到数据库服务器里,这是第4步。
接下来,在 数据库服务器 上,将步骤 2 中生成的堡垒服务器公钥添加到 ~/.ssh
目录下的 authorized_keys
文件中。
# 堡垒
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDV/XMFj9GoAVgsOOAC7LBoI9OHikZ4S...
在本地机器上,按照如下方式将私钥添加到SSH代理程序中:
ssh-add /Users/$USER/.ssh/id_rsa
第六步:测试连接到数据库服务器(通过Bastion)
ssh -A -i /Users/$USER/.ssh/bastion -o ProxyCommand="ssh -A -W %h:%p <BASTION-SERVER-USER>@<BASTION-SERVER-PUBLIC-IP>" <DATABASE-SERVER-USER>@<DATABASE-SERVER-PRIVATE-IP>
第七步:配置SSH以便更方便地访问
对于更复杂的配置,最好是在 ~/.ssh/config
文件中设置 SSH 选项。
以下是一个配置的例子:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
ServerAliveCountMax 5
Host bastion-server
User <BASTION-SERVER-USER>
ForwardAgent yes
Hostname <BASTION-SERVER-PUBLIC-IP>
IdentityFile /Users/$USER/.ssh/id_rsa
StrictHostKeyChecking no
Host database-server
User <BASTION-SERVER-USER>
ForwardAgent yes
Hostname <BASTION-SERVER-PRIVATE-IP>
IdentityFile /Users/$USER/.ssh/bastion
ProxyCommand ssh -q -W %h:%p bastion-server
StrictHostKeyChecking no
第七步:连接数据库服务器
设置好 SSH 配置后,就可以用更简单的命令来连接到 数据库服务器。
运行ssh数据库服务器
或者更自然的表达为:
通过SSH连接到数据库服务器
这将会自动通过跳板服务器将SSH代理转发到数据库服务器,而无需手动传递私钥。
步骤8:通过堡垒主机建立SSH隧道
你可以通过堡垒机创建一个SSH隧道,安全地访问私网上的服务(比如,PostgreSQL)。
运行以下命令:
执行以下命令:
ssh -N -L <LOCAL-PORT>:<DATABASE-SERVER-PRIVATE-IP>:<DATABASE-SERVER-PORT> bastion
其中,<LOCAL-PORT>
是本地端口,<DATABASE-SERVER-PRIVATE-IP>
是数据库服务器的私有IP地址,<DATABASE-SERVER-PORT>
是数据库服务器的端口号。bastion (堡垒主机)
这会从你的本地机器(5432端口)建立一条隧道连接到私有网络中的数据库服务器(5432端口)。
现在,打开第二个终端窗口或第二个命令行窗口来测试连接情况。你可以试试这个命令来连接到你的数据库试试。
export PGPASSWORD='<DATABASE-PASSWORD>'; psql -h localhost -p 5432 -U <DATABASE-USER> -d <DATABASE-NAME>
# 这是一个使用psql连接本地数据库的命令
# DATABASE-PASSWORD: 数据库密码
# DATABASE-USER: 数据库用户名
# DATABASE-NAME: 数据库名称
这个命令利用你设置的隧道连接到私网上的数据库,就像它直接运行在你的计算机上一样。
结论部分堡垒主机是一种增强您私有网络安全的强大手段。它充当远程访问的安全检查点,确保只有授权用户能进入,有效阻止未经授权的访问,同时防范潜在的网络安全威胁。
如果你觉得这篇文章不错,请随意留言 🙏,鼓掌 👏,评论 👍,或者关注我 💪 获取更多每周的见解和最佳实践!
共同学习,写下你的评论
评论加载中...
作者其他优质文章