|
Przed chwilą spotkałem się z sytuacją, kiedy to właściciel serwera DNS skarżył się na ogromną ilość logów generowaną w krótkim okresie czasu, co doprowadza do niestabilnego działania Binda. Moim podejrzeniem jest, że jego serwer jest używany jako cache dns dla przypadkowych klientów. Poniżej postaram się przedstawić konfigurację serwera DNS (bind 9) obsługującego zarówno domeny (lemat.priv.pl) jak i cache dla sieci lokalnej (za NATem).
Pierwsza rzecz jaką robimy to tworzymy dwa widoki w named.conf - sieć lokalna "internal" i cała reszta "external": view "internal" {
match-clients { 192.168.0.0/24; 127.0.0.0/8; };
allow-query { 192.168.0.0/24; 127.0.0.0/8; };
allow-transfer { none; };
allow-notify { none; };
allow-recursion { 192.168.0.0/24; 127.0.0.0/8; };
recursion yes;
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "named.192.168.0";
};
zone "lemat.priv.pl" {
notify no;
type master;
file "intern.lemat.priv.pl";
};
};
view "external" {
match-clients { any; };
recursion no;
allow-query { none; };
allow-transfer { key "ns1-ns3"; };
allow-notify { key "ns1-ns3"; };
zone "lemat.priv.pl" {
type master;
notify yes;
file "extern.lemat.priv.pl";
allow-query { any; }; }; };
Czemu to robimy - chodzi o to, aby sieć wewnętrzna - tu na przykładzie 192.168.0.0/24 oraz sam serwer 127.0.0.1:
- miała większe uprawnienia niż sieć zewnętrzna
- miała inną konfigurację stref oraz miała ich więcej
Ważna jest kolejność, najpierw "internal", potem "external" - bo zakres IP w opcji match-clients dla internal jest podzbiorem tej samej opcji w external. Można oczywiście zamienić miejscami i w external wykluczyć (match-clients { !192.168.0.0/24; any; };) sieć wewnętrzną.
A teraz kilka słów wytłumaczenia:
- match-clients zawiera zakresy IP, które dokonują podziału na sieć wewnętrzną i resztę świata.
- allow-query w tym przypadku "internal" identyczne jak match-clients definiuje kto uzyska odpowiedź na swoje pytania. W przypadku "external" najpierw jest "none" a potem w definicji konkretnej strefy jest "all". Od binda 9.4.2 w górę ma to znaczenie.
- allow-transfer i allow-notify zawiera adresy IP albo klucze dla secondary DNSa (o tym napiszę później).
- allow-recursion i recursion yes/no definiuje zachowanie serwera DNS jeżeli nie znajdzie w keszu odpowiedzi. Przy włączonym recursion serwer sam jej poszuka. Przy wyłączonym powie tylko gdzie klient powinien poszukać - zwalenie roboty na inny serwer oczywiście odciąży nasz i ma znaczenie dla bezpieczeństwa naszego serwera.
Strefy w danych widokach - jak widać w internal jest ich więcej, przede wszystkim jest tam strefa typu hint ".", co pozwoli klientowi znaleźć główne serwery DNS jeżeli nasz nie będzie mu wystarczał. Następnie są tam domeny odwrotne dla sieci lokalnych i localhosta - to nie powinno być widoczne z seci zewnętrznych prawda? Na końcu jest strefa domeny lemat.priv.pl - zauważcie, że wprawdzie w external też jest ta domena, ale różni się ona nazwa pliku strefy.
Dla internal: $TTL 86400 ; 1 day
@ IN SOA ns1.lemat.priv.pl. root.lemat.priv.pl. (
2007010500 ; Serial
86400 ; Refresh 24h
3600 ; Retry 1h
604800 ; Expire 1 week
86400 ) ; Minimum 1 day
IN NS ns1
IN A 192.168.0.1
IN MX 10 mail
IN TXT "v=spf1 mx -all"
ns1 IN A 192.168.0.1
ns2 IN A 83.17.15.82
athlon IN A 192.168.0.1
www CNAME @
mail IN A 192.168.0.1
arch IN A 192.168.0.2
ubuntu IN A 192.168.0.12
Dla external: $TTL 86400 ; 1 day
@ 86400 IN SOA ns1.lemat.priv.pl. root.lemat.priv.pl. (
2007011600 ; Serial
86400 ; Refresh 12h
900 ; Retry 15min
604800 ; Expire 1 week
86400 ) ; Minimum 1 day
604800 IN NS ns1
604800 IN NS ns2
IN A 83.19.156.142
7200 IN MX 10 mail
604800 IN TXT "v=spf1 mx -all"
* 604800 IN TXT "v=spf1 -all"
ns1 604800 IN A 83.19.156.142
ns2 604800 IN A 83.17.15.82
mail 7200 IN A 83.19.156.142
www CNAME @
Jak widać plik dla sieci wewnętrznej zawiera podobne wpisy jak przy external, ale jest ich więcej - dochodzą hosty w sieci lokalnej. Oraz ich rekordy A są lokalne.
|