介绍
防火墙在您的服务器和网络上的其他计算机之间设置障碍,以防止外部攻击。 防火墙可以是基于主机的,它们使用诸如IPTables或UFW之类的服务在每个服务器上进行配置。 其他是基于网络的,旨在在流量到达个别机器之前停止流量。 DigitalOcean Cloud Firewalls可在所有地区免费提供,为您的DigitalOcean Droplet提供基于网络的状态防火墙服务。 它们阻止规则未明确允许的所有流量。 它们的设计是易于配置,快速应用和自动化友好。
在本教程中,我们将使用DigitalOcean控制面板创建一个基本的Cloud Firewall,以阻止所有传入连接,除了端口22用于SSH,80代表HTTP。 然后,我们将扩展示例基础结构以包括负载平衡器,并演示如何限制源始发源的入站流量。 有关云防火墙功能的完整概述,请参阅“ DigitalOcean云防火墙简介”指南。
第1步 - 创建Droplet
首先,我们将创建两个Droplet,并在“用户数据”字段中使用云配置脚本来安装Nginx,并为每一个独特的主页。
在DigitalOcean控制台中,单击“创建Droplet”。 我们正在创建我们的以下属性:
- 图片 :Ubuntu 16.04(默认)
- 大小 :512 MB
- 地区 : 旧金山1
- 附加选项 :[x]用户数据。
#cloud-config
packages:
- nginx
runcmd:
- export HOSTNAME=$(cat /etc/hostname)
- echo "<h1>$HOSTNAME</h1>" > /var/www/html/index.html
- Droplet :2
- 主机名: web-01和web-02
注意:您可以 。 您的Create Droplet屏幕将在SSH密钥区域中看起来不同,特别是如果您以前从未上传过密钥。 您可以在“ 如何使用DigitalOcean Drople ” 如何使用SSH密钥指南“中了解有关使用SSH密钥避免邮寄密码的信息,并不影响本教程的结果。
完成表单后,我们点击“创建”。 然后,当Droplet准备就绪时,我们将访问网页浏览器中的每一个,以验证Nginx是否正在运行。 请注意,控制面板中列出的Droplet IP地址和已安装和配置的Nginx之间有一点点延迟。
每个服务器应显示其主机名:
现在我们正在为我们的每一滴Droplet提供网页,我们将把注意力转向防火墙。
第2步 - 创建防火墙
Droplet在创建时完全打开,允许所有入站和出站连接。 Cloud Firewall可以反过来,拒绝规则未明确允许的所有入站和出站连接
注意:要创建云防火墙,必须至少定义一个规则。
为了使服务器可访问并按预期工作,当您使用控制面板创建云防火墙时,它建议四个规则:
- 允许端口22上的入站SSH连接
- 允许所有出站连接
我们会花一点时间来探索这些默认值,并验证它们是否像预期的那样阻止Nginx。 然后,我们将添加一条规则,允许用户使用Web浏览器访问服务器。
使用默认规则
从DigitalOcean控制面板,我们将导航到网络>防火墙,然后单击“创建防火墙”:
我们将在“名称”字段中输入“First-Firewall”,在“应用于Droplet”中添加web-01
和web-02
,然后单击“创建防火墙”:
这将使我们回到防火墙概述页面,其中提供了摘要信息,包括与防火墙相关联的几滴,它有多少规则以及创建时间。
如果我们点击它的名字First-Firewall,然后点击“Droplet”,我们可以看到哪些特定的Droplet受到防火墙的影响。 从这里,我们也可以添加和删除它们:
现在我们配置了防火墙并应用了其规则,我们将在另一个浏览器窗口中访问服务器。 浏览器将尝试加载页面,但这次我们的防火墙将阻止访问,最终,而不是显示主机名的网页,我们将收到如下所示的消息。 请注意,消息的实际内容将因浏览器和操作系统而异:
这将验证防火墙阻止传入的HTTP连接。
我们还将通过打开终端并与SSH连接来验证我们可以连接到服务器。 确保替换您的服务器的用户名和IP地址。
ssh root@203.0.113.1
我们应该连接没有问题,因为默认入站规则明确允许。
允许传入HTTP连接
要允许传入的HTTP连接,我们将返回到控制面板并导航到第一个防火墙规则页面(网络>防火墙>第一防火墙)。 在“入站规则”部分中,我们将打开“新规则”下拉菜单,选择“HTTP”,然后单击“保存”。
这将自动配置HTTP规则,允许端口80(默认HTTP端口)上的传入TCP连接。
当我们在网络浏览器中访问我们的服务器时,我们将再次看到默认的Nginx页面:
在本节中,我们创建并应用了一个云防火墙,它允许从任何地方传入TCP连接到端口22,SSH和80端口用于HTTP。 我们没有更改“出站规则”,允许从所有端口上的所有目的地的Droplet发起的所有连接。
在下一节中,我们将在我们的两个Droplet中添加一个DigitalOcean负载平衡器,以说明如何通过将入站流量限制到特定来源来进一步保护我们的基础架构。
第3步 - 添加DigitalOcean负载平衡器
负载平衡器有助于跨多个服务器传播流量,确保如果一个服务器关闭,其他服务器仍然可用。 我们将创建一个DigitalOcean负载平衡器,并将其放在我们的两个Web服务器的前面。 然后,我们将通过编辑我们的防火墙的HTTP规则来锁定对Web服务器的访问,以便它仅允许来自负载平衡器的传入连接。
注意:负载平衡器需要将所有Droplet放置在单个数据中心,并通过名称或添加单个标签单独添加滴液。 负载平衡器将忽略在其他数据中心使用该标签的Droplet。
创建负载均衡器
要创建负载平衡器,我们将导航到网络,然后浏览负载平衡器,我们将在其中单击“创建负载平衡器”。 在该屏幕上,我们将其命名为“First-Firewall-LB”,并添加我们的两个Droplet。 这将自动选择Droplet所在的数据中心。 我们将接受默认转发规则,将转发端口80上的HTTP连接定向到后端,通过端口80拨号,并按原样保留高级设置,然后单击按钮创建它。
一旦创建了负载平衡器,我们可以在Web浏览器中访问其IP地址,并查看第一个服务器的内容。
当我们重新加载页面时,我们将看到第二个服务器的内容:
然而,访问者可以通过直接访问其地址处的服务器来规避负载平衡。 这不仅意味着我们可能失去分发流量的优势,也意味着端口80可以对任何TCP连接开放,为入侵者提供可能的入口点。
为了防止这种情况,我们将编辑我们的防火墙规则,以便只允许来自负载平衡器的连接,确保负载平衡器在我们的服务器和Internet之间。
注意: DigitalOcean负载平衡器自动防火墙。 仅允许我们配置的协议和端口的进入连接,并且只允许出站连接到我们配置的端口上添加的Droplets。
限制到负载平衡器的传入连接
我们将返回到我们的第一防火墙(网络>防火墙>第一防火墙),将到我们的Web服务器的传入连接限制为负载平衡器。 在80规则的“更多”链接下,我们将选择“编辑规则”。
在“来源”字段中,我们将删除现有值并添加第一防火墙-LB,以使负载平衡器成为唯一列出的:
然后,我们将点击保存并测试我们的工作。 我们仍然可以通过访问负载平衡器IP地址来访问这两个服务器,然后重新加载页面:
然而,现在当我们通过其地址访问每个Web服务器时,连接应该超时:
负载平衡器通过分配负载使我们的基础设施更加高效。 它还可以让我们扩大或缩小资源。 在下一步和最后一步中,我们将演示如何使用标签来缩放比例。
第4步 - 使用标签
到目前为止,我们已经在防火墙和负载平衡器中添加了独立的Droplet。 在本节中,我们将探讨如何使用标签来管理Droplets,Load Balancer和Firewall之间的关系。 因为我们可以在创建时标记Droplet,所以我们可以在Droplet的存在开始时使用我们的防火墙和负载平衡器。
标记Droplet
首先,我们将向我们的两个Web服务器添加标签。 为此,我们将导航到主要的“Droplet”页面。 对于web-01
我们将打开“更多”菜单,然后选择“添加标签”。
然后,我们将在打开的“编辑标签”字段中键入First-Firewall。 由于它是一个新标签,所以我们需要输入所有的东西,不会收到任何建议:
当我们点击“保存标签”时,标签将被创建并应用。 我们将为web-02
重复此步骤。 现在标签存在,当我们键入其名称的一部分时,它将显示在还显示当前标记的Droplet的数量的菜单上:
我们从列表中选择“First-Firewall”,然后点击“保存标签”。
现在我们的两滴水标签了,我们将调整负载均衡器和防火墙以使用新的标签,而不是单个的Droplet名称。
编辑负载均衡器
我们将返回网络>负载平衡器,然后单击“第一防火墙-LB”。 防火墙要求在切换到标签之前删除任何相关联的Droplet,因此我们将立即删除“Droplet”。 这将导致删除Droplet和添加标签之间的服务略有中断,所以我们通常要创建标签,将其添加到负载平衡器,当我们创建它,然后添加Droplet。
当两个Droplet都被删除时,我们将点击“添加滴液”并添加第一个防火墙标签进行滴液选择:
现在,任何标有“First-Firewall”的Droplet都将自动位于Load Balancer之后。
向防火墙添加标签
当负载均衡器要求所有的Droplet位于单个数据中心并添加单个标签时,防火墙规则可应用于两个数据中心和区域之间的Droplet。 这允许我们先添加标签,然后删除单个的“Droplet”,避免“防火墙”规则中断。
注意:完成本教程后,您可以在指南中了解有关策略性使用标签的更多信息, 如何组织DigitalOcean Cloud Firewall
我们将返回到我们的第一个防火墙(网络>防火墙>第一防火墙),然后选择“滴滴”选项卡,然后单击“添加滴滴”。
我们将开始输入标签名称,然后从列表中选择它:
当我们点击“添加滴液”时,我们将返回到概览屏幕,可以看到两滴Droplet出现,一次是因为我们按名称添加了它们,因为它们是First-Firewall标签的成员。
现在我们添加了标签,我们将通过单击每个“更多”链接,然后单击“删除”来删除基于名称的Droplet条目。 最后一个屏幕应该显示我们添加的标签和带有该标签的滴液:
现在,任何标有“First-Firewall”的Droplet将自动无法访问,除了:
- 来自负载平衡器的HTTP请求。
- SSH连接从任何地方。
当我们在创建时标记一个Droplet,我们将在最后一步确认这一点。
第5步 - 添加新的Droplet
使用标签可以让我们在首次创建它们时自动将新的Droplet添加到负载平衡器和防火墙。 我们将通过在与负载平衡器相同的数据中心中创建一个新的Droplet,包括安装Web服务器的“用户数据”和添加标签来演示这一点:
- 图片 :Ubuntu 16.04(默认)
- 地区 : 旧金山1
- 附加选项 :[x]用户数据。
#cloud-config
packages:
- nginx
runcmd:
- export HOSTNAME=$(cat /etc/hostname)
- echo "<h1>$HOSTNAME</h1>" > /var/www/html/index.html
- 主机名 : web-03
- 标签 : 第一防火墙
要添加标签,请单击主机名下面的链接:
这将打开一个文本字段,我们可以选择我们现有的标签并应用它:
最后,我们点击“创建”。
创建Droplet后,我们将验证端口80上的直接TCP连接是否已被阻止访问其IP地址的服务器。
注意:当Droplet创建完成后,如果标签没有出现在“标签”列中,请在浏览器中重新加载该页面。
过了一会儿,页面应该超时:
几分钟后,新的Droplet应作为负载均衡池的一部分。 要验证这一点,我们将访问负载平衡器IP地址并重新加载页面。 如果我们重新加载页面两次,我们应该看到它的独特内容。
要从负载平衡器和防火墙中删除资源,我们将取消标记Droplet本身,而不是去负载平衡器,然后再访问防火墙。
结论
在本教程中,我们演示了如何使用DigitalOcean控制面板将各个步骤添加到防火墙,如何将防火墙规则限制为负载平衡器,以及如何使用标签,以便将Droplet添加到防火墙和负载平衡器创建。
要了解有关使用Cloud Firewalls组织和管理基础架构的更多信息,请参阅以下其他资源:
- DigitalOcean云防火墙简介
- 如何组织DigitalOcean云防火墙 。 为了演示的目的,我们为负载平衡器和防火墙使用了一个标签。 对于这两种服务使用单个标签可能适用于某些用例,但不适用于其他用途。 了解如何策略性地组织您的云端防火墙。
- 如何解决DigitalOcean防火墙问题
- 如何以编程方式管理云端防火墙有关通过控制面板管理防火墙的方法,请参阅: