dns/bind: allow multiple acls (#3257)

This commit is contained in:
Robbert Rijkse
2023-01-11 13:35:30 +01:00
committed by GitHub
parent b67a1d49bf
commit 97e46ed32c
7 changed files with 72 additions and 32 deletions
+2
View File
@@ -11,7 +11,9 @@ Plugin Changelog
1.26
* Allow multiple ACLs to be selected for Transfers/Queries (contributed by Robbert Rijkse)
* Rename Master/Slave to Primary/Secondary (contributed by Robbert Rijkse)
* Add PR record type (contributed by Robbert Rijkse)
1.25
@@ -14,14 +14,14 @@
<field>
<id>domain.allowtransfer</id>
<label>Allow Transfer</label>
<type>dropdown</type>
<help>Define an ACL where you allow which server can retrieve this zone.</help>
<type>select_multiple</type>
<help>Define the ACLs where you allow which server can retrieve this zone.</help>
</field>
<field>
<id>domain.allowquery</id>
<label>Allow Query</label>
<type>dropdown</type>
<help>Define an ACL where you allow which client are allowed to query this zone.</help>
<type>select_multiple</type>
<help>Define the ACLs where you allow which client are allowed to query this zone.</help>
</field>
<field>
<id>domain.ttl</id>
@@ -14,14 +14,14 @@
<field>
<id>domain.allowtransfer</id>
<label>Allow Transfer</label>
<type>dropdown</type>
<help>Define an ACL where you allow which server can retrieve this zone.</help>
<type>select_multiple</type>
<help>Define the ACLs where you allow which server can retrieve this zone.</help>
</field>
<field>
<id>domain.allowquery</id>
<label>Allow Query</label>
<type>dropdown</type>
<help>Define an ACL where you allow which client are allowed to query this zone.</help>
<type>select_multiple</type>
<help>Define the ACLs where you allow which client are allowed to query this zone.</help>
</field>
<field>
<id>domain.primaryip</id>
@@ -110,8 +110,14 @@
<field>
<id>general.allowtransfer</id>
<label>Allow Transfer</label>
<type>dropdown</type>
<help>Define an ACL where you allow which server can retrieve zones.</help>
<type>select_multiple</type>
<help>Define the ACLs where you allow which server can retrieve zones.</help>
</field>
<field>
<id>general.allowquery</id>
<label>Allow Query</label>
<type>select_multiple</type>
<help>Define the ACLs where you allow which client are allowed to query this server.</help>
</field>
<field>
<id>general.dnssecvalidation</id>
@@ -1,7 +1,7 @@
<model>
<mount>//OPNsense/bind/domain</mount>
<description>BIND domain configuration</description>
<version>1.1.0</version>
<version>1.1.1</version>
<items>
<domains>
<domain type="ArrayField">
@@ -58,7 +58,7 @@
<display>name</display>
</template>
</Model>
<Multiple>N</Multiple>
<Multiple>Y</Multiple>
<Required>N</Required>
</allowtransfer>
<allowquery type="ModelRelationField">
@@ -69,7 +69,7 @@
<display>name</display>
</template>
</Model>
<Multiple>N</Multiple>
<Multiple>Y</Multiple>
<Required>N</Required>
</allowquery>
<serial type="TextField">
@@ -1,7 +1,7 @@
<model>
<mount>//OPNsense/bind/general</mount>
<description>BIND configuration</description>
<version>1.0.9</version>
<version>1.0.10</version>
<items>
<enabled type="BooleanField">
<default>0</default>
@@ -91,7 +91,7 @@
<display>name</display>
</template>
</Model>
<Multiple>N</Multiple>
<Multiple>Y</Multiple>
<Required>N</Required>
<ValidationMessage>Choose an ACL.</ValidationMessage>
</recursion>
@@ -103,9 +103,20 @@
<display>name</display>
</template>
</Model>
<Multiple>N</Multiple>
<Multiple>Y</Multiple>
<Required>N</Required>
</allowtransfer>
<allowquery type="ModelRelationField">
<Model>
<template>
<source>OPNsense.Bind.Acl</source>
<items>acls.acl</items>
<display>name</display>
</template>
</Model>
<Multiple>Y</Multiple>
<Required>N</Required>
</allowquery>
<dnssecvalidation type="OptionField">
<OptionValues>
<no>No</no>
@@ -47,18 +47,31 @@ options {
{% endif %}
{% if helpers.exists('OPNsense.bind.general.recursion') and OPNsense.bind.general.recursion != '' %}
{% for list in helpers.toList('OPNsense.bind.general.recursion') %}
{% set recursionlist = helpers.getUUID(list) %}
recursion yes;
allow-recursion { {{ recursionlist.name }}; };
{% endfor %}
allow-recursion {
{% for acl in helpers.toList('OPNsense.bind.general.recursion') %}
{% set recursion_acl = helpers.getUUID(acl) %}
{{ recursion_acl.name }};
{% endfor %}
};
{% endif %}
{% if helpers.exists('OPNsense.bind.general.allowtransfer') and OPNsense.bind.general.allowtransfer != '' %}
{% for list in helpers.toList('OPNsense.bind.general.allowtransfer') %}
{% set allowtransfer = helpers.getUUID(list) %}
allow-transfer { {{ allowtransfer.name }}; };
{% endfor %}
allow-transfer {
{% for acl in helpers.toList('OPNsense.bind.general.allowtransfer') %}
{% set transfer_acl = helpers.getUUID(acl) %}
{{ transfer_acl.name }};
{% endfor %}
};
{% endif %}
{% if helpers.exists('OPNsense.bind.general.allowquery') and OPNsense.bind.general.allowquery != '' %}
allow-query {
{% for acl in helpers.toList('OPNsense.bind.general.allowquery') %}
{% set query_acl = helpers.getUUID(list) %}
{{ query_acl.name }};
{% endfor %}
};
{% endif %}
{% if helpers.exists('OPNsense.bind.general.maxcachesize') and OPNsense.bind.general.maxcachesize != '' %}
@@ -136,8 +149,6 @@ zone "rpzbing" { type primary; file "/usr/local/etc/namedb/primary/bing.db"; not
{% set usedkeys = [] %}
{% for domain in helpers.toList('OPNsense.bind.domain.domains.domain') %}
{% if domain.enabled == '1' %}
{% set allow_transfer = helpers.getUUID(domain.allowtransfer) %}
{% set allow_query = helpers.getUUID(domain.allowquery) %}
zone "{{ domain.domainname }}" {
type {{ domain.type }};
{% if domain.type == 'secondary' %}
@@ -153,12 +164,22 @@ zone "{{ domain.domainname }}" {
{% else %}
file "/usr/local/etc/namedb/primary/{{ domain.domainname }}.db";
{% endif %}
{% if domain.allowtransfer is defined %}
allow-transfer { {{ allow_transfer.name }}; };
{% endif %}
{% if domain.allowquery is defined %}
allow-query { {{ allow_query.name }}; };
{% endif %}
{% if domain.allowtransfer is defined %}
allow-transfer {
{% for acl in domain.allowtransfer.split(',') %}
{% set transfer_acl = helpers.getUUID(acl) %}
{{ transfer_acl.name }};
{% endfor %}
};
{% endif %}
{% if domain.allowquery is defined %}
allow-query {
{% for acl in domain.allowquery.split(',') %}
{% set query_acl = helpers.getUUID(acl) %}
{{ query_acl.name }};
{% endfor %}
};
{% endif %}
};
{% if domain.type == 'secondary' and domain.transferkey is defined and not(domain.transferkeyname in usedkeys) %}
{% do usedkeys.append(domain.transferkeyname) %}