1

问题: 我有一个运行 FreeBSD 的 AWS EC2 实例。在那里,我正在运行一个 NodeJS TLS/TCP 服务器。我想创建一组规则(在我的 NodeJS 应用程序中),以便能够根据一些逻辑条件以编程方式单独阻止 IP 地址。

我想运行一个外部(不在同一台机器/实例上)防火墙或负载平衡器,我可以通过 NodeJS 以编程方式控制它,这样当给定某些条件时,我可以阻止特定的远程地址(IP)在它到达 NodeJS 实例之前。

我尝试过的事情: 我最初将nginx作为一种选择,在第二个实例上运行它,并将我的 NodeJS 服务器放在它后面,但是在浏览了NGINX Cookbook Advanced Recipes for High Performance Load Balancing之后,我了解到只有 NGINX Plus(付费版)允许远程/API 控制和定制。虽然我认为支付 3500 美元/许可证并不算多(考虑到 NGINX Plus 的所有功能),但我现在根本买不起;此外,我将使用的唯一功能(此时)将是远程 API 控制IP 地址阻止

我的第二个想法是通过将 AWS 的 SDK 集成到我的项目中来使用 AWS/ELB(弹性负载均衡器)。不幸的是,这听起来是可行的,在阅读了一些论坛主题和他们的部分文档之后(除非我弄错了),我需要的这两个功能似乎在 AWS/ELB 上不可用。AWS 似乎提供了一种完全不同的服务,称为 WAF,老实说,我不太了解它(无论是作为服务还是从功能的角度来看)。

我也(简要地)研究了 CloudFlare,正如在 Sackoverflow 上的一篇文章中所推荐的那样,尽管我无法确定他们的防火墙是否允许这种级别的(远程)控制。

问题: 我有哪些选择?你们会建议我做什么?

4

1 回答 1

1

我认为 Nginx 提供了这样的功能,请参考链接 如果你想用 Node TCP 阻止一个 IP,你可以编辑一个 nginx 配置文件并拒绝 IP 地址。

坦率地说,如果我是你,我会使用 AWS WAF,但如果你不想使用它,你可以简单地使用 Node JS

在 Node JS 中,您应该有一个全局数组变量,您将在其中存储所有被阻止的 IP 地址,并且在连接时,您将检查连接的主机 IP 是否在被阻止的 IP 变量中。但是,当机器或应用程序重新启动时会出现问题,您将丢失有关被阻止 IP-s 的所有信息。因此,作为解决方案,您可以设置Redis(它是键值数据库,但也有其他数据类型)数据库并在那里存储被阻止的 IP。由于 Redis DB 在 RAM 中,因此与 DB 的所有交互都将立即进行,并且只要重新启动机器或节点,Redis 就会在硬盘驱动器上进行备份并从中同步并继续在 RAM 中与旧数据库一起工作。

于 2019-01-24T17:51:09.867 回答