srcIp === getServerIP()

This commit is contained in:
Sefinek 2024-12-25 00:14:15 +01:00
parent e1bfd289fd
commit 4df9c9c4be
5 changed files with 39 additions and 7 deletions

View file

@ -2,25 +2,25 @@ exports.MAIN = {
// Server // Server
UFW_FILE: '/var/log/ufw.log', UFW_FILE: '/var/log/ufw.log',
CACHE_FILE: '/tmp/ufw-abuseipdb-reporter.cache', CACHE_FILE: '/tmp/ufw-abuseipdb-reporter.cache',
SERVER_ID: null, SERVER_ID: null, // The server name that will be visible in the reports. If you don't want to define it, leave the value as null.
// Reporting // Reporting
ABUSEIPDB_API_KEY: '', ABUSEIPDB_API_KEY: '',
REPORT_INTERVAL: 12 * 60 * 60 * 1000, // 12h REPORT_INTERVAL: 12 * 60 * 60 * 1000, // 12h
// Project // Project
GITHUB_REPO: 'https://github.com/sefinek/UFW-AbuseIPDB-Reporter', GITHUB_REPO: 'https://github.com/sefinek/UFW-AbuseIPDB-Reporter', // If you are using a fork, provide the link to the forked repository here.
}; };
exports.REPORT_COMMENT = (timestamp, srcIp, dstIp, proto, spt, dpt, ttl, len, tos, serverName) => { exports.REPORT_COMMENT = (timestamp, srcIp, dstIp, proto, spt, dpt, ttl, len, tos, serverName) => {
return `Blocked by UFW ${serverName ? `on ${serverName} ` : ''}[${dpt}/${proto?.toLowerCase()}] return `Blocked by UFW ${serverName ? `on ${serverName} ` : ''}[${dpt}/${proto?.toLowerCase()}]
Source port: ${spt} Source port: ${spt || 'N/A'}
TTL: ${ttl || 'N/A'} TTL: ${ttl || 'N/A'}
Packet length: ${len || 'N/A'} Packet length: ${len || 'N/A'}
TOS: ${tos || 'N/A'} TOS: ${tos || 'N/A'}
This report (for ${srcIp}) was generated by: This report (for ${srcIp}) was generated by:
https://github.com/sefinek/UFW-AbuseIPDB-Reporter`; // Please do not remove the URL to the repository of this script. I would be really grateful. 💙 https://github.com/sefinek/UFW-AbuseIPDB-Reporter`; // Please do not remove this URL; I would be very grateful! Thank you. 💙
}; };
// See: https://www.abuseipdb.com/categories // See: https://www.abuseipdb.com/categories

View file

@ -1,9 +1,10 @@
const fs = require('node:fs'); const fs = require('node:fs');
const chokidar = require('chokidar'); const chokidar = require('chokidar');
const isLocalIP = require('./utils/isLocalIP.js'); const isLocalIP = require('./services/isLocalIP.js');
const { reportedIPs, loadReportedIPs, saveReportedIPs, isIPReportedRecently, markIPAsReported } = require('./utils/cache.js'); const { reportedIPs, loadReportedIPs, saveReportedIPs, isIPReportedRecently, markIPAsReported } = require('./services/cache.js');
const log = require('./utils/log.js'); const log = require('./utils/log.js');
const axios = require('./services/axios.js'); const axios = require('./services/axios.js');
const getServerIP = require('./services/serverIp.js');
const config = require('./config.js'); const config = require('./config.js');
const { version } = require('./package.json'); const { version } = require('./package.json');
const { UFW_FILE, ABUSEIPDB_API_KEY, SERVER_ID, GITHUB_REPO } = config.MAIN; const { UFW_FILE, ABUSEIPDB_API_KEY, SERVER_ID, GITHUB_REPO } = config.MAIN;
@ -45,6 +46,11 @@ const processLogLine = async line => {
return; return;
} }
if (srcIp === getServerIP()) {
log(0, 'Ignoring own IP');
return;
}
if (isLocalIP(srcIp)) { if (isLocalIP(srcIp)) {
log(0, `Ignoring local/private IP: ${srcIp}`); log(0, `Ignoring local/private IP: ${srcIp}`);
return; return;

View file

@ -1,6 +1,6 @@
const fs = require('node:fs'); const fs = require('node:fs');
const { CACHE_FILE, REPORT_INTERVAL } = require('../config.js').MAIN; const { CACHE_FILE, REPORT_INTERVAL } = require('../config.js').MAIN;
const log = require('./log.js'); const log = require('../utils/log.js');
const reportedIPs = new Map(); const reportedIPs = new Map();

26
services/serverIp.js Normal file
View file

@ -0,0 +1,26 @@
const axios = require('./axios.js');
let address = null;
const fetchIPAddress = async () => {
if (address) return;
try {
const { data } = await axios.get('https://api.sefinek.net/api/v2/ip');
if (data?.success && data?.message) {
address = data.message;
} else {
setTimeout(fetchIPAddress, 20 * 1000);
}
} catch {
setTimeout(fetchIPAddress, 25 * 1000);
}
};
if (process.env.NODE_ENV === 'production') {
(async () => fetchIPAddress())();
} else {
address = '::ffff:127.0.0.1';
}
module.exports = () => address;