# HG changeset patch # User Andre Suess # Date 1277740924 -7200 # Node ID 920c1a51ba0e9a63efd2661b62649833cf1979d9 # Parent 960f5e7f78ebf3df1834274a2ebb909823e7d373 creatkey überarbeitet diff -r 960f5e7f78eb -r 920c1a51ba0e .hgignore --- a/.hgignore Mon Jun 21 13:32:52 2010 +0200 +++ b/.hgignore Mon Jun 28 18:02:04 2010 +0200 @@ -1,1 +1,2 @@ creatksk.old +creatkey.old diff -r 960f5e7f78eb -r 920c1a51ba0e README --- a/README Mon Jun 21 13:32:52 2010 +0200 +++ b/README Mon Jun 28 18:02:04 2010 +0200 @@ -1,8 +1,7 @@ zonedatei erstellen - mkdomain kundenname domainname -- creatkey domainname -- creatkey -k domainname +- creatkey domainname # Ab bind 9.6 NSEC3RSASHA1 statt RSASHA1 zum erstellen der keys benutzen - mkready @@ -20,11 +19,11 @@ # ausfuehren neuen ZSK erstellen -- creatzsk domainname -- spaeter oder per cron killkeys ausfuehren +- creatkey +- killkeys neuen KSK erstellen -- creatksk -k domainname -- spaeter oder per cron killkeys ausfuehren +- creatkey +- killkeys diff -r 960f5e7f78eb -r 920c1a51ba0e creatkey --- a/creatkey Mon Jun 21 13:32:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -#!/bin/bash - -while getopts ":k" opt -do - case $opt in - k ) K_OPTION="1";; - \? ) echo "SYNOPSIS: creatkey [-k] zonename" - exit 1 - esac # prueft ob -k als option angegeben wurde - shift -done - -test $# -lt 1 && echo "SYNOPSIS: creatkey [-k] zonename" && exit 1 - # prueft ob die eingabe stimmt - -for DOMAIN in $@ # durchgang fuer jede eingabe -do - ZONE_DIR=/etc/bind/master # konfiguration - ZONE_NAME=`idn --quiet $DOMAIN` - - if [ -d $ZONE_DIR/$ZONE_NAME ] # prueft die existens des zoneordners - then - cd $ZONE_DIR/$ZONE_NAME/ - - test -f index.ksk || touch index.ksk - test -f index.zsk || touch index.zsk - - if test $K_OPTION # erzeugt die schluessel und erstelt eine indexdatei - then - echo "erzeugt ksk fuer" $DOMAIN - dnssec-keygen -a RSASHA1 -b 2048 -n ZONE -f KSK $ZONE_NAME >> index.ksk - INDEX_KSK=$( tail -n2 index.ksk ) ; echo $INDEX_KSK | fmt -w1 > index.ksk - else - echo "erzeugt zsk fuer" $DOMAIN - dnssec-keygen -a RSASHA1 -b 512 -n ZONE $ZONE_NAME >> index.zsk - INDEX_ZSK=$( tail -n2 index.zsk ) ; echo $INDEX_ZSK | fmt -w1 > index.zsk - fi - - #loescht alle Schluessel die nicht in der indexdatei stehen - rm $(ls K*[key,private] | grep -v "`cat index.zsk`" | grep -v "`cat index.ksk`") 2> /dev/null - - #erzeugt ein backup und entfernt alle schluessel aus der zonedatei - mv $ZONE_NAME $ZONE_NAME.old - grep -v 'DNSKEY' $ZONE_NAME.old >> $ZONE_NAME - - #fuegt die existirenden schluessel in die zonedatei ein - cat K$ZONE_NAME.*key >>$ZONE_NAME - - #signiert die zonedatei - erzeugt zone.signed - dnssec-signzone $ZONE_NAME - else - echo "zone $ZONE_NAME nicht gefunden" - fi - -done - -exit 0 diff -r 960f5e7f78eb -r 920c1a51ba0e dnssec-creatkey --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dnssec-creatkey Mon Jun 28 18:02:04 2010 +0200 @@ -0,0 +1,73 @@ +#!/bin/bash + +ZONE_DIR="/etc/bind/master" +ZSKLIVE=60 # ZSK-Schluessellebensdauer in Tagen + +function TEST_ZSK { # prueft ob es einen ZSK gibt + for DOMAIN in $ZONE_DIR/* + do + test -f $DOMAIN/index.zsk || echo ${DOMAIN##/*/} + done +} + +function TEST_KSK { # prueft ob es einen KSK gibt + for DOMAIN in $ZONE_DIR/* + do + test -f $DOMAIN/index.ksk || echo ${DOMAIN##/*/} + done +} + +function TEST_ZSK_TIME { # prueft ob der ZSK abgelaufen ist + for DOMAIN in $ZONE_DIR/* + do + STARTTIME=`ls $DOMAIN/index.zsk -l --time-style=+%s | cut -d' ' -f6 2>/dev/null` + ENDTIME=$[STARTTIME + $[ZSKLIVE * 86400]] + NOWTIME=`date +%s` + + if [ $ENDTIME -le $NOWTIME ] + then + echo ${DOMAIN##/*/} + fi + done +} + + +VAR_ZSK_TIME=`TEST_ZSK_TIME` +VAR_ZSK=`TEST_ZSK` +VAR_KSK=`TEST_KSK` + + +for NEW_ZSK_ZONE in $VAR_ZSK $VAR_ZSK_TIME # Erstellt ZSK +do + cd $ZONE_DIR/$NEW_ZSK_ZONE + echo "erzeugt zsk fuer" $NEW_ZSK_ZONE + dnssec-keygen -a RSASHA1 -b 512 -n ZONE $NEW_ZSK_ZONE >> index.zsk + INDEX_ZSK=$( tail -n2 index.zsk ) + echo $INDEX_ZSK | fmt -w1 > index.zsk +done + +for NEW_KSK_ZONE in $VAR_KSK # Erstellt KSK +do + cd $ZONE_DIR/$NEW_KSK_ZONE + echo "erzeugt ksk fuer" $NEW_KSK_ZONE + dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE $NEW_KSK_ZONE >> index.ksk + INDEX_KSK=$( tail -n2 index.ksk ) + echo $INDEX_KSK | fmt -w1 > index.ksk +done + + + +for ZONE in $VAR_ZSK $VAR_KSK $VAR_ZSKTIME +do + cd $ZONE_DIR/$ZONE + + #loescht alle Schluessel die nicht in der indexdatei stehen + rm $(ls K*[key,private] | grep -v "`cat index.zsk`" | grep -v "`cat index.ksk`") 2> /dev/null + + #erzeugt ein backup und entfernt alle schluessel aus der zonedatei + mv $ZONE $ZONE.old + grep -v 'DNSKEY' $ZONE.old >> $ZONE + + #fuegt die existirenden schluessel in die zonedatei ein + cat K$ZONE.*key >> $ZONE +done diff -r 960f5e7f78eb -r 920c1a51ba0e dnssec-killkey --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dnssec-killkey Mon Jun 28 18:02:04 2010 +0200 @@ -0,0 +1,43 @@ +#!/bin/bash + +ZONE_DIR="/etc/bind/master" # ordner fuer die einzelnen zonedateiordner +ABL_ZEIT=1440 # zeit in minuten waehrend der 2 keys verwendet werden / ungefaehr doppelte TTL + +cd $ZONE_DIR +for DOMAIN in * +do + + if ( find $ZONE_DIR/$DOMAIN -name "index*" -mmin +$ABL_ZEIT >/dev/null ) # prueft die schluesselindexdateien + then # auf zeitpunkt der aenderung + + cd $ZONE_DIR/$DOMAIN + INDEX_FILE=`find . -name "index*" -mmin +$ABL_ZEIT` # schreibt eine liste INDEX_FILE aller + # dateien die vor ABL_ZEIT erstellt worden + for INDEX in $INDEX_FILE + do + + if ( wc -l $INDEX | grep ^2 > /dev/null ) # prueft die indexdatei auf anzahl an eintraegen + then + INDEX=${INDEX#./} + echo aktualisiert $INDEX in $DOMAIN + + DNS_KEY=`tail -n1 $INDEX` # speichert den letzten eintrag aus dem + # index in die variable DNS_KEY + + echo $DNS_KEY > $ZONE_DIR/$DOMAIN/$INDEX # schreibt nur die variable + # DNS_KEY in die indexdatei + + rm $(ls K*[key,private] | grep -v "`cat index.zsk`" | \ + grep -v "`cat index.ksk`") 2> /dev/null # loesche alle schluessel die nicht in der indexdatei + # stehen + mv $DOMAIN $DOMAIN.old + grep -v 'DNSKEY' $DOMAIN.old >> $DOMAIN # erzeugt ein backup und entfernt alle schluessel + # aus der zonedatei + cat K$DOMAIN.*key >>$DOMAIN # schreibt die aktuellen schluessel in die zonedatei + dnssec-signzone $DOMAIN + fi + + + done + fi +done diff -r 960f5e7f78eb -r 920c1a51ba0e dnssec-ls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dnssec-ls Mon Jun 28 18:02:04 2010 +0200 @@ -0,0 +1,22 @@ +#!/bin/bash + +ZONE_DIR="/etc/bind/master" +ZSKLIVE=60 # ZSK-Schluessellebensdauer in Tagen +KSKLIVE=360 # KSK-Schluessellebensdauer in Tagen + + +for DOMAIN in $ZONE_DIR/* +do + + STARTTIME=`ls $DOMAIN/index.zsk -l --time-style=+%s | cut -d' ' -f6` + Z_ENDTIME=$[STARTTIME + $[ZSKLIVE * 86400]] + echo ${DOMAIN##/*/} index.zsk `date -d @$Z_ENDTIME +%d.%m.%Y` | tr ' ' '\t' + + STARTTIME=`ls $DOMAIN/index.ksk -l --time-style=+%s | cut -d' ' -f6` + K_ENDTIME=$[STARTTIME + $[KSKLIVE * 86400]] + echo ${DOMAIN##/*/} index.ksk `date -d @$K_ENDTIME +%d.%m.%Y` | tr ' ' '\t' +done + + + #echo Ablauf $INDEX `date -d @$ENDTIME +%Y%m%d000000` + diff -r 960f5e7f78eb -r 920c1a51ba0e dnssec-sign --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dnssec-sign Mon Jun 28 18:02:04 2010 +0200 @@ -0,0 +1,26 @@ +#!/bin/bash + +ZONE_DIR="/etc/bind/master" +ZSKLIVE=60 + +function AENDERUNG { + for DOMAIN in $ZONE_DIR/* + do + find $DOMAIN -name "*.signed" -mmin -1440 >/dev/null && echo $DOMAIN + done +} + +AENDERUNG + +for ZONE in `AENDERUNG` +do + cd $ZONE + + DOMAIN=${ZONE##/*/} + + STARTTIME=`ls index.zsk -l --time-style=+%s | cut -d' ' -f6` + ENDTIME=$[STARTTIME + $[ZSKLIVE * 86400]] + + dnssec-signzone -e `date -d @$ENDTIME +%Y%m%d000000` $DOMAIN + +done diff -r 960f5e7f78eb -r 920c1a51ba0e killkeys --- a/killkeys Mon Jun 21 13:32:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -#!/bin/bash - -ZONE_DIR="/etc/bind/master" # ordner fuer die einzelnen zonedateiordner -ABL_ZEIT=30 # zeit in minuten waehrend der 2 keys verwendet werden / ungefaehr doppelte TTL - -cd $ZONE_DIR -for DOMAIN in * -do - - if ( find $ZONE_DIR/$DOMAIN -name "index*" -mmin +$ABL_ZEIT >/dev/null ) # prueft die schluesselindexdateien - then # auf zeitpunkt der aenderung - - cd $ZONE_DIR/$DOMAIN - INDEX_FILE=`find . -name "index*" -mmin +$ABL_ZEIT` # schreibt eine liste INDEX_FILE aller - # dateien die vor ABL_ZEIT erstellt worden - for INDEX in $INDEX_FILE - do - - if ( wc -l $INDEX | grep ^2 > /dev/null ) # prueft die indexdatei auf anzahl an eintraegen - then - INDEX=${INDEX#./} - echo aktualisiert $INDEX in $DOMAIN - - DNS_KEY=`tail -n1 $INDEX` # speichert den letzten eintrag aus dem - # index in die variable DNS_KEY - - echo $DNS_KEY > $ZONE_DIR/$DOMAIN/$INDEX # schreibt nur die variable - # DNS_KEY in die indexdatei - - rm $(ls K*[key,private] | grep -v "`cat index.zsk`" | \ - grep -v "`cat index.ksk`") 2> /dev/null # loesche alle schluessel die nicht in der indexdatei - # stehen - mv $DOMAIN $DOMAIN.old - grep -v 'DNSKEY' $DOMAIN.old >> $DOMAIN # erzeugt ein backup und entfernt alle schluessel - # aus der zonedatei - cat K$DOMAIN.*key >>$DOMAIN # schreibt die aktuellen schluessel in die zonedatei - dnssec-signzone $DOMAIN - fi - - - done - fi -done diff -r 960f5e7f78eb -r 920c1a51ba0e nagios_dnssec/check_dnssec --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagios_dnssec/check_dnssec Mon Jun 28 18:02:04 2010 +0200 @@ -0,0 +1,35 @@ +#!/bin/bash + +DOMAIN="eins.lan dreizehn.lan sieben.lan xn--fnf-hoa.lan zehn.lan acht.lan" +RETURN=0 +TESTX=6 + +for DOM in $DOMAIN +do + + + /etc/bind/bin/nagios_dnssec/check_dnssec_expiration -H 127.0.0.1 -D $DOM -w 2d >/dev/null + STATUS=$? + + case $STATUS in + 1) WARNING="$WARNING $DOM ";; + 2) CRITICAL="$CRITICAL $DOM " + esac + +done + +if [ "$CRITICAL" ] +then + echo "CRITICAL: $CRITICAL" + exit 2 +else + if [ "$WARNING" ] + then + echo "WARNING: $WARNING" + exit 1 + else + echo "OK:" + exit 0 + fi +fi + diff -r 960f5e7f78eb -r 920c1a51ba0e nagios_dnssec/check_dnssec_expiration Binary file nagios_dnssec/check_dnssec_expiration has changed