|
Rozmiar: 14183
Komentarz: + urle z dokumentacją
|
Rozmiar: 14256
Komentarz: + odnośnik do PDFa
|
| Usunięcia zostały oznaczone w ten sposób. | Dodatki zostały oznaczone w ten sposób. |
| Linia 318: | Linia 318: |
| 1. <<Anchor(attach1)>>[[attachment:apnic-dnssec-bind.pdf|Bind + DNSSEC]] |
Wydrukuj tę dokumentację Pokaż jako slajdy
Spis Treści
Konfiguracja DNSSEC w nsd
DNSSEC to rozszerzenie w konfiguracji strefy DNS zapewniające podpisanie każdego rekordu strefy w celu zapewnienia autentyczności odpowiedzi z serwerów DNS. DNSSEC bazuje na dwóch kluczach:
Zone Signing Key - klucz podpisujący strefę (jego czas życia powinien być relatywnie krótki - np. 3 miesiące
Key Signing Key - klucz podpisujący klucz ZSK. Czas życia KSK powinien być długi (przez analogię do certyfikatów): 1 rok, może 2-3 lata
Delegation Signer - rekord w DNSie (wprowadzany w panelu rejestratora), który zawiera informację o KSK (por. wikipedia:DNSSEC)
Zgodnie z zaleceniami DNSSEC, podpisywanie stref powinno się zmieniać co kilka dni (zmienny SALT), aby wykluczyć, że potencjalni atakujący odgadną klucz i będą w stanie odgadnąć, jak fałszować rekordy1
Instalacja oprogramowania
Za pomocą własnego repozytorium pakietów należy zainstalować niezbędne oprogramowanie:
pkg install -Uy nsd softhsm2 opendnssec2 bind-tools ldns
Konfiguracja NSD
Konfiguracja serwera nsd znajduje się w oddzielnym dokumencie. Drobne zmiany będą dotyczyły katalogu z plikami stref, ale będzie to zaznaczone w dalszym opisie.
Konfiguracja OpenDNSSEC
Konfiguracja OpenDNSSECa składa się z następujących składowych:
- Konfiguracja SoftHSM-a
- Konfiguracja samego OpenDNSSECa
Inicjalizacja SoftHSM
Pierwszym krokiem jest inicjalizacja SoftHSMa.
Przygotowania
mkdir -p /var/db/softhsm/tokens/
chmod 0700 /var/db/softhsm/
chmod 1777 /var/db/softhsm/tokens/
/usr/local/etc/softhsm2.conf
W pliku konfiguracyjnym konieczne jest poprawienie ścieżki na FreeBSD-ową
perl -pi -e 'next unless /directories.tokendir/; s/lib/db/' /usr/local/etc/softhsm2.conf
Inicjalizacja
softhsm2-util --init-token --slot 0 --label "OpenDNSSEC" --so-pin 1223456 --pin 123456
UWAGA Należy koniecznie zapamiętać PINy, o które jest pytanie w trakcie inicjalizacji. Będą później potrzebne do konfiguracji.
PINy mogą być dłuższe aniżeli 4 znaki.
Sprawdzenie SoftHSM
softhsm2-util --show-slots
Pliki konfiguracyjne opendnssec
Kolejnym krokiem jest utworzenie plików konfiguracyjnych opendnssec-a. Najłatwiej to wykonać poprzez kopię przykładowych konfiguracji a następnie modyfikacji2:
cd /usr/local/etc/opendnssec
cp addns.xml.sample addns.xml
cp conf.xml.sample conf.xml
cp kasp.xml.sample kasp.xml
cp zonelist.xml.sample zonelist.xml
addns.xml
UWAGA W przypadku podpisywania stref w plikach nie ma potrzeby tworzenie tego pliku konfiguracyjnego
<?xml version="1.0" encoding="UTF-8"?>
conf.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<RepositoryList>
<Repository name="SoftHSM">
<Module>/usr/local/lib/softhsm/libsofthsm2.so</Module>
<TokenLabel>OpenDNSSEC</TokenLabel>
<PIN>*****</PIN>
<SkipPublicKey/>
</Repository>
</RepositoryList>
<Common>
<Logging>
<Verbosity>3</Verbosity>
<Syslog><Facility>local0</Facility></Syslog>
</Logging>
<PolicyFile>/usr/local/etc/opendnssec/kasp.xml</PolicyFile>
<ZoneListFile>/usr/local/etc/opendnssec/zonelist.xml</ZoneListFile>
</Common>
<Enforcer>
<Datastore><SQLite>/usr/local/var/opendnssec/kasp.db</SQLite></Datastore>
<AutomaticKeyGenerationPeriod>P1097D</AutomaticKeyGenerationPeriod>
<WorkingDirectory>/usr/local/var/opendnssec/enforcer</WorkingDirectory>
</Enforcer>
<Signer>
<WorkingDirectory>/usr/local/var/opendnssec/tmp</WorkingDirectory>
<WorkerThreads>4</WorkerThreads>
</Signer>
</Configuration>
kasp.xml
WAŻNE Musi być jedna polityka o nazwie default. Wtedy przy dodawaniu strefyu do podpisywania nie ma konieczności podawania nazwy polityki (jeżeli byłaby więcej niż jedna).
<?xml version="1.0" encoding="UTF-8"?>
<KASP>
<Policy name="default">
<Description>Polityka DNSSEC dla ns13.smb.waw.pl</Description>
<Signatures>
<Resign>PT2H</Resign>
<Refresh>P3D</Refresh>
<Validity>
<Default>P35D</Default>
<Denial>P35D</Denial>
</Validity>
<Jitter>PT12H</Jitter>
<InceptionOffset>PT3600S</InceptionOffset>
</Signatures>
<Denial>
<NSEC3>
<Resalt>P190D</Resalt>
<Hash>
<Algorithm>1</Algorithm>
<Iterations>5</Iterations>
<Salt length="8"/>
</Hash>
</NSEC3>
</Denial>
<Keys>
<TTL>PT3600S</TTL>
<RetireSafety>PT3600S</RetireSafety>
<PublishSafety>PT3600S</PublishSafety>
<Purge>P25D</Purge>
<KSK>
<Algorithm length="2048">8</Algorithm>
<Lifetime>P1097D</Lifetime>
<Repository>SoftHSM</Repository>
</KSK>
<ZSK>
<Algorithm length="1024">8</Algorithm>
<Lifetime>P180D</Lifetime>
<Repository>SoftHSM</Repository>
</ZSK>
</Keys>
<Zone>
<PropagationDelay>PT43200S</PropagationDelay>
<SOA>
<TTL>PT3600S</TTL>
<Minimum>PT3600S</Minimum>
<Serial>datecounter</Serial>
</SOA>
</Zone>
<Parent>
<PropagationDelay>PT9999S</PropagationDelay>
<DS>
<TTL>PT3600S</TTL>
</DS>
<SOA>
<TTL>PT172800S</TTL>
<Minimum>PT10800S</Minimum>
</SOA>
</Parent>
</Policy>
</KASP>
zonelist.xml
Lista stref objętych podpisywaniem. Zasadniczo ods-enforcer korzysta z bazy danych. Natomiast można wzrobić eksport listy stref w celu późniejszego importu (lub też aby mieć backup). Jest to też dobry mechanizm w celu poprawnienia np. literówek w ścieżkach do plików.
ods-enforcer zone export
ods-enforcer zone updatelist
<?xml version="1.0" encoding="UTF-8"?>
<ZoneList>
<!--
********* Important changes to zonelist.xml in 2.0 ***************
In 2.0, the zonelist.xml file is no longer automatically updated when zones
are added or deleted via the command line by using the 'ods-enforcer zone add'
command. However, in 2.0 it is possible to force an update of the zonelist.xml
file by using the new 'xml' flag. This is in contrast to the behaviour in 1.4
where zonelist.xml was always updated, unless the 'no-xml' flag was used.
As a result in 2.0 the contents of the enforcer database should be considered
the 'master' for the list of currently configured zones, not the zonelist.xml
file as the file can easily become out of sync with the database.
The contents of the database can be listed using:
ods-enforcer zone list
and exported using the command
ods-enforcer zonelist export
The contents of the database can still be updated in bulk from the zonelist.xml
file by using the command:
ods-enforcer zonelist import (or ods-enforcer update zonelist)
-->
<Zone name="cdnx.pl">
<Policy>default</Policy>
<SignerConfiguration>/usr/local/var/opendnssec/signconf/cdnx.pl.xml</SignerConfiguration>
<Adapters>
<Input>
<Adapter type="File">/usr/local/etc/nsd/master/raw/cdnx.pl.raw</Adapter>
</Input>
<Output>
<Adapter type="File">/usr/local/var/opendnssec/signed/cdnx.pl.signed</Adapter>
</Output>
</Adapters>
</Zone>
</ZoneList>
Uruchomienie OpenDNSSEC
Po wykonanej konfiguracji można przejść do uruchamiania OpenDNSSECa.
ods-kaspcheck
Narzędzie pozwala sprawdzić poprawność konfiguracji plików ODS.
ods-enforcer-db-setup
Po sprawdzeniu konfiguracji można przejść do inicjalizacji bazy danych
ods-enforcer-db-setup
Uruchomienie demonów
Należy ustawić w plikach rc.conf możliwość uruchamiania całej usługi a następnie ją wystartować:
service opendnssec start
Zaimportowanie polityk
ods-enforcer policy import
# sprawdzenie:
ods-enforcer policy list
Podpisywanie strefy
Przygotowanie pliku
ods-enforcer korzysta z narzędzia ldns-read-zone do wczytania pliku strefy do podpisania. ldns-read-zone radzi sobie z uproszczoną składnią (czyli definicja $TTL, oraz uproszczone wpisy bez jawnego TTL - por. [ 8 ]), natomiast nie radzi sobie z parametrem $include. Rozwiązaniem problemu jest wykorzystanie narzędzia dig:
dig axfr cdnx.pl @localhost > /usr/lcoal/etc/nsd/master/raw/cdnx.pl.raw
W konfiguracji NSD musi być dopuszczenie do AXFR z poziomu localhost (np. we definicji wzorca).
Dodanie domeny do ODS
ods-enforcer zone add --zone cdnx.pl --input /usr/local/etc/nsd/master/raw/cdnx.pl.raw --output /usr/local/var/opendnssec/signed/cdnx.pl.signed
Wyświetlenie kluczy
ods-enforcer key list -v --zone cdnx.pl
Wygenerowanie kluczy DS dla rejestratora
Po wygenerowaniu kluczy (co można sprawdzić w logach) można wygenerować rekordy DS dla rejestratora:
ods-enforcer key export --zone cdnx.pl --ds --keystate publish --keytype ksk
ods-enforcer key export --zone cdnx.pl --ds --keystate ready --keytype zsk
W przypadku eksportu rekordów DS jest bardzo ważne, aby podać "status" oraz "typ" klucza (parametry --keystate oraz --keytype muszą być podane jednocześnie (por. [ 10 ]).
Rejestrator
Za pomocą ponelu webowego rejestratora (np. OVH) należy dla danej domeny podać rekordy DS3
Konfiguracja NSD dla stref podpisanych
Najprościej jest wykorzystanie "wzorca" z konfiguracji NSD poprzez podanie innego źródła plików stref:
pattern:
name: master_zones_dnssec
zonefile: "/usr/local/var/opendnssec/signed/%s.signed"
notify: NN.NN.NN.NN tsig_ns13
provide-xfr: NN.NN.NN.NN tsig_ns13
outgoing-interface: 10.2.2.36
provide-xfr: 10.2.2.0/24 NOKEY
Zaś w definicji strefy wykorzystać w/w wzorzec:
zone:
name: cdnx.pl
include-pattern: "master_zones_ns13_dnssec"
Źródła w sieci internet
https://nsrc.org/workshops/2017/nsrc-icann-dnssec-ma/labs/opendnssec-lab1.txt
https://wiki.opendnssec.org/display/DOCS20/Key+States+Explained
https://billets.rail.eu.org/unix-reseau/opendnssec-debian.html
Odnośniki do dokumentacji
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
Trochę to dziwne. W dokumentacjach (patrz źródła) wygląda jak kopiowanie tego zalecenia z RFC?? Do wyjaśnienia. (1)
Jeżeli umieszczę pliki w repozytorium konfiguracji, to będzie trzeba poniższe zmodyfikować (2)
Na dzień 02.11.2018 niestety to nie działa. Do wyjaśnienia z OVH. (3)
