介绍
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,安装unzip
和iptables-services
使用包yum
:
sudo yum install unzip iptables-services
我们需要iptables-services
在某一时刻,当我们执着配置防火墙规则。
检索和提取归档
访问发布页面上droplan
GitHub的项目,并找到支持你的架构最新版本中的URL。 复制网址,登录到您的Droplet之一,并检索与该文件wget
或curl
:
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
创建一个目录/opt
为droplan
,移动二进制有:
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,你应该看到如下:
OutputChain 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
粘贴下面,取消注释为您分配通过删除导致相应的行#
:
#!/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分钟:
*/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
一旦脚本运行,你应该看到类似下面的输出:
Sample CentOS OutputEvery 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工程实例的模板 。 对于像这样的任务自动化的广泛概述,请参阅配置管理导论 。
有关防火墙的更多详细信息,请参阅什么是防火墙?它是如何工作的?