DNSSEC is ... Quote from Wikipedia article about DNSSEC:
The Domain Name System Security Extensions (DNSSEC) is a suite of IETF specifications for securing certain kinds of information provided by the DNS as used on IP networks.
It is a set of extensions to DNS which provide to DNS clients (resolvers) origin authentication of DNS data, authenticated denial of existence, and data integrity, but not availability or confidentiality.
References:
DNSSEC
Use automatic zone signing from BIND 9 (so-called
inline-signing
).
Store signing keys in LDAP DB so all IPA DNS servers can share them.
Use OpenDNSSEC or other existing solution for key rotation.
Blue components are controlled by us.
Bind-dyndb-ldap has to mimic DB API precisely otherwise signing will not work as expected.
This design document describes only very basic functionality where a DNS zone is signed with provided signing keys. Those keys need to be generated and periodically rotated.
We will work on key management and automatic rotation in two phases:
To Be Done: See links above for for schema requirements.
LDAP schema should be forward-compatible so migration from short-term to long-term solution will not require changes in LDAP schema and data migration.
idnsSecInlineSigning
:FALSE
=> DNS zone does not support DNSSEC.
Unsigned data are stored in in-memory DB managed by
bind-dyndb-ldap
(blue box in the diagram).TRUE
=> in-line signing is enabled. bind-dyndb-ldap
will
instruct BIND to create new in-memory database for signed data
(black box in the diagram) and to do internal zone transfers from
database with unsigned data (managed by bind-dyndb-ldap
).cn=DNSSEC,cn=vm.example.com,cn=masters,cn=ipa,cn=etc,dc=ipa,dc=example
object in LDAP:ipaConfigString: version 1
ipaConfigString: keygenerator
This will enable upgrade scripts to detect if some old replicas are still in the topology or not. See discussion on freeipa-devel list.
Additional requirements and changes discovered during the implementation phase:
IXFR
zone transfer from unsigned to
signed zone (internally inside BIND process). Bind-dyndb-ldap has to
implement full support for IXFR. See ticket
#64.journal
, i.e.
write-access to file system is required.In initial phase, user has to have an interface for enabling and disabling DNSSEC for particular DNS zone. This can be one boolean attribute for CLI and one check-box for WebUI. More complex management will be described as part of DNSSEC Longterm Key Rotation
$ ipa dnszone-mod example.com. --dnssec=TRUE
$ ipa dnszone-mod example.com. --dnssec=FALSE
Nothing for DNSSEC signing itself. DNSSEC Longterm Key Rotation will use replication for coordination among DNS masters.
DNSSEC feature will enabled by new attribute. Old replicas will serve unsigned zones without any change.
Nothing for DNSSEC signing itself. Key management mechanism may require new packages, see detailed plans linked above.
Key management mechanism will require coordination with FreeIPA/SSSD/certmonger team - we will probably need an mechanism for rotating keys on client side. This will be very handy for:
example.com.
is purely internal signed domain and
com.
domain does not publish public keys used for signing.Test scenarios that will be transformed to test cases for FreeIPA Continuous Integration during implementation or review phase.
Generate signing keys
$ dnssec-keygen -3 -b 2048 -f KSK dnssec.test
$ dnssec-keygen -3 -b 1024 -f KSK dnssec.test
Copy keys into /var/named/dyndb-ldap/ipa/dnssec.test/keys/
Create a signed zone
idnsSecInlingSigning
attribute to TRUE
Do zone transfer and store the result in a file:
$ dig @127.0.0.1 -t AXFR dnssec.test. > dnssec.test.db
Verify that signatures in the zone are correct:
$ ldns-verify-zone -S -k Kdnssec.test.+007+12345.key -k Kdnssec.test.+007+23456.key dnssec.test.db
Petr Spacek <pspacek@…>