DNS-Server bind
Als DNS nutzen wir bind in einer möglichst aktuellen Version, da immer wieder Sicherheitslücken bekannt werden, die teilweise sehr prekär sind.
root@krypton:~ > named -v
BIND 9.2.0rc1
Die Datei /etc/hosts kann leer bleiben. In /etc/resolv.conf sind die folgenden Einträge nötig, damit der DNS auch befragt wird. Der Search-Parameter bewirkt, dass bei einer Anfrage an host nach host.laas.priv gesucht wird.
root@krypton:~ > cat /etc/resolv.conf
domain laas.priv
search laas.priv
nameserver 192.168.0.1
In /etc/host.conf ist folgendes einzutragen. Damit wird nur der Nameserver befragt.
order bind
multi on
Der Hauptteil der Konfiguration findet in /etc/named/named.conf statt. Beispielhaft meine Konfiguration.
#/etc/named/named.conf
# predefined access control lists (acl):
# "any" allows all hosts
# "none" denies all hosts
# "localhost" allows the IP adresses of all interfaces of the system
# "localnets" allows any host on a network of the local interfaces
#
# defining an additional ACL:
acl "trusted" {
127.0.0.1/32;
192.168.0.0/16;
};
#never allow requests from these hosts
acl "bogon" {
0.0.0.0/8;
1.0.0.0/8; #IANA reserved
2.0.0.0/8; #IANA reserved
192.0.2.0/24; #test addresses
224.0.0.0/3; #multicast addresses
10.0.0.0/8; #here not used private network
172.16.0.0/12; #here not used private network
};
options {
directory "/etc/named";
# the default is to fail, if the master file is not correct
#check-names master ignore;
pid-file "/var/run/named.pid";
# the default is to ask the forwarders and if they fail
# try to find the answer yourself, this will only ask the forwarders
# forward only;
# list of DNS servers to ask
# forward first;
forwarders {
#T-Online
194.25.0.125;
194.25.2.129;
194.25.2.130;
194.25.2.131;
#Nexgo
145.253.2.11;
145.253.2.75;
#TUB
130.149.17.5;
130.149.17.13;
#Arcor???
#212.185.151.9;
};
# the default is to listen on port 53 on all available interfaces
# you can also give a detailed list:
listen-on port 5353 {
127.0.0.1;
192.168.0.1;
192.168.1.1;
};
#allow only queries from trusted hosts
allow-query {
"trusted";
};
allow-recursion {
"trusted";
};
allow-transfer {
"trusted";
};
blackhole {
bogon; #ignore requests from these hosts
};
};
#log every query in "/var/log/named"
logging {
channel mychannel {
file "/var/log/named";
severity info;
print-time yes;
};
category security {
mychannel;
};
category queries {
mychannel;
};
};
#definitions of the zones, the ".", "localhost", and "0.0.127.in-addr.arpa" zones has to be defined everytime
#note the reverse notation of the network addresses
zone "." {
type hint;
file "root.hint";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
#assign every name an ip number
zone "laas.priv" {
type master;
file "pz/laas.priv";
};
#and twice versa (reverse dns)
zone "0.168.192.in-addr.arpa" {
type master;
file "pz/192.168.0";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "pz/192.168.1";
};
Jetzt definieren wir noch die einzelnen Zonen. Jede Zone wird in zwei Dateien festgelegt, die in /etc/name/pz residieren. Die /etc/named/pz/127.0.0 ist immer zu anzugeben. Beispielhaft ist meine Einstellung für die Zone laas.priv /etc/named/pz/laas.priv aufgeführt.
$ORIGIN .
$TTL 86400; 1 day
laas.priv IN SOA www root.localhost (
12 ; serial
86400 ; refresh (1 day)
600 ; retry (10 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns
HINFO "Pentium Celeron 700 Coppermine" "Linux 2.4.20"
MX 10 mail
TXT "ns.laas.priv, my own DNS-Server"
$ORIGIN laas.priv.
ftp A 192.168.0.1
krypton A 192.168.0.1
mail A 192.168.0.1
news A 192.168.0.1
ns A 192.168.0.1
proxy A 192.168.0.1
test A 192.168.1.1
www A 192.168.0.1
mig A 192.168.0.2
mutter A 192.168.0.2
xenon A 192.168.0.3
Die erste Zeile dient dazu, dem named zu sagen, wie lange er die Anfragen in seinem Zwischenspeicher halten soll. Der anschließende Block legt fest, dass der Nameserver www.laas.priv und der Administrator unter root@krypton.laas.priv zu erreichen sind. Der Punkt am Ende der Namen bedeutet, dass die Domäne laas.priv nicht noch an den String angehängt wird. IN SOA bedeutet Internet Start of Authority. NS steht für Nameserver. Wir sind selbst unser Nameserver. Die letzten Zeilen definieren die Rechner in dieser Domäne. mig A 192.168.0.2 legt fest, dass der Rechner mig.laas.priv unter der IP-Adresse 192.168.0.2 bekannt ist.
Nun haben wir die Auflösung von Namen in IP-Adressen realisiert. Andersherum passiert das in der Datei /etc/named/pz/192.168.0.
Nun startet root den Nameserver testweise mit
su -u named -c named
Um zu überprüfen, ob wir alles korrekt gemacht haben, starten wir eine Anfrage: Da ich den DNS-Server unter einem weniger privilegierten Nutzer laufen lasse, kann ich den Standardport 53 leider nicht verwenden. Um diese Konfiguration zu überprüfen, muss entweder der bind als Root mit Port 53 gestartet werden, oder mit einer Firewall alle Anfragen auf Port 53 auf Port 5353 umgelenkt werden.
laas@krypton:~ > host www
www.laas.priv has address 192.168.0.1
laas@krypton:~ > dig www.laas.priv
; <<>> DiG 9.2.0 <<>> www.laas.priv
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47205
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.laas.priv. IN A
;; ANSWER SECTION:
www.laas.priv. 86400 IN A 192.168.0.1
;; AUTHORITY SECTION:
laas.priv. 86400 IN NS ns.
;; Query time: 6 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Jun 25 23:48:08 2002
;; MSG SIZE rcvd: 61
Nun haben wir einen Nameserver, der zusätzlich noch alle erfolgreichen Anfragen zwischenspeichert. D.h. wenn wir im Internet sind, so wird die erste Anfrage an einen Nameserver weitergeleitet, der in unserer forward-Liste steht. Die nächsten Anfragen werden direkt von unserem Server beantwortet. Leider wird bei jedem Neustart des Servers bzw. nach jeder Stunde der Cache geleert. Abhilfe würde hier der Name-Server-Cache-Dämon, kurz NSCD, schaffen.