我正在尝试编写一个用于创建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地址,这会阻止它,另一个是释放它。
我从上面的文档中有一些基本问题
aws.WAF
会自动将一组IP地址分组到IPSets吗?aws.WAF
是否也保留了点击次数,类似于我在课堂Police
中所做的事情?ChangeToken
提取IPaddress
我要添加/删除到阻止列表中?或者我可以拥有它并永远使用它吗?我很乐意为这个确切的要求提供一个示例代码(最好是在javascript中)。
如果我填写jail
和bail
代码,我会很高兴。
答案 0 :(得分:0)
AWS有一个关于Blocking IPs That Exceed Request Limits的教程,包括sample Python code,您可能会发现在编写等效的JavaScript代码时可以帮助调用updateIPSet(用于插入和删除IP集)。