我正在尝试编写一个基本逻辑来创建 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 地址并阻止它,另一个释放它。
我有一些来自上述文档的基本问题
- 我如何传递IP地址?在哪个 API 中?
- 是否会
aws.WAF
自动将一组 IP 地址分组到 IPSet 中? - 是否
aws.WAF
也保持命中计数,我在课堂上做的类似的事情Police
? - 我是否需要为要添加/删除到阻止列表中
ChangeToken
的每个内容进行获取?IPaddress
或者我可以拥有一次并永远使用它吗?
对于这个确切的要求,我很高兴有一个示例代码(最好是在 javascript 中)。如果我填写了我的jail
和代码,我会很高兴。bail