Foto von Mikhail Nilov: https://www.pexels.com/de-de/foto/mann-menschen-nacht-dunkel-6963098/

🔹 Überblick

Manuelle Firewall-Konfiguration kann mühsam und fehleranfällig sein. Mein iptables Generator erleichtert diesen Prozess durch eine webbasierte Oberfläche, die Regeln automatisch generiert. Ideal für Linux-Admins, die schnell und flexibel Sicherheitsregeln setzen möchten!


🛠️ Features

✅ Generiert iptables-Regeln basierend auf Nutzer-Eingaben
✅ Unterstützt gängige Dienste (SSH, HTTP, HTTPS, FTP, etc.)
Benutzerdefinierte Ports & IP-Adressen möglich
Einfache Web-Oberfläche für schnelle Regel-Erstellung
Download-Funktion für generierte Firewall-Regeln


📌 Beispiel: Generierte Regel für SSH-Zugang

Ein Nutzer gibt folgende Werte ein:

  • Protokoll: TCP
  • Quelle: 192.168.1.100
  • Ziel: 192.168.1.1
  • Dienst: SSH
  • Aktion: ACCEPT

Das Skript generiert dann automatisch folgende iptables-Regel:

iptables -A INPUT -s 192.168.1.100 -d 192.168.1.1 -p tcp --dport 22 -j ACCEPT


📜 Code-Ausschnitt (Hauptlogik)

<?php
$generatedIptablesConf = "";

// Überprüfung, ob das Formular gesendet wurde
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = $_POST['action'];
    $protocol = $_POST['protocol'];
    $sourceIP = $_POST['source_ip'];
    $targetIP = $_POST['target_ip'];
    
    // Dienste-Ports Zuordnung
    $ports = [
        'http' => 80,
        'https' => 443,
        'ssh' => 22,
        'ftp' => 21,
        'smtp' => 25,
        'dns' => 53,
        'pop3' => 110,
        'imap' => 143
    ];

    // Überprüfen, ob Dienste ausgewählt wurden
    if (isset($_POST['services'])) {
        $selectedServices = $_POST['services'];
        foreach ($selectedServices as $service) {
            $port = $ports[$service];
            // Erstellen der iptables-Regel für jeden ausgewählten Dienst
            $generatedIptablesConf .= "iptables -A INPUT ";
            
            if (!empty($sourceIP)) {
                $generatedIptablesConf .= "-s {$sourceIP} ";
            }
            
            if (!empty($targetIP)) {
                $generatedIptablesConf .= "-d {$targetIP} ";
            }
            
            $generatedIptablesConf .= "-p {$protocol} --dport {$port} -j {$action}\n";
        }
    }

    // Überprüfen, ob ein benutzerdefinierter Port eingegeben wurde
    if (!empty($_POST['port'])) {
        $port = $_POST['port'];
        $generatedIptablesConf .= "iptables -A INPUT ";
        
        if (!empty($sourceIP)) {
            $generatedIptablesConf .= "-s {$sourceIP} ";
        }
        
        if (!empty($targetIP)) {
            $generatedIptablesConf .= "-d {$targetIP} ";
        }
        
        $generatedIptablesConf .= "-p {$protocol} --dport {$port} -j {$action}\n";
    }
}
?>

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>iptables-Regel-Generator</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500&display=swap');

        body {
            font-family: 'Orbitron', sans-serif;
            background-color: #121212;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            color: #E0E0E0;
        }
        .container {
            background: #1F1F1F;
            border-radius: 15px;
            padding: 40px;
            max-width: 800px;
            box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.4);
            text-align: left;
        }
        h2 {
            color: #00E5FF;
            font-size: 2rem;
            text-transform: uppercase;
            letter-spacing: 4px;
            text-align: center;
        }
        .form-group {
            margin-bottom: 20px;
        }
        label {
            display: block;
            font-size: 1.2rem;
            margin-bottom: 5px;
            color: #BBBBBB;
        }
        .hint {
            font-size: 0.9rem;
            color: #888888;
            margin-bottom: 8px;
        }
        .form-group input[type="text"], .form-group select, .form-group input[type="checkbox"] {
            padding: 12px;
            font-size: 1rem;
            border-radius: 8px;
            border: none;
            width: 100%;
            box-sizing: border-box;
            background-color: #333;
            color: #E0E0E0;
            margin-top: 5px;
            transition: background-color 0.3s ease;
        }
        .form-group input[type="text"]:focus {
            background-color: #444;
            outline: none;
            border: 2px solid #00E5FF;
        }
        .checkbox-group {
            display: flex;
            flex-direction: column;
        }
        button {
            background-color: #00E5FF;
            padding: 15px 30px;
            font-size: 1rem;
            border: none;
            border-radius: 8px;
            color: #000;
            cursor: pointer;
            text-transform: uppercase;
            transition: background-color 0.3s ease, transform 0.3s ease;
            margin-top: 20px;
            width: 100%;
        }
        button:hover {
            background-color: #00BFA5;
            transform: translateY(-2px);
        }
        .code-block {
            background-color: #1b1b1b;
            color: #0FF;
            padding: 20px;
            border-radius: 10px;
            margin-top: 30px;
            font-family: 'Courier New', Courier, monospace;
            white-space: pre; 
            word-wrap: break-word;
            box-shadow: 0px 3px 15px rgba(0, 255, 255, 0.5);
        }
        .download-link {
            display: inline-block;
            margin: 20px 0;
            text-decoration: none;
            background-color: #FF4081;
            color: #000;
            padding: 15px 30px;
            border-radius: 8px;
            transition: background-color 0.3s ease, transform 0.3s ease;
            text-transform: uppercase;
        }
        .download-link:hover {
            background-color: #FF79B0;
            transform: translateY(-2px);
        }
    </style>
</head>
<body>
    <div class="container">
        <h2><i class="fas fa-shield-alt"></i> iptables-Regel-Generator</h2>

        <form action="" method="POST">
            <div class="form-group">
                <label for="action"><i class="fas fa-play-circle"></i> Aktion:</label>
                <div class="hint">Wähle die Aktion, die für diese Regel ausgeführt werden soll (ACCEPT, REJECT oder DROP).</div>
                <select id="action" name="action" required>
                    <option value="ACCEPT">ACCEPT</option>
                    <option value="REJECT">REJECT</option>
                    <option value="DROP">DROP</option>
                </select>
            </div>

            <div class="form-group">
                <label for="protocol"><i class="fas fa-satellite-dish"></i> Protokoll:</label>
                <div class="hint">Wähle das Netzwerkprotokoll (TCP oder UDP).</div>
                <select id="protocol" name="protocol" required>
                    <option value="tcp">TCP</option>
                    <option value="udp">UDP</option>
                </select>
            </div>

            <div class="form-group">
                <label for="service"><i class="fas fa-server"></i> Dienst:</label>
                <div class="hint">Du kannst einen bekannten Dienst wählen, der den entsprechenden Port automatisch festlegt.</div>
                <div class="checkbox-group">
                    <label><input type="checkbox" name="services[]" value="http"> HTTP (Port 80)</label>
                    <label><input type="checkbox" name="services[]" value="https"> HTTPS (Port 443)</label>
                    <label><input type="checkbox" name="services[]" value="ssh"> SSH (Port 22)</label>
                    <label><input type="checkbox" name="services[]" value="ftp"> FTP (Port 21)</label>
                    <label><input type="checkbox" name="services[]" value="smtp"> SMTP (Port 25)</label>
                    <label><input type="checkbox" name="services[]" value="dns"> DNS (Port 53)</label>
                    <label><input type="checkbox" name="services[]" value="pop3"> POP3 (Port 110)</label>
                    <label><input type="checkbox" name="services[]" value="imap"> IMAP (Port 143)</label>
                </div>
            </div>

            <div class="form-group">
                <label for="port"><i class="fas fa-network-wired"></i> Benutzerdefinierter Port (optional):</label>
                <div class="hint">Gib den Zielport an, falls kein Dienst gewählt wird.</div>
                <input type="text" id="port" name="port">
            </div>

            <div class="form-group">
                <label for="source_ip"><i class="fas fa-laptop-house"></i> Quell-IP (optional):</label>
                <div class="hint">Du kannst eine spezifische Quell-IP angeben, von der der Verkehr kommt.</div>
                <input type="text" id="source_ip" name="source_ip">
            </div>

            <div class="form-group">
                <label for="target_ip"><i class="fas fa-server"></i> Ziel-IP (optional):</label>
                <div class="hint">Du kannst eine spezifische Ziel-IP angeben, auf die die Regel angewendet wird.</div>
                <input type="text" id="target_ip" name="target_ip">
            </div>

            <button type="submit"><i class="fas fa-cogs"></i> Regel generieren</button>
        </form>

        <?php if ($generatedIptablesConf): ?>
            <h3>Generierte iptables-Regel:</h3>
            <div class="code-block"><?php echo htmlspecialchars($generatedIptablesConf); ?></div>
            <a href="data:text/plain;charset=utf-8,<?php echo rawurlencode($generatedIptablesConf); ?>" download="iptables_rule.sh" class="download-link"><i class="fas fa-download"></i> Regel herunterladen</a>
        <?php endif; ?>
    </div>
</body>
</html>

🚀 Anwendungsszenarien

🔹 Sichere Webserver: Erlaube nur spezifische IPs für Admin-Zugänge
🔹 Private Netzwerke: Filtere ungewollte externe Verbindungen
🔹 Docker & Container-Umgebungen: Definiere Firewall-Regeln pro Container
🔹 Automatisierte Deployment-Sicherheit


📥 Download & Nutzung

💾 Download:iptables_generator.php
📌 Lizenz: Open-Source – Feel free to use & modify!

💬 Feedback oder Fragen? Lass es mich wissen!

Von Daniel Mattick

Ich bin Daniel, Technik-Enthusiast mit einer Vorliebe für Automatisierung, Skripting und alles, was IT-Prozesse einfacher macht. Ich bastle gerne an Lösungen, die den Alltag in der IT erleichtern – egal ob für Profis oder Neugierige, die sich in die Materie einarbeiten wollen. Dabei teile ich mein Wissen und meine Skripte in der IT Toolbox, weil ich finde: Gute Lösungen sollte man nicht für sich behalten!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert