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!

5 Gedanken zu „iptables Generator – Firewall-Regeln leicht gemacht 🔥“
  1. Fantastisches Tool, Daniel! Als jemand, der täglich mit Firewalls arbeitet, finde ich diesen iptables Generator extrem nützlich. Eine echte Arbeitserleichterung! Bin gespannt, wie du den Code weiterentwickelst.

  2. Sehr gut gemacht! Die Visualisierung der Regeln im Generator macht es so viel einfacher, komplexe Setups zu verstehen. Ein echtes Highlight für alle, die sich mit Linux-Security beschäftigen.

  3. Endlich mal ein Tool, das die Erstellung von Firewall-Regeln vereinfacht, ohne Kompromisse bei der Sicherheit einzugehen. Absolut empfehlenswert für alle, die ihre Server härten wollen.

Schreibe einen Kommentar

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