【问题标题】:Banning clients from a node server从节点服务器禁止客户端
【发布时间】:2015-12-09 03:05:37
【问题描述】:

我正在尝试在我的服务器中加入 IP 禁令功能。 因为我没有找到合适的模块,所以我尝试自己编写。

现在我正在考虑实现以下内容的最佳方式:

能够在一定时间内禁止某个 IP。

现在(我刚刚开始),我有:

一个带有

的XML
<root>
    <entry IP="123.123.123.123">
        <time>13.09.2015</time>
    </entry>
</root>

以及相应的检查功能

module.exports.checkBan = function(ip) {

fs.readFile(__dirname + '/ban.xml', function(err, data) {
    var banned = false;
    if (err) {
        console.log(err);
    } else {
        parser.parseString(data, function(err, result) {
            var length = result['root']['entry'].length;

            for (i=0; i<length; i++) {
                if (ip == result['root']['entry'][i]['$']['IP']) {
                    return true;
                }
            }
            return false;
        });
    }
});
};

但是,问题出现了:

checkBan 函数没有布尔值,因为它是异步的。 这意味着,每个(!)请求都必须等到函数返回,然后才能处理(或者不处理,如果客户端被禁止)。 这会产生很多不必要的等待开销......我想? 我假设,如果我履行承诺,即使他们被禁止,请求也会得到满足。 顺便说一句:这些回报不起作用,正如我所注意到的:(

这是如何在“大”网站中完成的? 它是如何正确完成的?

我想尽量减少对 ip-​​blacklist 的访问时间,并尽量减少每个请求的一般访问开销,同时仍然能够检查 ip 是否被禁止。 我怎样才能做到这一点?

谢谢

【问题讨论】:

  • 较大的网站会在网络服务器上使用fail2ban 之类的东西,并在请求到达您的应用程序之前对其进行过滤。我知道 nginx 你可以定义一个你想要阻止的 IP 地址文件并将其添加到配置中。您的节点应用程序使用什么 Web 框架(如果有)?
  • 我只使用快递。我可以使用例如fail2ban 与节点服务器?我想这需要进一步阅读……最简单的方法是什么?谢谢:)
  • 可能有办法,但我没有这样做的经验。如果您担心这是一个生产环境,您可能不会只是单独运行节点。 if 应该在某种网络服务器(如 apache 或 nginx)的后面
  • 好吧,我打算只发布节点服务器。但你是对的,这实际上是我的第一个节点项目,所以我对整个系统相当陌生。所以你说我会运行一个 apache 来处理请求并将它们转发到我的节点?你有一些提示我可以用谷歌搜索以更好地理解整个过程吗?
  • 我的经验是使用 nginx。谷歌 nginx 节点反向代理。不过同样适用于 Apache。它称为反向代理

标签: xml node.js filesystems ip blacklist


【解决方案1】:

这是真正应该在机器级别或 Web 服务器上实现的东西。我认为最简单的步骤是首先在您的服务器上使用 iptables 来阻止特定 IP 访问您的机器。大型网站将使用fail2ban 或类似的方式来阻止 IP 范围或监控恶意流量。

nginx 和 apache 都内置了模块,允许您使用 Web 服务器中的配置来允许和拒绝某些 IP 地址,以阻止流量。

如果你真的很想自己实现这个,我就不会经常从文件中读取。如果足够小,我会将 IP 加载到内存中,或者如果它对于内存或什至数据库来说太大,我会将其加载到内存中。根据您的节点 Web 框架,如果您使用的是一个,如果它支持中间件,那么我将实施逻辑来检查 IP 列表作为中间件的一部分,该中间件将在它到达您的任何应用程序路由之前执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 2014-02-13
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多