如何用Droplan自动防火墙DigitalOcean专用网络接口

该droplan实用程序可以通过查询API并添加iptables防火墙规则,只允许在同一个数据中心从其他Droplet的流量帮助上DigitalOceanDroplet安全的专用网络接口。

介绍

DigitalOcean的专用网络功能为您的Droplet提供一个网络接口,只有同一数据中心内的其他Droplet才能访问。 然而,它不限制来自您不能控制的Droplet的流量。 这可以让你有更大的攻击面 ,特别是如果你有服务监听接口。

droplan实用程序可以通过添加iptables防火墙规则,只允许在同一个数据中心从其他Droplet的流量得到帮助的Droplet安全的专用网络接口。 通过在每个Droplet上安装和运行该实用程序,您可以确保您的系统只接受来自彼此的本地流量。

本指南将覆盖安装droplan对个人Droplet,调度cron作业来定期运行它,并确保当Droplet重启或断电防火墙规则存在。

先决条件

本指南假设您有两个或多个LinuxDroplet在同一个地区,每一个非root用户配置的sudo权限管理任务。 具体来说,它提供了最近的Debian,Ubuntu和CentOS版本的说明。 在CentOS系统,将禁用firewalld ,所以你应该知道,它可能会覆盖任何现有的防火墙配置。

检索只读个人访问令牌

droplan实用为了问API为您Droplet的名单中, droplan命令需要访问与读取范围的个人访问令牌 您可以通过访问DigitalOcean控制面板,顶部菜单中点击API,并单击生成新令牌按钮检索令牌。 新令牌令牌名称字段输入一个描述性的名称,如“droplan只读”,并取消了写入(可选)箱:

生成新令牌

单击生成令牌 ,并将得到的令牌复制到本地机器:

个人访问令牌

注意 :请务必保持令牌的副本,或者你就必须产生一个新的。 它在第一次显示后无法从控制面板检索。

有关此过程的详细信息,以及API使用的基础知识,请参阅如何使用API DigitalOcean V2

安装Droplan

安装Debian和Ubuntu先决条件

如果您在Debian或者Debian的衍生分配(如Ubuntu),安装unzip用包apt-get

sudo apt-get install unzip iptables-persistent

我们需要iptables-persistent ,当我们执着配置防火墙规则在某一时刻。 安装程序可能会询问您是否要在安装时保存当前的防火墙规则。 如果你说是的话,它不应该有任何危害。

安装CentOS先决条件

如果您在使用CentOS 7,安装unzipiptables-services使用包yum

sudo yum install unzip iptables-services

我们需要iptables-services在某一时刻,当我们执着配置防火墙规则。

检索和提取归档

访问发布页面droplan GitHub的项目,并找到支持你的架构最新版本中的URL。 复制网址,登录到您的Droplet之一,并检索与该文件wgetcurl

wget https://github.com/tam7t/droplan/releases/download/v1.0.0/droplan_1.0.0_linux_amd64.zip

现在,使用unzip命令提取droplan从释放档案二进制文件:

unzip droplan_1.0.0_linux_amd64.zip

创建一个目录/optdroplan ,移动二进制有:

sudo mkdir /opt/droplan
sudo mv ./droplan /opt/droplan/

/opt目录是从比发行版的官方包库其它来源安装的软件标准位置。

创建Iptables规则

随着droplan到位二进制,你可以用它来创建规则。 下运行命令sudo ,设置DO_KEY环境变量您的令牌:

sudo DO_KEY=personal_access_token /opt/droplan/droplan

现在,检查你的iptables规则:

sudo iptables -L

假设你在同一区域有两个其他的Droplet,你应该看到如下:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
droplan-peers  all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain droplan-peers (1 references)
target     prot opt source               destination
ACCEPT     all  --  droplet_ip1       anywhere
ACCEPT     all  --  droplet_ip2        anywhere

要确认这些规则仅适用于eth1的 ,您可以添加-v选项更详细的输出,其中包括接口:

sudo iptables -L -v

持久化Iptables规则

现在,在同一地区的所有其他Droplet可以连接到当前系统,而来自您不控制的系统的流量被阻止。 如果系统重新启动,iptables规则将消失。 也有可能在将来的某个时候创建​​新的Droplet(或删除现有的Droplet)。 为了解决这些问题,我们将确保坚持规则在重新启动,并安排droplan以定期执行,并对防火墙进行必要的更改。

在Debian或Ubuntu上持久化规则

防火墙规则保持/etc/iptables/rules.v4 (和/etc/iptables/rules.v6 IPv6的规则)。 您可以使用生成此文件的新版本iptables-save命令:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

在CentOS 7上持久化规则

默认情况下,CentOS 7使用firewalld服务代替iptables。 既然我们已经安装了iptables-services以上套餐,我们可以使用systemctl停止此服务,并掩盖它,确保它不会重新启动:

sudo systemctl stop firewalld
sudo systemctl mask firewalld

现在启用iptables服务:

systemctl enable iptables

随着iptables服务到位,保存当前的防火墙规则:

sudo service iptables save

测试规则持久性

您可能希望重新启动系统,重新连接,并检查规则是否已保留。 首先,重新启动:

sudo reboot

现在,重新连接到您的Droplet(这将需要几秒钟),并检查规则:

sudo iptables -L

计划Cron作业以更新Iptables规则

作为最后一步,我们将确保droplan定期运行,以便它吸引你的Droplet收集的变化。

创建一个名为新脚本开始/opt/droplan/refresh.sh ,使用nano (或您选择的编辑器):

sudo nano /opt/droplan/refresh.sh

粘贴下面,取消注释为您分配通过删除导致相应的行#

/opt/droplan/refresh.sh
#!/usr/bin/env bash

/opt/droplan/droplan

# Uncomment for Centos:
# service iptables save

# Uncomment for Debian or Ubuntu:
# iptables-save > /etc/iptables/rules.v4

退出并保存文件,然后将其标记为可执行文件:

sudo chmod +x /opt/droplan/refresh.sh

接下来,创建一个新的文件/etc/cron.d/droplan

sudo nano /etc/cron.d/droplan

以下行添加到文件,以便运行脚本每5分钟:

crontab
*/5 * * * * root PATH=/sbin:/usr/bin:/bin DO_KEY=personal_access_token /opt/droplan/refresh.sh > /var/log/droplan.log 2>&1

这将运行refresh.sh脚本每5分钟一次,如表示*/5在第一个字段,并记录其最近的输出/var/log/droplan.log

退出并保存文件。 现在,您可以用watch命令,它会显示另一个命令每隔几秒钟,以确保输出脚本成功运行:

sudo watch cat /var/log/droplan.log

一旦脚本运行,你应该看到类似下面的输出:

Every 2.0s: cat droplan.log                      Fri Mar 25 01:14:45 2016

2016/03/25 01:14:02 Added 2 peers to droplan-peers
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]

在Debian衍生系统, systemctl iptables save将不会显示任何输出。

Ctrl-C退出watch

注意 :由于API是速率限制,您可能需要调整更新的频率,如果你有很多的Droplet。 你可以阅读更多有关cron或者API本身

结论和后续步骤

现在您已经在单个Droplet上配置了防火墙,您将需要在其余基础架构上重复此过程。 对于超过少数的Droplets,它可能是最简单的自动化这个过程。 如果您使用Hashicorp的Terraform用于配置系统,你可以找到在GitHub上Droplan工程实例的模板 对于像这样的任务自动化的广泛概述,请参阅配置管理导论

有关防火墙的更多详细信息,请参阅什么是防火墙?它是如何工作的?