dns/bind: allow signed zone transfers (#2599)

This commit is contained in:
Michael Newton
2021-11-29 08:42:25 +01:00
committed by GitHub
parent 07222909ad
commit 892f140409
4 changed files with 63 additions and 1 deletions
@@ -42,6 +42,18 @@
<allownew>true</allownew>
<help>Set the IP address of master server when using slave mode.</help>
</field>
<field>
<id>domain.transferkeyalgo</id>
<label>Transfer Key Algorithm</label>
<type>dropdown</type>
<help>Set the authentication algorithm for the TSIG key.</help>
</field>
<field>
<id>domain.transferkey</id>
<label>Transfer Key</label>
<type>text</type>
<help>The TSIG key used to transfer domain data from the master server.</help>
</field>
<field>
<id>domain.allownotifyslave</id>
<label>Allow Notfiy</label>
@@ -22,6 +22,21 @@
<FieldSeparator>,</FieldSeparator>
<asList>Y</asList>
</masterip>
<transferkeyalgo type="OptionField">
<Required>N</Required>
<OptionValues>
<hmac-sha512>HMAC-SHA512</hmac-sha512>
<hmac-sha384>HMAC-SHA384</hmac-sha384>
<hmac-sha256>HMAC-SHA256</hmac-sha256>
<hmac-sha224>HMAC-SHA224</hmac-sha224>
<hmac-sha1>HMAC-SHA1</hmac-sha1>
<hmac-md5>HMAC-MD5</hmac-md5>
</OptionValues>
</transferkeyalgo>
<transferkey type="TextField">
<Required>N</Required>
<default></default>
</transferkey>
<allownotifyslave type="NetworkField">
<Required>N</Required>
<FieldSeparator>,</FieldSeparator>
@@ -275,6 +275,14 @@ $( document ).ready(function() {
});
});
$('#domain\\.transferkeyalgo').on('change', function(e) {
if (e.target.selectedIndex === 0) {
$('#domain\\.transferkey').val('').attr('readonly', true);
} else {
$('#domain\\.transferkey').attr('readonly', false);
}
});
// Hide options that are irrelevant in this context.
$('#dialogEditBindDomain').on('shown.bs.modal', function (e) {
$("#domain\\.type").change(function(){
@@ -135,7 +135,34 @@ zone "rpzbing" { type master; file "/usr/local/etc/namedb/master/bing.db"; notif
{% 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 == 'slave' %}masters { {{ domain.masterip.replace(',', '; ') }}; }; {% if domain.allownotifyslave is defined %} allow-notify { {{ domain.allownotifyslave.replace(',', '; ') }}; };{% endif %} file "/usr/local/etc/namedb/slave/{{ domain.domainname }}.db"; {% else %}file "/usr/local/etc/namedb/master/{{ 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 %} };
zone "{{ domain.domainname }}" {
type {{ domain.type }};
{% if domain.type == 'slave' %}
masters { {{ domain.masterip.replace(',', '; ') }}; };
{% if domain.allownotifyslave is defined %}
allow-notify { {{ domain.allownotifyslave.replace(',', '; ') }}; };
{% endif %}
file "/usr/local/etc/namedb/slave/{{ domain.domainname }}.db";
{% else %}
file "/usr/local/etc/namedb/master/{{ 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.type == 'slave' and domain.transferkey is defined %}
{% set key_name = 'tsig-transferkey-' ~ domain.domainname.replace('.', '-') %}
key "{{ key_name }}" {
algorithm "{{ domain.transferkeyalgo }}";
secret "{{ domain.transferkey }}";
};
server {{ domain.masterip }} {
keys { "{{ key_name }}" };
};
{% endif %}
{% endif %}
{% endfor %}
{% endif %}