Explorar el Código

- add support src-port for filters

Dmitriev Roman hace 4 años
padre
commit
35c332bcb5

+ 4 - 1
html/admin/filters/editfilter.php

@@ -8,6 +8,7 @@ if (isset($_POST["editfilter"])) {
     $new['dst'] = $_POST["f_dst"];
     $new['proto'] = $_POST["f_proto"];
     $new['dstport'] = str_replace(':', '-', $_POST["f_dstport"]);
+    $new['srcport'] = str_replace(':', '-', $_POST["f_srcport"]);
     $new['action'] = $_POST["f_action"] * 1;
     update_record($db_link, "Filter_list", "id='$id'", $new);
     unset($_POST);
@@ -30,13 +31,15 @@ if (isset($filter['type']) and $filter['type'] == 0) {
     print "<tr><td><b>Имя</b></td>";
     print "<td ><b>Протокол</b></td>";
     print "<td ><b>Адрес назначения</b></td>";
-    print "<td ><b>Порт</b></td>";
+    print "<td ><b>Порт назначения</b></td>";
+    print "<td ><b>Порт источник</b></td>";
     print "<td ><b>Действие</b></td>";
 
     print "</tr><td align=left><input type=text name=f_name value=".$filter['name']."></td>";
     print "<td ><input type=text name=f_proto value=".$filter['proto']."></td>";
     print "<td ><input type=text name=f_dst value=".$filter['dst']."></td>";
     print "<td ><input type=text name=f_dstport value=".$filter['dstport']."></td>";
+    print "<td ><input type=text name=f_srcport value=".$filter['srcport']."></td>";
     print "<td>";
     print_action_select('f_action', $filter['action']);
     print "</td></tr>";

+ 24 - 5
scripts/sync_mikrotik.pl

@@ -367,7 +367,8 @@ foreach my $row (@filterlist_ref) {
 $filters{$row->{id}}->{id}=$row->{id};
 $filters{$row->{id}}->{proto}=$row->{proto};
 $filters{$row->{id}}->{dst}=$row->{dst};
-$filters{$row->{id}}->{port}=$row->{dstport};
+$filters{$row->{id}}->{dstport}=$row->{dstport};
+$filters{$row->{id}}->{srcport}=$row->{srcport};
 $filters{$row->{id}}->{action}=$row->{action};
 }
 
@@ -469,6 +470,7 @@ foreach my $filter_index (sort keys %{$group_filters{$group_name}}) {
     next if (!$filters{$filter_id});
     my $src_rule='chain='.$group_name;
     my $dst_rule='chain='.$group_name;
+
     if ($filters{$filter_id}->{action}) {
 	$src_rule=$src_rule." action=accept";
 	$dst_rule=$dst_rule." action=accept";
@@ -476,18 +478,35 @@ foreach my $filter_index (sort keys %{$group_filters{$group_name}}) {
 	$src_rule=$src_rule." action=reject";
 	$dst_rule=$dst_rule." action=reject";
 	}
+
     if ($filters{$filter_id}->{proto} and ($filters{$filter_id}->{proto}!~/all/i)) {
 	$src_rule=$src_rule." protocol=".$filters{$filter_id}->{proto};
 	$dst_rule=$dst_rule." protocol=".$filters{$filter_id}->{proto};
 	}
+
     if ($filters{$filter_id}->{dst} and $filters{$filter_id}->{dst} ne '0/0') {
 	$src_rule=$src_rule." src-address=".trim($filters{$filter_id}->{dst});
 	$dst_rule=$dst_rule." dst-address=".trim($filters{$filter_id}->{dst});
 	}
-    if ($filters{$filter_id}->{port} and $filters{$filter_id}->{port} ne '0') {
-	$src_rule=$src_rule." src-port=".trim($filters{$filter_id}->{port});
-	$dst_rule=$dst_rule." dst-port=".trim($filters{$filter_id}->{port});
-	}
+
+    #dstport and srcport
+    if (!$filters{$filter_id}->{dstport}) { $filters{$filter_id}->{dstport}=0; }
+    if (!$filters{$filter_id}->{srcport}) { $filters{$filter_id}->{srcport}=0; }
+
+    if ($filters{$filter_id}->{dstport} ne '0' and $filters{$filter_id}->{srcport} ne '0') {
+		$src_rule=$src_rule." dst-port=".trim($filters{$filter_id}->{srcport})." src-port=".trim($filters{$filter_id}->{dstport});
+		$dst_rule=$dst_rule." src-port=".trim($filters{$filter_id}->{srcport})." dst-port=".trim($filters{$filter_id}->{dstport});
+		}
+
+    if ($filters{$filter_id}->{dstport} eq '0' and $filters{$filter_id}->{srcport} ne '0') {
+		$src_rule=$src_rule." dst-port=".trim($filters{$filter_id}->{srcport});
+		$dst_rule=$dst_rule." src-port=".trim($filters{$filter_id}->{srcport});
+		}
+
+    if ($filters{$filter_id}->{dstport} ne '0' and $filters{$filter_id}->{srcport} eq '0') {
+		$src_rule=$src_rule." src-port=".trim($filters{$filter_id}->{dstport});
+		$dst_rule=$dst_rule." dst-port=".trim($filters{$filter_id}->{dstport});
+		}
 
     if ($src_rule ne $dst_rule) {
         push(@{$chain_rules{$group_name}},$src_rule);

+ 1 - 0
updates/20220301/mysql-patch-filters.sql

@@ -0,0 +1 @@
+ALTER TABLE `Filter_list` ADD `srcport` `srcport` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL AFTER `dstport`;