Install Bind as an authoritative DNS server
Install
# apt install bind9
Configure
Warning: | This page is a work in progress and is not completed. Important informations might be missing or wrong. |
Hide version
Version might be useful to an attacker that is searching known vulnerabilities on your server. Let’s make its life more difficult by hiding it.
Note that it is not an excuse to run old vulnerable software. The goal is just to slow down attacker in case of newly published security exploit, so you have enough time to update before getting pwned.
To prevent the version being returned edit the file /etc/bind/named.conf.options
and add the version line
options {
version "";
}
Response Rate Limiting (RRL)
DNS servers can be abused to perform DoS attacks on other innocent victims. This are several issues for that
- attacker will waste your bandwidth while attacking other servers
- you are seen by the victim as the source of the attack. You can then appear in blacklists which will be an issue for you
- you are making DoS attacks easier for the attackers and contribute to the problem
For more details, read the quick introduction to response rate limiting from ISC (Bind author).
Rate limiting allows to render such attacks ineffective while still answering legitimate responses. To enable this, add the block rate-limit
in file /etc/bind/named.conf.options
options {
rate-limit {
responses-per-second 10;
exempt-clients { 127.0.0.1; ::1; };
};
}
Listen on public IP
By default, Bind will only reply to queries from localhost. To use it as an authoritative server, you must make it listen on a public IP. Once again the file to modify is /etc/bind/named.conf.options
options {
listen-on { any; };
listen-on-v6 { any; };
allow-recursion { 127.0.0.1; ::1; };
}
The 3 options to modify are (these should already be there in the file):
listen-on
: List of IPv4 addresses to listen on.any;
means all. Otherwise you can list IPs:listen-on { 203.0.113.23; 127.0.0.1; }
listen-on-v6
: Same as above for IPv6 addressesallow-recursion
: IPs to witch the server will reply to recursive queries (when it need to contact other severs to get the response). This must never contain any public IP.
Firewall
Bind will listen on port 53, on both TCP and UDP.Assuming that you configured nftables as described, you can edit file /etc/nftables/main_config.conf
and add
# Bind
add element inet main tcp_port_in { 53 }
add element inet main udp_port_in { 53 }
and activate it using
$ sudo /etc/nftables/reload_main.conf