Whitelist
This commit is contained in:
parent
d00d32d229
commit
e165737fb0
4 changed files with 21 additions and 16 deletions
15
index.js
15
index.js
|
|
@ -10,7 +10,7 @@ const headers = require('./scripts/headers.js');
|
||||||
const { logToCSV, readReportedIPs, wasImageRequestLogged } = require('./services/csv.js');
|
const { logToCSV, readReportedIPs, wasImageRequestLogged } = require('./services/csv.js');
|
||||||
const formatDelay = require('./scripts/formatDelay.js');
|
const formatDelay = require('./scripts/formatDelay.js');
|
||||||
const clientIp = require('./services/clientIp.js');
|
const clientIp = require('./services/clientIp.js');
|
||||||
const whitelist = require('./whitelist.js');
|
const whitelist = require('./scripts/whitelist.js');
|
||||||
const log = require('./scripts/log.js');
|
const log = require('./scripts/log.js');
|
||||||
|
|
||||||
const fetchBlockedIPs = async () => {
|
const fetchBlockedIPs = async () => {
|
||||||
|
|
@ -18,8 +18,15 @@ const fetchBlockedIPs = async () => {
|
||||||
const { data, status } = await axios.post('https://api.cloudflare.com/client/v4/graphql', PAYLOAD(), { headers: headers.CLOUDFLARE });
|
const { data, status } = await axios.post('https://api.cloudflare.com/client/v4/graphql', PAYLOAD(), { headers: headers.CLOUDFLARE });
|
||||||
const events = data?.data?.viewer?.zones[0]?.firewallEventsAdaptive;
|
const events = data?.data?.viewer?.zones[0]?.firewallEventsAdaptive;
|
||||||
if (events) {
|
if (events) {
|
||||||
log('log', `Fetched ${events.length} events from Cloudflare`);
|
const filtered = events.filter(x =>
|
||||||
return events;
|
x.ip !== clientIp.getAddress() &&
|
||||||
|
!whitelist.subdomains.some(subdomain => x.clientRequestHTTPHost.includes(subdomain)) && // Subdomains
|
||||||
|
!whitelist.useragents.some(ua => x.userAgent.includes(ua)) && // User-agents
|
||||||
|
!whitelist.endpoints.some(endpoint => x.clientRequestPath.includes(endpoint))// Endpoints
|
||||||
|
);
|
||||||
|
|
||||||
|
log('log', `Fetched ${events.length} (filtered ${filtered.length}) events from Cloudflare`);
|
||||||
|
return filtered;
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Failed to retrieve data from Cloudflare (status ${status}); ${JSON.stringify(data?.errors)}`);
|
throw new Error(`Failed to retrieve data from Cloudflare (status ${status}); ${JSON.stringify(data?.errors)}`);
|
||||||
}
|
}
|
||||||
|
|
@ -131,7 +138,7 @@ const reportIP = async (event, uri, country, hostname, endpoint, cycleErrorCount
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whitelist.includes(event.clientRequestPath)) return log('log', `Skipping ${event.clientRequestPath}...`);
|
if (whitelist.endpoints.includes(event.clientRequestPath)) return log('log', `Skipping ${event.clientRequestPath}...`);
|
||||||
|
|
||||||
const reportedIPs = readReportedIPs();
|
const reportedIPs = readReportedIPs();
|
||||||
const { recentlyReported, timeDifference, reason } = isIPReportedRecently(event.rayName, ip, reportedIPs);
|
const { recentlyReported, timeDifference, reason } = isIPReportedRecently(event.rayName, ip, reportedIPs);
|
||||||
|
|
|
||||||
5
scripts/whitelist.js
Normal file
5
scripts/whitelist.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
const subdomains = ['api.', 'cdn.'];
|
||||||
|
const useragents = ['Chrome/129', 'Chrome/130', 'Chrome/131', 'Chrome/132', 'Chrome/133', 'StellaLauncher'];
|
||||||
|
const endpoints = ['/api/', '//video', '//js', '//images', '//imgs', 'favicon.ico'];
|
||||||
|
|
||||||
|
module.exports = { subdomains, useragents, endpoints };
|
||||||
|
|
@ -2,6 +2,7 @@ const { axios } = require('./axios.js');
|
||||||
const { readReportedIPs, updateSefinekAPIInCSV } = require('./csv.js');
|
const { readReportedIPs, updateSefinekAPIInCSV } = require('./csv.js');
|
||||||
const log = require('../scripts/log.js');
|
const log = require('../scripts/log.js');
|
||||||
const clientIp = require('./clientIp.js');
|
const clientIp = require('./clientIp.js');
|
||||||
|
const whitelist = require('../scripts/whitelist.js');
|
||||||
|
|
||||||
const API_URL = `${process.env.SEFINEK_API_URL}/cloudflare-waf-abuseipdb/post`;
|
const API_URL = `${process.env.SEFINEK_API_URL}/cloudflare-waf-abuseipdb/post`;
|
||||||
|
|
||||||
|
|
@ -9,11 +10,10 @@ module.exports = async () => {
|
||||||
const reportedIPs = readReportedIPs().filter(x =>
|
const reportedIPs = readReportedIPs().filter(x =>
|
||||||
x.status === 'REPORTED' &&
|
x.status === 'REPORTED' &&
|
||||||
x.ip !== clientIp.getAddress() &&
|
x.ip !== clientIp.getAddress() &&
|
||||||
!x.endpoint.includes('/api') && // API requests
|
|
||||||
!['//video', '//js', '//images', '//imgs', 'favicon.ico'].some(endpoint => x.endpoint.includes(endpoint)) && // Endpoints
|
|
||||||
['api.', 'cdn.'].some(prefix => x.hostname.startsWith(prefix)) && // Domains
|
|
||||||
x.hostname !== 'blocklist.sefinek.net' && // Domain
|
x.hostname !== 'blocklist.sefinek.net' && // Domain
|
||||||
!['Chrome/129', 'Chrome/130', 'Chrome/131', 'Chrome/132', 'Chrome/133', 'StellaLauncher'].some(agent => x.useragent.includes(agent)) && // User-agents
|
!whitelist.subdomains.some(subdomain => x.clientRequestHTTPHost.includes(subdomain)) && // Subdomains
|
||||||
|
!whitelist.useragents.some(ua => x.userAgent.includes(ua)) && // User-agents
|
||||||
|
!whitelist.endpoints.some(endpoint => x.clientRequestPath.includes(endpoint)) && // Endpoints
|
||||||
!(/crawler|spider|bot/gi).test(x.useragent) && // Bots
|
!(/crawler|spider|bot/gi).test(x.useragent) && // Bots
|
||||||
!x.sefinekAPI
|
!x.sefinekAPI
|
||||||
);
|
);
|
||||||
|
|
@ -39,9 +39,7 @@ module.exports = async () => {
|
||||||
country: ip.country,
|
country: ip.country,
|
||||||
timestamp: ip.timestamp,
|
timestamp: ip.timestamp,
|
||||||
})),
|
})),
|
||||||
}, {
|
}, { headers: { 'Authorization': process.env.SEFINEK_API_SECRET } });
|
||||||
headers: { 'Authorization': process.env.SEFINEK_API_SECRET },
|
|
||||||
});
|
|
||||||
|
|
||||||
log('log', `Successfully sent ${uniqueLogs.length} logs to Sefinek API. Status: ${res.status}`);
|
log('log', `Successfully sent ${uniqueLogs.length} logs to Sefinek API. Status: ${res.status}`);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
module.exports = [
|
|
||||||
'/weryfikacja',
|
|
||||||
'/verification',
|
|
||||||
'/download',
|
|
||||||
];
|
|
||||||
Loading…
Add table
Reference in a new issue