0

我想写一个创建WAF条目(这将阻止一个IP地址或一组IP地址进入),并稍后删除它们的基本逻辑。AWS Lambda函数创建/删除条目到WAF

我目前做这

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.WAFaws.WAF会自动将一组IP地址分组为IPSets吗?
  3. aws.WAF也保持命中计数,类似的我在做类Police
  4. 我需要取ChangeTokenIPaddress我要添加/删除到块列表中吗?或者我可以拥有一次并永久使用它?

我会很高兴有一个示例代码(最好在JavaScript中)的确切要求。 我会很高兴,如果我得到我的jailbail代码填充。

回答

0

AWS对Blocking IPs That Exceed Request Limits的教程,包括sample Python code,你可能会发现在编写相当于JavaScript代码来调用updateIPSet(用于插入和删除IP套)有帮助。

+0

好的..这很好..但我不想创建一个云形成堆栈..不是没有堆栈可能吗?我的意思是,我只是更新了WAF条目..堆栈在哪里?我已经阅读了教程..并试图在我自己的情况下完成所有工作,而不使用堆栈(模板)。即使是教程,lamda函数也会进入WAF ..我只是用同样简单的逻辑来做同样的事.. – codeofnode

+0

对,这里不需要CloudFormation。我希望你能通过JavaScript SDK来做到这一点。示例Python Lambda代码没有帮助吗? – jarmod

+0

这当然有帮助..得到一些想法发生了什么..但只是努力与哪里ip集来自和一点蟒蛇..非常新的蟒蛇 – codeofnode