This commit is contained in:
devdatt 2025-12-20 08:22:45 +05:30
parent ad09791a56
commit 6c62b9c61f
4 changed files with 206 additions and 61 deletions

View File

@ -93,79 +93,67 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</style> </style>
<div class="containerindex"> <div class="containerindex">
<div class="grid"> <div class="grid">
<h2>Firewall Rules</h2> <div class="card wide">
<h2>Allow Rules</h2>
<form method="post">
<table id="rulesTable">
<thead>
<tr>
<th>IP Address</th>
<th>Port</th>
<th>Protocol</th>
<th>Description</th>
<th></th>
</tr>
</thead>
<tbody>
<form method="post"> <?php if ($rules): foreach ($rules as $r): ?>
<table id="rulesTable"> <tr>
<thead> <td><input type="text" name="ip_address[]" value="<?= htmlspecialchars($r['ip_address']) ?>"></td>
<tr> <td><input type="number" name="port[]" value="<?= htmlspecialchars($r['port']) ?>"></td>
<th>IP Version</th> <td>
<th>IP Address</th> <select name="protocol[]">
<th>Port</th> <option value="tcp" <?= $r['protocol'] == 'tcp' ? 'selected' : '' ?>>TCP</option>
<th>Protocol</th> <option value="udp" <?= $r['protocol'] == 'udp' ? 'selected' : '' ?>>UDP</option>
<th>Description</th> <option value="any" <?= $r['protocol'] == 'any' ? 'selected' : '' ?>>ANY</option>
<th></th> </select>
</tr> </td>
</thead> <td><input type="text" name="description[]" value="<?= htmlspecialchars($r['description']) ?>"></td>
<tbody> <td class="actions">
<button type="button" class="btn-remove" onclick="removeRow(this)">Remove</button>
<?php if ($rules): foreach ($rules as $r): ?> </td>
</tr>
<?php endforeach;
else: ?>
<tr> <tr>
<td> <td><input type="text" name="ip_address[]" placeholder="192.168.1.0/24 or 2001:db8::/64"></td>
<select name="ip_version[]"> <td><input type="text" name="port[]" placeholder="1-65535 or any"></td>
<option value="ipv4" <?= $r['ip_version'] == 'ipv4' ? 'selected' : '' ?>>IPv4</option>
<option value="ipv6" <?= $r['ip_version'] == 'ipv6' ? 'selected' : '' ?>>IPv6</option>
</select>
</td>
<td><input type="text" name="ip_address[]" value="<?= htmlspecialchars($r['ip_address']) ?>"></td>
<td><input type="number" name="port[]" value="<?= htmlspecialchars($r['port']) ?>"></td>
<td> <td>
<select name="protocol[]"> <select name="protocol[]">
<option value="tcp" <?= $r['protocol'] == 'tcp' ? 'selected' : '' ?>>TCP</option> <option value="tcp">TCP</option>
<option value="udp" <?= $r['protocol'] == 'udp' ? 'selected' : '' ?>>UDP</option> <option value="udp">UDP</option>
<option value="any" <?= $r['protocol'] == 'any' ? 'selected' : '' ?>>ANY</option> <option value="any">ANY</option>
</select> </select>
</td> </td>
<td><input type="text" name="description[]" value="<?= htmlspecialchars($r['description']) ?>"></td> <td><input type="text" name="description[]"></td>
<td class="actions"> <td class="actions">
<button type="button" class="btn-remove" onclick="removeRow(this)">Remove</button> <button type="button" class="btn-remove" onclick="removeRow(this)">Remove</button>
</td> </td>
</tr> </tr>
<?php endforeach; <?php endif; ?>
else: ?>
<tr>
<td>
<select name="ip_version[]">
<option value="ipv4">IPv4</option>
<option value="ipv6">IPv6</option>
</select>
</td>
<td><input type="text" name="ip_address[]" placeholder="192.168.1.10 or 2001:db8::1"></td>
<td><input type="number" name="port[]" placeholder="1-65535"></td>
<td>
<select name="protocol[]">
<option value="tcp">TCP</option>
<option value="udp">UDP</option>
<option value="any">ANY</option>
</select>
</td>
<td><input type="text" name="description[]"></td>
<td class="actions">
<button type="button" class="btn-remove" onclick="removeRow(this)">Remove</button>
</td>
</tr>
<?php endif; ?>
</tbody> </tbody>
</table> </table>
<br> <br>
<button type="button" class="btn-add" onclick="addRow()">Add Rule</button> <button type="button" class="btn-add" onclick="addRow()">Add Rule</button>
<br><br> <br><br>
<button type="submit" class="btn-save">Save Rules</button> <button type="submit" class="btn-save">Save Rules</button>
<br><br> <br><br>
<br><br> <br><br>
</form> </form>
<br><br> <br><br>
</div>
</div> </div>
</div> </div>

View File

@ -18,6 +18,97 @@ switch ($_POST['action']) {
case 'reboot': case 'reboot':
exec('sudo reboot'); exec('sudo reboot');
break; break;
case 'backup':
$jsonFiles = [
'input.json',
'output.json',
'firewall.json',
'network.json',
'firmware.json',
];
$tmpZip = sys_get_temp_dir() . '/backup.zip';
$outputFile = __DIR__ . '/universal_encoder_decoder.bin';
$publicKey = file_get_contents('/var/www/public.pem');
$publicKey = file_get_contents('/var/www/public.pem');
$zip = new ZipArchive();
$zip->open($tmpZip, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($sourceDir, FilesystemIterator::SKIP_DOTS)
);
foreach ($files as $file) {
$zip->addFile(
$file->getRealPath(),
substr($file->getRealPath(), strlen($sourceDir) + 1)
);
}
/* Add JSON files if exist */
foreach ($jsonFiles as $json) {
if (file_exists($json)) {
$zip->addFile($json, basename($json));
}
}
$zip->close();
$data = file_get_contents($tmpZip);
/* Generate AES key */
$aesKey = random_bytes(32);
$iv = random_bytes(16);
/* Encrypt ZIP */
$encryptedData = openssl_encrypt(
$data,
'AES-256-CBC',
$aesKey,
OPENSSL_RAW_DATA,
$iv
);
/* Encrypt AES key using RSA public key */
openssl_public_encrypt($aesKey, $encryptedKey, $publicKey);
/* Final binary format */
$payload = json_encode([
'key' => base64_encode($encryptedKey),
'iv' => base64_encode($iv),
'data' => base64_encode($encryptedData)
]);
$filename = 'universal_encoder_decoder.bin';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Length: ' . strlen($payload));
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
echo $payload;
flush();
unlink($tmpZip);
break;
case 'restore':
$inputFile = __DIR__ . '/universal_encoder_decoder.bin';
$restoreDir = __DIR__ . '/var/www/encoder/';
$tmpZip = sys_get_temp_dir() . '/restore.zip';
$privateKey = file_get_contents(__DIR__ . '/keys/private.pem');
if (!file_exists($inputFile)) {
die("Backup file not found\n");
}
break;
} }
$board_id = trim(@file_get_contents('/sys/class/dmi/id/board_serial')); $board_id = trim(@file_get_contents('/sys/class/dmi/id/board_serial'));

52
encoder/private.pem Normal file
View File

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
oo7uGCyxw179QUUzXs18xVnordQGvA==
-----END PRIVATE KEY-----

14
encoder/public.pem Normal file
View File

@ -0,0 +1,14 @@
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmkrmuGyijJ/IV86B/Gnx
lI3QHeVriwWZPF+C/fC8TDeHz3MuzcDj5RG+iVDZwXK27TmGwPvmzrl4aCzDSz0C
YV6Uj1dgXcrvbbQ2dx0hIk5fGmrkIsTXnNi8QWl3VZfQabT2D8vTBNLjEZZP0WYF
JkB7OvjZmUtNjC1B9R/ITloHLHteTFy3W+WUUsKrI7C57gCnsq2422HQG147/YUE
UDHhcHyP3Qcj879U2eQmySfIUTuLp81ywseV01X8hW4WgoQgCYt9hQmUlsLTxCF9
/1cbv0ngDt2fD0nQxDz4qxVGJBFfiQd5t07NHbGAhaO/Ek2vyoZjJBhLQHSvj3ts
1nfGeXC4Ngx7UETsiyfohl++u5DzgdOD5RvqyUw2BzmQQDICr+A8YgzESoUTReJd
wg4irZwN+Wrum47loIrHk34ELkbibfRiu7Zzfq+kXFD0VbNWLP9RLyQy3eHvVQIm
a2hC5xaaxNzf6Idxek1Q01K/2wmPvkRiwhBTmOYlEP+BZyRzjWxWEXWGvIGtoH2W
APl9sdurYXZ9K46I+TqZeSvwEO5ew2M9lSYxvmU2AFdGOxa2/RwxLKGWt/6Kg5Ww
e45Ord2W8TfS6QzgyE6n4nfIS5VEZthfblv8FOBlVnNA9J52Z2qFzy9JwG0FmbsK
StOkIiCMQyrPzLCEH2iJTSsCAwEAAQ==
-----END PUBLIC KEY-----