mirror of
https://github.com/nttgin/BGPalerter.git
synced 2024-05-19 06:50:08 +00:00
added parameter to ignore collectors' peers (#1217)
This commit is contained in:
@ -2,6 +2,9 @@ connectors:
|
|||||||
- file: connectorRIS
|
- file: connectorRIS
|
||||||
name: ris
|
name: ris
|
||||||
params:
|
params:
|
||||||
|
blacklistSources:
|
||||||
|
- 123.0.0.1/24
|
||||||
|
- 3453
|
||||||
carefulSubscription: true
|
carefulSubscription: true
|
||||||
url: ws://ris-live.ripe.net/v1/ws/
|
url: ws://ris-live.ripe.net/v1/ws/
|
||||||
perMessageDeflate: true
|
perMessageDeflate: true
|
||||||
|
@ -131,6 +131,7 @@ Parameters for this connector module:
|
|||||||
|carefulSubscription| If this parameter is set to true (default), the RIS server will stream only the data related to our prefix. This is an advanced parameter useful only for research purposes. |
|
|carefulSubscription| If this parameter is set to true (default), the RIS server will stream only the data related to our prefix. This is an advanced parameter useful only for research purposes. |
|
||||||
|perMessageDeflate| Enable gzip compression on the connection. |
|
|perMessageDeflate| Enable gzip compression on the connection. |
|
||||||
|disableCanary| ConnectorRIS automatically receives BGP announcements about [RIS beacons](https://www.ripe.net/analyse/internet-measurements/routing-information-service-ris/current-ris-routing-beacons). RIS beacons are prefixes periodically announced and withdrawn for research purposes. BGPalerter uses these beacons to detect faulty data streams. By setting this parameter to true, you will disable such a check.|
|
|disableCanary| ConnectorRIS automatically receives BGP announcements about [RIS beacons](https://www.ripe.net/analyse/internet-measurements/routing-information-service-ris/current-ris-routing-beacons). RIS beacons are prefixes periodically announced and withdrawn for research purposes. BGPalerter uses these beacons to detect faulty data streams. By setting this parameter to true, you will disable such a check.|
|
||||||
|
|blacklistSources| A list of prefixes, IPs, and AS numbers of blacklisted collectors' peers. Data coming from these collectors' peers will be ignored.|
|
||||||
|
|
||||||
#### connectorRISDump
|
#### connectorRISDump
|
||||||
It connects to the RIPEstat's BGPlay API and retrieves a RIS dump about the monitored resources. The retrieved dump is 2 hours old, due to limitations on the API side.
|
It connects to the RIPEstat's BGPlay API and retrieves a RIS dump about the monitored resources. The retrieved dump is 2 hours old, due to limitations on the API side.
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
import axios from "redaxios";
|
import axios from "redaxios";
|
||||||
import axiosEnrich from "../utils/axiosEnrich";
|
import axiosEnrich from "../utils/axiosEnrich";
|
||||||
|
import ipUtils from 'ip-sub';
|
||||||
|
|
||||||
export default class Connector {
|
export default class Connector {
|
||||||
|
|
||||||
@ -48,12 +49,42 @@ export default class Connector {
|
|||||||
this.errorCallback = null;
|
this.errorCallback = null;
|
||||||
this.disconnectCallback = null;
|
this.disconnectCallback = null;
|
||||||
|
|
||||||
|
|
||||||
this.axios = axiosEnrich(axios,
|
this.axios = axiosEnrich(axios,
|
||||||
(!this.params.noProxy && env.agent) ? env.agent : null,
|
(!this.params.noProxy && env.agent) ? env.agent : null,
|
||||||
`${env.clientId}/${env.version}`);
|
`${env.clientId}/${env.version}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_parseFilters = (callback) => {
|
||||||
|
const {blacklistSources=[]} = this.params;
|
||||||
|
|
||||||
|
if (blacklistSources) {
|
||||||
|
const filters = {
|
||||||
|
asns: blacklistSources.filter(i => Number.isInteger(i)),
|
||||||
|
prefixes: blacklistSources.filter(i => ipUtils.isValidPrefix(i) || ipUtils.isValidIP(i)).map(i => ipUtils.toPrefix(i)),
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateCallback = (filters, callback) => {
|
||||||
|
return (message) => {
|
||||||
|
const {data} = message;
|
||||||
|
|
||||||
|
if (data && (data.peerAS || data.peer)) {
|
||||||
|
const messagePeer = ipUtils.toPrefix(data.peer);
|
||||||
|
if (!filters.prefixes.some(prefix => ipUtils.isEqualPrefix(prefix, messagePeer) || ipUtils.isSubnet(prefix, messagePeer))
|
||||||
|
&& !filters.asns.includes(data.peerAS)) {
|
||||||
|
return callback(message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return callback(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return generateCallback(filters, callback);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
connect = () =>
|
connect = () =>
|
||||||
new Promise((resolve, reject) => reject(new Error('The method connect MUST be implemented')));
|
new Promise((resolve, reject) => reject(new Error('The method connect MUST be implemented')));
|
||||||
|
|
||||||
@ -93,7 +124,13 @@ export default class Connector {
|
|||||||
};
|
};
|
||||||
|
|
||||||
onMessage = (callback) => {
|
onMessage = (callback) => {
|
||||||
this.messageCallback = callback;
|
const filterCallback = this._parseFilters(callback);
|
||||||
|
|
||||||
|
if (filterCallback) {
|
||||||
|
this.messageCallback = filterCallback;
|
||||||
|
} else {
|
||||||
|
this.messageCallback = callback;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onError = (callback) => {
|
onError = (callback) => {
|
||||||
|
@ -386,6 +386,7 @@ export default class ConnectorRIS extends Connector {
|
|||||||
const possibleRIS = message["possibleRIS"] || false;
|
const possibleRIS = message["possibleRIS"] || false;
|
||||||
const withdrawals = (message["withdrawals"] || []).filter(prefix => acceptPrefix(prefix, possibleRIS));
|
const withdrawals = (message["withdrawals"] || []).filter(prefix => acceptPrefix(prefix, possibleRIS));
|
||||||
const peer = message["peer"];
|
const peer = message["peer"];
|
||||||
|
const peerAS = message["peer_asn"];
|
||||||
const communities = message["community"] || [];
|
const communities = message["community"] || [];
|
||||||
const timestamp = message["timestamp"] * 1000;
|
const timestamp = message["timestamp"] * 1000;
|
||||||
let path, originAS;
|
let path, originAS;
|
||||||
@ -411,6 +412,7 @@ export default class ConnectorRIS extends Connector {
|
|||||||
type: "announcement",
|
type: "announcement",
|
||||||
prefix,
|
prefix,
|
||||||
peer,
|
peer,
|
||||||
|
peerAS,
|
||||||
path,
|
path,
|
||||||
originAS,
|
originAS,
|
||||||
nextHop,
|
nextHop,
|
||||||
@ -428,6 +430,7 @@ export default class ConnectorRIS extends Connector {
|
|||||||
type: "withdrawal",
|
type: "withdrawal",
|
||||||
prefix,
|
prefix,
|
||||||
peer,
|
peer,
|
||||||
|
peerAS,
|
||||||
timestamp
|
timestamp
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,9 @@ connectors:
|
|||||||
- file: connectorTest
|
- file: connectorTest
|
||||||
name: tes
|
name: tes
|
||||||
params:
|
params:
|
||||||
|
blacklistSources:
|
||||||
|
- 124.0.0.3
|
||||||
|
- 3453
|
||||||
testType: withdrawal
|
testType: withdrawal
|
||||||
|
|
||||||
monitors:
|
monitors:
|
||||||
|
Reference in New Issue
Block a user