index.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. error_reporting(NULL);
  3. ob_start();
  4. $TAB = 'FIREWALL';
  5. // Main include
  6. include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
  7. // Check user
  8. if ($_SESSION['user'] != 'admin') {
  9. header("Location: /list/user");
  10. exit;
  11. }
  12. // Get ipset lists
  13. exec (HESTIA_CMD."v-list-firewall-ipset 'json'", $output, $return_var);
  14. check_return_code($return_var,$output);
  15. $data = json_decode(implode('', $output), true);
  16. $ipset_lists=[];
  17. foreach($data as $key => $value) {
  18. if(isset($value['SUSPENDED']) && $value['SUSPENDED'] === 'yes') {
  19. continue;
  20. }
  21. if(isset($value['IP_VERSION']) && $value['IP_VERSION'] !== 'v4') {
  22. continue;
  23. }
  24. array_push($ipset_lists, ['name'=>$key]);
  25. }
  26. $ipset_lists_json=json_encode($ipset_lists);
  27. // Check POST request
  28. if (!empty($_POST['ok'])) {
  29. // Check token
  30. if ((!isset($_POST['token'])) || ($_SESSION['token'] != $_POST['token'])) {
  31. header('location: /login/');
  32. exit();
  33. }
  34. // Check empty fields
  35. if (empty($_POST['v_action'])) $errors[] = _('action');
  36. if (empty($_POST['v_protocol'])) $errors[] = _('protocol');
  37. if (!isset($_POST['v_port'])) $errors[] = _('port');
  38. if (empty($_POST['v_ip'])) $errors[] = _('ip address');
  39. if (!empty($errors[0])) {
  40. foreach ($errors as $i => $error) {
  41. if ( $i == 0 ) {
  42. $error_msg = $error;
  43. } else {
  44. $error_msg = $error_msg.", ".$error;
  45. }
  46. }
  47. $_SESSION['error_msg'] = sprintf(_('Field "%s" can not be blank.'),$error_msg);
  48. }
  49. // Protect input
  50. $v_action = escapeshellarg($_POST['v_action']);
  51. $v_protocol = escapeshellarg($_POST['v_protocol']);
  52. $v_port = str_replace(" ",",", $_POST['v_port']);
  53. $v_port = preg_replace('/\,+/', ',', $v_port);
  54. $v_port = trim($v_port, ",");
  55. $v_port = escapeshellarg($v_port);
  56. $v_ip = escapeshellarg($_POST['v_ip']);
  57. $v_comment = escapeshellarg($_POST['v_comment']);
  58. // Add firewall rule
  59. if (empty($_SESSION['error_msg'])) {
  60. exec (HESTIA_CMD."v-add-firewall-rule ".$v_action." ".$v_ip." ".$v_port." ".$v_protocol." ".$v_comment, $output, $return_var);
  61. check_return_code($return_var,$output);
  62. unset($output);
  63. }
  64. // Flush field values on success
  65. if (empty($_SESSION['error_msg'])) {
  66. $_SESSION['ok_msg'] = _('RULE_CREATED_OK');
  67. unset($v_port);
  68. unset($v_ip);
  69. unset($v_comment);
  70. }
  71. }
  72. // Render
  73. render_page($user, $TAB, 'add_firewall');
  74. // Flush session messages
  75. unset($_SESSION['error_msg']);
  76. unset($_SESSION['ok_msg']);