DNSSEC - automat dodajacy domeny (BASH)

Poniższy skrypt ma tylko jedno zadanie, skrócić czas dodawania domen do dlv.isc.org, wiadomo przy większej ilości domen człowiek by oszalał :) Zanim przystąpimy do korzystania z tego dobrodziejstwa należy skonfigurować naszego BIND'a do obsługi DNSSEC ale z tym to już odsyłam do klick. Skrypt wykonuje następujące czynności: dodaje domenę do serwisu, generuje niezbędne klucze KSK i ZSK, odsyła KSK do serwisu przy czym pobiera wpis TXT, przenosi klucze w ustalone miejsce, dodaje wpisy KSK/ZSK/TXT do pliku strefy domeny oraz zwiększa jej serial, dodaje dopisek "signed" w ustalonym named.conf* dla danej domeny, generuje plik domenta.tld-update.sh dzięki któremu podpisanie domeny po zmianie zawartości strefy będzie szybkie i przyjemne hmmm i to chyba wszystko :) Po zakończeniu działania skryptu wystarczy przeładować BIND'a ;]

 

#!/bin/bash
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2009 AfterHours/AHS/Actives.

######################################################
################ USTAWIENIA ##########################
######################################################

# Lista domen oddzielona spacjami
DOMAIN_LIST="zwateam.net 4battle.net"
# Dane logowania do dlv.isc.org
LOGIN=""
PASSWORD=""
# Sciezka dla kluczy
KEYS_DIR="/etc/bind/keys"
# Sciezka do cURL
CURL="/usr/bin/curl"
# Sciezka do plikow strefy
ZONE_DIR="/etc/bind/master"
# Rozszerzenie plikow strefy tj. domena.tld.zone
ZONE_EXT=".zone"
# Sciezka do pliku z strefami
CONF="/etc/bind/named.conf.local"

######################################################
################    Skrypt   #########################
######################################################

for DOMAIN in $DOMAIN_LIST;
  do
     echo -e '****** \e[01;33mPobieram Token Autentycznosci\e[00m'
     #---------------------------------------------------------
     $CURL --silent --cookie cookies.txt --cookie-jar cookies.txt \
           --user-agent Mozilla/4.0 --output output.dat \
           https://dlv.isc.org/session/new
     AUTH=`cat output.dat | grep name=\"authenticity_token\" \
           | awk -F "value=\"" '{print $2}' | awk -F "\"" '{print $1}'`
     #---------------------------------------------------------
     echo -e '>>> \e[01;36mAuthenticity Token:\e[00m '$AUTH
     echo -e '****** \e[01;33mPodejmuje probe zalogowania\e[00m'
     #---------------------------------------------------------
     $CURL --silent --cookie cookies.txt --cookie-jar cookies.txt \
           -F "authenticity_token=$AUTH" \
           -F "commit=Log In" \
           -F "session[login]=$LOGIN" \
           -F "session[password]=$PASSWORD" \
           --location \
           --output output.dat \
             https://dlv.isc.org/session
          ID=`cat output.dat | grep "Manage Zones" \
              | awk -F "users/" '{print $2}' | awk -F "/" '{print $1}'`
       if [ ! -z "$ID" ]; then
         #---------------------------------------------------------
            echo -e '>>> \e[01;36mZalogowany, ID uzytkownika:\e[00m '$ID
         echo -e '****** \e[01;33mDodaje domene: \e[00m'$DOMAIN
         #---------------------------------------------------------
         $CURL --silent --cookie cookies.txt --cookie-jar cookies.txt \
                     -F "authenticity_token=$AUTH" \
                     -F "commit=Add Zone" \
                     -F "zone[name]=$DOMAIN" \
                     --location \
                     --output output.dat \
                     https://dlv.isc.org/users/$ID/zones
         ID_DOMAIN=`cat output.dat | grep id=\"new_dnskey\" \
                 | awk -F "zones/" '{print $2}' | awk -F "/" '{print $1}'`   
             if [ ! -z "$ID_DOMAIN" ]; then
                  #---------------------------------------------------------
                  echo -e '>>> \e[01;36mDomena zostala dodana, ID: \e[00m'$ID_DOMAIN            
                        echo -e '****** \e[01;33mGeneruje klucze\e[00m'
                  #---------------------------------------------------------
                  KSK=`dnssec-keygen -r /dev/urandom -f KSK -a RSASHA1 -b 2048 -n ZONE $DOMAIN`
                  ZSK=`dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE $DOMAIN`
                  #---------------------------------------------------------
                  echo -e '>>> \e[01;36mWygenerowany klucze: \e[00m'$KSK' '$ZSK
                  echo -e '****** \e[01;33mWysylam klucz KSK\e[00m'
                  #---------------------------------------------------------
                  $CURL --silent --cookie cookies.txt --cookie-jar cookies.txt \
                             -F "authenticity_token=$AUTH" \
                             -F "commit=Upload" \
                             -F "_method=put" \
                             -F "zone[record_file]=@$KSK.key" \
                             --location \
                             --output output.dat \
                             https://dlv.isc.org/zones/$ID_DOMAIN/upload
                        mv $KSK* $KEYS_DIR/
                        mv $ZSK* $KEYS_DIR/
                        $CURL --silent --cookie cookies.txt --cookie-jar cookies.txt \
                              --output output.dat \
                              https://dlv.isc.org/zones/$ID_DOMAIN
                  #TXT=`cat output.dat | grep "
dlv" \

                  #| awk -F "div>" '{print $2}' | awk -F "<" '{ sub("&quot;", "\"");sub("&quot;", "\""); print $1}'`
                        TXT=`cat output.dat | grep "
dlv" \
                  | awk -F """ '{print $2}' | awk -F "&quot;" '{print $1}'`
                     if [ ! -z "$TXT" ]; then
                                #---------------------------------------------------------
                          echo -e '>>> \e[01;36mRekord TXT: \e[00m'$TXT
                          echo -e '****** \e[01;33mWprowadzam zmiany w pliku strefy\e[00m'
                                #---------------------------------------------------------
                                      sed '$i $include\t\t'$KEYS_DIR'/'$KSK'.key\n$include\t\t'$KEYS_DIR'/'$ZSK'.key\n\ndlv.'$DOMAIN'.\t0\tIN\tTXT\t"'$TXT'"' $ZONE_DIR/$DOMAIN$ZONE_EXT >> /tmp/tmp.zone && rm $ZONE_DIR/$DOMAIN$ZONE_EXT && mv /tmp/tmp.zone $ZONE_DIR/$DOMAIN$ZONE_EXT
                                SERIAL=`cat $ZONE_DIR/$DOMAIN$ZONE_EXT | grep '\<[0-9]\{10\}\>'`
                                      NEW_SERIAL=$[$SERIAL+1]
                                      sed -i "s/${SERIAL}/\t\t\t${NEW_SERIAL}/" $ZONE_DIR/$DOMAIN$ZONE_EXT
                                      #---------------------------------------------------------
                          echo -e '****** \e[01;33mWprowadzam zmiany w konfiguracji stref\e[00m'
                                #---------------------------------------------------------
                                      sed -i 's/'$DOMAIN$ZONE_EXT'/'$DOMAIN$ZONE_EXT'.signed/' $CONF
                                #---------------------------------------------------------
                          echo -e '****** \e[01;33mPodpisuje domene\e[00m'
                                #---------------------------------------------------------
                                      dnssec-signzone -l dlv.isc.org -r /dev/urandom -o $DOMAIN \
                                      -k $KEYS_DIR/$KSK $ZONE_DIR/$DOMAIN$ZONE_EXT $KEYS_DIR/$ZSK
                                      echo "dnssec-signzone -l dlv.isc.org -r /dev/urandom -o $DOMAIN \
                                      -k $KEYS_DIR/$KSK $ZONE_DIR/$DOMAIN$ZONE_EXT $KEYS_DIR/$ZSK" > $ZONE_DIR/$DOMAIN-update.sh && chmod +x $ZONE_DIR/$DOMAIN-update.sh
                                      mv dlvset-* $ZONE_DIR/
                          mv dsset-* $ZONE_DIR/
                                      mv keyset-* $ZONE_DIR/
                                      ADDED_LIST="$ADDED_LIST $DOMAIN"
                     else
                                #---------------------------------------------------------
                          echo -e '****** \e[01;31mBlad podczas dodawania klucza, usuwam klucze i domene\e[00m'
                                #---------------------------------------------------------
                                $CURL --silent --cookie cookies.txt --cookie-jar cookies.txt \
                                           -F "authenticity_token=$AUTH" \
                                           -F "_method=delete" \
                                           --location \
                                           --output output.dat \
                                           https://dlv.isc.org/zones/$ID_DOMAIN
                                rm $KEYS_DIR/$KSK*
                                rm $KEYS_DIR/$ZSK*                    
                     fi
             else
                  echo -e '****** \e[01;31mBlad podczas dodawania domeny\e[00m'
             fi
       else
         echo -e '****** \e[01;31mBlad logowania\e[00m'
       fi
     #---------------------------------------------------------
     echo -e '****** \e[01;33mUsuwam tymczasowe pliki\e[00m'
     #---------------------------------------------------------
     [ -f cookies.txt ] && rm -f cookies.txt || :
     [ -f output.dat ] && rm -f output.dat || :
     echo -e  '\n'
  done
echo -e '****** \e[01;33mPoprawnie dodane domeny: \e[00m'$ADDED_LIST

2010-04-28 23:51