0

我正在尝试编写一个基本逻辑来创建 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]);
  }
}

所以在这里我想为jail和填写代码bail(阻止/释放一个IP地址或一组地址)

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

我有一些来自上述文档的基本问题

  1. 我如何传递IP地址?在哪个 API 中?
  2. 是否会aws.WAF自动将一组 IP 地址分组到 IPSet 中?
  3. 是否aws.WAF也保持命中计数,我在课堂上做的类似的事情Police
  4. 我是否需要为要添加/删除到阻止列表中ChangeToken每个内容进行获取? IPaddress或者我可以拥有一次并永远使用它吗?

对于这个确切的要求,我很高兴有一个示例代码(最好是在 javascript 中)。如果我填写了我的jail和代码,我会很高兴。bail

4

1 回答 1

0

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

于 2017-06-01T17:44:33.207 回答