192 lines
5.4 KiB
JSON
192 lines
5.4 KiB
JSON
{
|
|
"client_requirement": "client_is_viewer+",
|
|
"items": [
|
|
{
|
|
"type": "header_page_title",
|
|
"items": [
|
|
{
|
|
"type": "h1",
|
|
"text": "Inter-VLAN Exceptions"
|
|
},
|
|
{
|
|
"type": "p",
|
|
"text": "Firewall rules that permit specific traffic to cross VLAN boundaries."
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "table",
|
|
"datasource": "config:inter_vlan_exceptions",
|
|
"empty_message": "No inter-VLAN exceptions configured. All cross-VLAN traffic is blocked by default.",
|
|
"columns": [
|
|
{
|
|
"label": "Description",
|
|
"field": "description"
|
|
},
|
|
{
|
|
"label": "Protocol",
|
|
"field": "protocol",
|
|
"class": "col-mono col-narrow"
|
|
},
|
|
{
|
|
"label": "Source",
|
|
"field": "src_ip_or_subnet",
|
|
"class": "col-mono"
|
|
},
|
|
{
|
|
"label": "Destination",
|
|
"field": "dst_ip_or_subnet",
|
|
"class": "col-mono"
|
|
},
|
|
{
|
|
"label": "Port Min",
|
|
"field": "dst_port_min",
|
|
"class": "col-mono col-narrow"
|
|
},
|
|
{
|
|
"label": "Port Max",
|
|
"field": "dst_port_max",
|
|
"class": "col-mono col-narrow"
|
|
},
|
|
{
|
|
"label": "Status",
|
|
"field": "enabled",
|
|
"render": "badge_enabled_disabled"
|
|
}
|
|
],
|
|
"row_actions": [
|
|
{
|
|
"client_requirement": "client_is_administrator+",
|
|
"action": "/action/intervlan/table_edit",
|
|
"method": "inline_edit",
|
|
"text": "Edit",
|
|
"class": "btn-ghost btn-sm",
|
|
"fields": [
|
|
{
|
|
"col": "description",
|
|
"input_type": "text"
|
|
},
|
|
{
|
|
"col": "protocol",
|
|
"input_type": "select",
|
|
"options": "%PROTOCOL_OPTIONS%"
|
|
},
|
|
{
|
|
"col": "src_ip_or_subnet",
|
|
"input_type": "text"
|
|
},
|
|
{
|
|
"col": "dst_ip_or_subnet",
|
|
"input_type": "text"
|
|
},
|
|
{
|
|
"col": "dst_port_min",
|
|
"input_type": "number"
|
|
},
|
|
{
|
|
"col": "dst_port_max",
|
|
"input_type": "number"
|
|
},
|
|
{
|
|
"col": "enabled",
|
|
"input_type": "checkbox",
|
|
"checkbox_label": "Enabled"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"client_requirement": "client_is_administrator+",
|
|
"action": "/action/intervlan/table_delete",
|
|
"method": "post",
|
|
"text": "Delete",
|
|
"class": "btn-danger btn-sm"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "card",
|
|
"id": "add-form",
|
|
"label": "Add Exception",
|
|
"client_requirement": "client_is_administrator+",
|
|
"items": [
|
|
{
|
|
"type": "form",
|
|
"action": "/action/intervlan/addexception_add",
|
|
"method": "post",
|
|
"items": [
|
|
{
|
|
"type": "field",
|
|
"label": "Description",
|
|
"name": "description",
|
|
"input_type": "text",
|
|
"placeholder": "e.g. Allow Chromecast"
|
|
},
|
|
{
|
|
"type": "field",
|
|
"label": "Source",
|
|
"name": "src_ip_or_subnet",
|
|
"input_type": "text",
|
|
"validate": "VALIDATION_IPV4_FORMAT|VALIDATION_IPV4_CIDR",
|
|
"placeholder": "e.g. 192.168.20.100 or 192.168.20.0/24",
|
|
"hint": "You may allow either a single device IP or an entire subnet to contact dest."
|
|
},
|
|
{
|
|
"type": "field",
|
|
"label": "Destination",
|
|
"name": "dst_ip_or_subnet",
|
|
"input_type": "text",
|
|
"validate": "VALIDATION_IPV4_FORMAT|VALIDATION_IPV4_CIDR",
|
|
"placeholder": "e.g. 192.168.10.200 or 192.168.10.0/24",
|
|
"hint": "You may allow either a single device IP or an entire subnet to be reached by source."
|
|
},
|
|
{
|
|
"type": "field_row",
|
|
"cols": 3,
|
|
"items": [
|
|
{
|
|
"type": "field",
|
|
"label": "Protocol",
|
|
"name": "protocol",
|
|
"input_type": "select",
|
|
"options": "%PROTOCOL_OPTIONS%"
|
|
},
|
|
{
|
|
"type": "field",
|
|
"label": "Port Min",
|
|
"name": "dst_port_min",
|
|
"input_type": "number",
|
|
"min": 1,
|
|
"max": 65535,
|
|
"hint": "This exception only applies to traffic over this port range and protocol."
|
|
},
|
|
{
|
|
"type": "field",
|
|
"label": "Port Max",
|
|
"name": "dst_port_max",
|
|
"input_type": "number",
|
|
"min": 1,
|
|
"max": 65535
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "button_row",
|
|
"items": [
|
|
{
|
|
"type": "button_primary",
|
|
"action": "/action/intervlan/addexception_add",
|
|
"method": "post",
|
|
"text": "Add Exception"
|
|
},
|
|
{
|
|
"type": "button_cancel",
|
|
"text": "Cancel"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|