Untitled

 avatar
unknown
plain_text
a year ago
2.7 kB
5
Indexable
const maxmind = require('maxmind');
const { exec } = require('child_process');

// Pfad zur GeoIP-Datenbank
const DB_PATH = './Firewall/dbip-country-lite.mmdb';
const allowedCountries = ['DE', 'AT', 'CH']; // Deutschland, Österreich, Schweiz

// Funktion zum Hinzufügen einer Firewall-Regel
function addFirewallRule(ip, port = 80) {
    const command = `powershell.exe -Command "New-NetFirewallRule -DisplayName 'Allow ${ip}' -Direction Inbound -Action Allow -Protocol TCP -LocalPort ${port} -RemoteAddress ${ip}"`;
    exec(command, (error, stdout, stderr) => {
        if (error) {
            console.error(`Error: ${error.message}`);
            return;
        }
        if (stderr) {
            console.error(`stderr: ${stderr}`);
            return;
        }
        console.log(`Firewall rule added for ${ip}:${port}`);
    });
}

// Funktion zum Blockieren aller eingehenden Verbindungen
function blockAllInboundTraffic() {
    const command = `powershell.exe -Command "New-NetFirewallRule -DisplayName 'Block All Inbound' -Direction Inbound -Action Block -Protocol TCP -LocalPort Any"`;
    exec(command, (error, stdout, stderr) => {
        if (error) {
            console.error(`Error: ${error.message}`);
            return;
        }
        if (stderr) {
            console.error(`stderr: ${stderr}`);
            return;
        }
        console.log(`All inbound traffic blocked`);
    });
}

// Funktion zum Überprüfen von IP-Adressen und Freischalten, wenn zulässig
function allowSpecificCountries() {
    maxmind.open(DB_PATH).then((lookup) => {
        // Erstelle eine spezifische Regel für die vorgegebene IP
        addFirewallRule('80.133.29.37');

        // Theoretisch würde hier Code stehen, um weitere IPs zu überprüfen
        // Beispiel-IP-Adressen prüfen
        const testIPs = ['123.123.123.123', '95.91.215.109']; // Beispiele
        testIPs.forEach(ip => {
            const geoData = lookup.get(ip);
            if (geoData && allowedCountries.includes(geoData.country.iso_code)) {
                console.log(`IP ${ip} is allowed from ${geoData.country.iso_code}`);
                addFirewallRule(ip);
            } else {
                console.log(`IP ${ip} is not allowed.`);
            }
        });
    }).catch(err => {
        console.error('Error opening MMDB file:', err);
    });
}

// Ausführung der Funktionen
blockAllInboundTraffic(); // Schritt 1: Blockiere alle eingehenden Verbindungen
setTimeout(allowSpecificCountries, 5000); // Schritt 2: Erlaube spezifische Länder nach einer kurzen Verzögerung, um Konflikte zu vermeiden
Editor is loading...
Leave a Comment