🔹 Ü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!