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 modyfikacji1:

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

W pliku konfiguracyjnym bardzo ważne ustawienie: '''NotifyCommand''': zapewnia, że serwer ''nsd'' będzie świadom zmian oraz aktualizacji strefy.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
   <RepositoryList>
       <Repository name="SoftHSM">
           <Module>/usr/local/lib/softhsm/libsofthsm2.so</Module>
               <TokenLabel>OpenDNSSEC</TokenLabel>
                   <PIN>992404</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>
       <NotifyCommand>/usr/local/sbin/nsd-control reload %zone</NotifyCommand>
   </Signer>
</Configuration>

kasp.xml

(!) WAŻNE Musi być jedna polityka o nazwie default. Wtedy przy dodawaniu strefy do podpisywania nie ma konieczności podawania nazwy polityki (jeżeli byłaby więcej niż jedna).

(!) WAŻNE Dla NSEC3 wartość Ieterations musi być zero. Zgodnie z narzędziem 8 wartość większa niż 0 jest błędna.

(!) Po dogłębnej analizie, jak również sprawdzeniu prezentacji wartość dla Denial używany jest NSEC zamiast NSEC3

<?xml version="1.0" encoding="UTF-8"?>
<?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>
            <NSEC/>
        </Denial>
        <Keys>
            <TTL>PT3600S</TTL>
            <RetireSafety>PT3600S</RetireSafety>
            <PublishSafety>PT3600S</PublishSafety>
            <Purge>P25D</Purge>
            <KSK>
                <Algorithm length="2048">8</Algorithm>
                <Lifetime>P2097D</Lifetime>
                <Repository>SoftHSM</Repository>
            </KSK>
            <ZSK>
                <Algorithm length="1024">8</Algorithm>
                <Lifetime>P465D</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 zrobić eksport listy stref w celu późniejszego importu (lub też aby mieć backup). Jest to też dobry mechanizm w celu poprawienia np. literówek w ścieżkach do plików.

(!) WAŻNE Zmiana sposobu podpisywania danej strefy w pliku /usr/local/var/opendnssec/signconf/domena.xml nie powoduje zmiany polityki w momencie podpisywania. W celu aktualizacji konieczne jest wykonanie polecenia update all2

ods-enforcer zonelist export
ods-enforcer update all
ods-enforcer zone list

<?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/pl/cdnx.pl.raw</Adapter>
      </Input>
      <Output>
        <Adapter type="File">/usr/local/var/opendnssec/signed/pl/cdnx.pl.signed</Adapter>
      </Output>
    </Adapters>
  </Zone>
</ZoneList>