Różnice pomiędzy wersjami 3 i 6 (Spinanie 3 wersji)
⇤ ← Wersja 3 z 2018-10-31 14:04:28 →
Rozmiar: 7833
Edytor: wtps0n
Komentarz: Poprawienie poleceń: copy-paste przy utf8 powoduje bardzo dziwne błędy
← Wersja 6 z 2018-11-02 17:39:25 → ⇥
Rozmiar: 13910
Edytor: wtps0n
Komentarz: + polecenia shell do podpisywania plików, konfiguracja nsd, źródła w sieci, rozdział o rejestratorze
Usunięcia zostały oznaczone w ten sposób. Dodatki zostały oznaczone w ten sposób.
Linia 31: Linia 31:
Pierwszym krokiem jest inicjalizacja SoftHSMa: Pierwszym krokiem jest inicjalizacja SoftHSMa.

=== Przygotowania ===
{{{#!highlight bash numbers=off
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ą :-)
{{{#!highlight bash numbers=off
perl -pi -e 'next unless /directories.tokendir/; s/lib/db/' /usr/local/etc/softhsm2.conf
}}}

=== Inicjalizacja ===
Linia 35: Linia 50:
/!\ /!\ /!\ '''UWAGA''' Należy koniecznie zapamiętać PINy, o które jest pytanie w trakcie inicjalizacji. Będą później potrzebne do konfiguracji. /!\ /!\ /!\ /!\ /!\ /!\ '''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.
Linia 67: Linia 82:
           <Module>/usr/local/lib/softhsm/libsofthsm.so</Module>            <Module>/usr/local/lib/softhsm/libsofthsm2.so</Module>
Linia 69: Linia 84:
                   <PIN>****</PIN>                    <PIN>*****</PIN>
Linia 83: Linia 98:
       <Interval>PT3600S</Interval>        <AutomaticKeyGenerationPeriod>P1097D</AutomaticKeyGenerationPeriod>
       <WorkingDirectory>/usr/local/var/opendnssec/enforcer</WorkingDirectory>
Linia 88: Linia 104:
       <Listener>
           <Interface><Address>10.9.128.2</Address><Port>53</Port></Interface>
       </Listener>
Linia 93: Linia 106:
Linia 96: Linia 110:
(!) '''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).
Linia 100: Linia 115:
        <Description>A default policy that will amaze you and your friends</Description>         <Description>Polityka DNSSEC dla ns13.smb.waw.pl</Description>
Linia 105: Linia 120:
                <Default>P14D</Default>
            <Denial>P14D</Denial>
                <Default>P35D</Default>
            <Denial>P35D</Denial>
Linia 113: Linia 128:
                <Resalt>P100D</Resalt>                 <Resalt>P190D</Resalt>
Linia 125: Linia 140:
            <Purge>P14D</Purge>             <Purge>P25D</Purge>
Linia 128: Linia 143:
                <Lifetime>P1Y</Lifetime>                 <Lifetime>P1097D</Lifetime>
Linia 133: Linia 148:
                <Lifetime>P90D</Lifetime>                 <Lifetime>P180D</Lifetime>
Linia 160: Linia 175:
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.
{{{#!highlight bash numbers=off
ods-enforcer zone export
ods-enforcer zone updatelist
}}}
Linia 162: Linia 183:
}}} <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
{{{#!highlight bash numbers=off
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ć:
{{{#!highlight bash numbers=off
service opendnssec start
}}}

== Zaimportowanie polityk ==
{{{#!highlight bash numbers=off
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. [ [[#url8|8]] ]), natomiast nie radzi sobie z parametrem ''$include''. Rozwiązaniem problemu jest wykorzystanie narzędzia '''dig''':
{{{#!highlight bash numbers=off
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 ==
{{{#!highlight bash numbers=off
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 ==
{{{#!highlight bash numbers=off
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:
{{{#!highlight bash numbers=off
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. [ [[#url10|10]] ]).

= Rejestrator =
Za pomocą ponelu webowego rejestratora (np. [[https://www.ovh.com/manager/|OVH|target="_blank"]]) należy dla danej domeny podać rekordy DS<<FootNote(Na dzień 02.11.2018 niestety to nie działa. Do wyjaśnienia z OVH.)>>

= Konfiguracja NSD dla stref podpisanych =
Najprościej jest wykorzystanie "''wzorca''" z konfiguracji NSD poprzez podanie innego źródła plików stref:
{{{#!highlight ini numbers=off
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:
{{{#!highlight ini numbers=off
zone:
        name: cdnx.pl
        include-pattern: "master_zones_ns13_dnssec"
}}}
Linia 172: Linia 306:
 1. <<Anchor(url8)>>[[http://www.zytrax.com/books/dns/ch8/|DNS Resource Records (RRs)|target="_blank"]]
 1. <<Anchor(url9)>>[[https://nsrc.org/workshops/2017/nsrc-icann-dnssec-ma/labs/opendnssec-lab1.txt||target="_blank"]]
 1. <<Anchor(url10)>>[[https://wiki.opendnssec.org/display/DOCS20/Key+States+Explained||target="_blank"]]
Linia 177: Linia 314:
 1. <<Anchor(page2)>>[[url2|]]
 1. <<Anchor(page3)>>[[url3|]]
 1. <<Anchor(page2)>>[[PoudriereBinaryPkg|repozytroium pakietów]]
 1. <<Anchor(page3)>>[[UniMaster|repozytroium konfiguracji oraz skryptów]]

{{{#!wiki comment
Linia 181: Linia 320:
{{{#!wiki comment
Linia 190: Linia 328:
----

Wydrukuj tę dokumentację Pokaż jako slajdy

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:

  1. Zone Signing Key - klucz podpisujący strefę (jego czas życia powinien być relatywnie krótki - np. 3 miesiące

  2. 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

  3. 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:

  1. Konfiguracja SoftHSM-a
  2. 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

  1. Hidden master oraz DNSSEC "w locie"

  2. Uruchomienie OpenDNSSEC

  3. Projekt OpenDNSSEC

  4. NSD + OpenDNSSEC

  5. https://www.digitalocean.com/community/tutorials/how-to-set-up-dnssec-on-an-nsd-nameserver-on-ubuntu-14-04

  6. https://www.digitalocean.com/community/tutorials/how-to-setup-dnssec-on-an-authoritative-bind-dns-server--2

  7. http://whyscream.net/wiki/Dnssec_howto_with_NSD_and_ldns.md

  8. DNS Resource Records (RRs)

  9. https://nsrc.org/workshops/2017/nsrc-icann-dnssec-ma/labs/opendnssec-lab1.txt

  10. https://wiki.opendnssec.org/display/DOCS20/Key+States+Explained

Odnośniki do dokumentacji

  1. Konfiguracja serwera DNS

  2. repozytroium pakietów

  3. repozytroium konfiguracji oraz skryptów


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.


  1. Trochę to dziwne. W dokumentacjach (patrz źródła) wygląda jak kopiowanie tego zalecenia z RFC?? Do wyjaśnienia. (1)

  2. Jeżeli umieszczę pliki w repozytorium konfiguracji, to będzie trzeba poniższe zmodyfikować (2)

  3. Na dzień 02.11.2018 niestety to nie działa. Do wyjaśnienia z OVH. (3)

DnsSec (ostatnio edytowane 2026-06-19 07:59:23 przez wtps0n)