AWS Lambda函数用于创建/删除WAF中的条目

时间:2017-06-01 14:53:50

标签: javascript node.js amazon-web-services aws-lambda aws-sdk-js

我正在尝试编写一个用于创建WAF条目的基本逻辑(这将阻止输入的IP地址或IP地址集),然后删除它们。

我目前正在做这个

const aws = require('aws-sdk');

const s3 = new aws.S3({ apiVersion: '2006-03-01' });
const waf = new aws.WAF({ apiVersion: '2015-08-24' });

class Police {
  constructor(maxHit=100, timeGap=(6*60*60*1000)) {
    this.maxHit = maxHit;
    this.timeGap = timeGap;
    this.lastBailCheck = Date.now();
    this.hitMap = {};
  }
  static bail(ip){
    // TODO bail this ip by removing entry into waf
  }
  static jail(ip){
    // TODO jail this ip by adding entry from waf
  }
  checkBail(){
    var nowDate = Date.now();
    if((nowDate - this.lastBailCheck) > this.timeGap){
      this.lastBailCheck = nowDate;
      this.prevMap = this.hitMap;
      this.hitMap = {};
      this.scanAndBail();
    }
  }
  scanAndBail(){
    Object.keys(this.prevMap).forEach(Police.bail);
    delete this.prevMap;
  }
  watch(ip){
    this.hitMap[ip] = (this.hitMap[ip] || 0) + 1;
    if(this.maxHit < this.hitMap[ip]){
      Police.jail(ip);
    }
    this.checkBail();
  }
}

const police = new Police();

function forOneLogLine(line){
  if(typeof line === 'string') {
    police.watch(line.split(' ')[3]);
  }
}

所以我想填写jailbail的代码(阻止/释放IP地址或一组地址)

我经历了这个AWS nodejs docs。但如何实现它真是令人困惑。更具体地说,如何以最佳方式实施它。 我正在寻找两个API,一个我会传递ip地址,这会阻止它,另一个是释放它。

我从上面的文档中有一些基本问题

  1. 我如何通过IP地址?以及在哪个API?
  2. aws.WAF会自动将一组IP地址分组到IPSets吗?
  3. aws.WAF是否也保留了点击次数,类似于我在课堂Police中所做的事情?
  4. 我是否需要为 ChangeToken提取IPaddress我要添加/删除到阻止列表中?或者我可以拥有它并永远使用它吗?
  5. 我很乐意为这个确切的要求提供一个示例代码(最好是在javascript中)。 如果我填写jailbail代码,我会很高兴。

1 个答案:

答案 0 :(得分:0)

AWS有一个关于Blocking IPs That Exceed Request Limits的教程,包括sample Python code,您可能会发现在编写等效的JavaScript代码时可以帮助调用updateIPSet(用于插入和删除IP集)。