Enabling DNSSEC for a Domain in Bind9
Home > Security tips > Enabling DNSSEC for a Domain in Bind9
Installing and Configuring BIND9 with DNSSEC
1. Install BIND9 and DNS Utilities
At a terminal prompt, run the following command to install the bind9 package:
sudo apt install bind9
A useful package for testing and troubleshooting DNS issues is the dnsutils package. Very often these tools will be installed already, but to check and/or install dnsutils enter:
sudo apt install dnsutils
2. Set Up a Caching Nameserver
Uncomment and edit /etc/bind/named.conf.options to set the IP addresses of your ISP’s DNS servers:
Example configuration block:
forwarders { 1.2.3.4; 5.6.7.8; };
3. Restart BIND9 Service
To enable the new configuration, restart the DNS server:
sudo systemctl restart bind9.service
4. Create Forward Zone File
To add a DNS zone to BIND9, first edit /etc/bind/named.conf.local:
zone "example.com" { type master; file "/etc/bind/db.example.com"; };
5. Create the Zone File
Use an existing zone file as a template to create /etc/bind/db.example.com:
mkdir /etc/bind/zones chown -R root:bind /etc/bind/zones/ sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com
Edit /etc/bind/zones/db.example.com and make the following changes: - Replace localhost. with the FQDN of your server (with a trailing dot). - Replace 127.0.0.1 with the nameserver’s IP address. - Replace root.localhost with a valid email address, using a dot instead of @ (with a trailing dot). - Update the comment to indicate the correct domain.
Example zone configuration:
; ; BIND data file for example.com ; $TTL 604800 @ IN SOA example.com. root.example.com. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns.example.com. @ IN A 192.168.1.10 @ IN AAAA ::1 ns IN A 192.168.1.10
6. Restart BIND9 After Changes
sudo systemctl restart bind9.service
Enabling DNSSEC on Your Own DNS Server
Step 1: Generate DNSSEC Keys
- Zone Signing Key (ZSK): Signs all zone records. - Key Signing Key (KSK): Signs the DNSKEY record set.
Example commands (run in your zone directory):
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE yourdomain.com dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n ZONE yourdomain.com
Step 2: Add Public Keys to Your Zone File
Insert $INCLUDE statements for the ``.key`` files after the SOA and NS records in your zone file:
$INCLUDE Kyourdomain.com.+008+12345.key ; KSK $INCLUDE Kyourdomain.com.+008+67890.key ; ZSK
Step 3: Sign the Zone
Use the dnssec-signzone command:
dnssec-signzone -o yourdomain.com -k Kyourdomain.com.+008+12345 yourdomain.com.zone Kyourdomain.com.+008+67890
This creates a signed zone file (e.g., yourdomain.com.zone.signed).
Step 4: Update DNS Server Configuration
Point your DNS server to the signed zone file:
zone "yourdomain.com" { type master; file "/etc/bind/yourdomain.com.zone.signed"; };
Reload or restart your DNS server after the update.
Verifying DNSSEC is Enabled
To check for DNSSEC signatures, run:
dig +dnssec yourdomain.com
Look for RRSIG records in the answer section.
Alternatively, you can use online tools such as: - DNSViz - Verisign DNSSEC Analyzer
to confirm DNSSEC is active.
Home > Security tips > Enabling DNSSEC for a Domain in Bind9