--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,1 @@
+creatksk.old
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,32 @@
+zonedatei erstellen
+
+- mkdomain kundenname domainname
+- creatzsk domainname
+- creatksk domainname
+- mkready
+
+
+zonedatei loeschen
+
+- rmdomain
+- mkready
+
+
+domainen eintragen
+
+- manuel mit texteditor in master/domainname/domainname
+- update-serial ausfuehren >>> >>> >>> >>> # evt. erweitern > dnssec-signzone domainname im
+ # entsprechenden verzeichnis (master/domainname)
+ # ausfuehren
+neuen ZSK erstellen
+
+- creatzsk domainname
+
+- spaeter oder per Cron killkeys ausfuehren
+
+
+neuen KSK erstellen
+
+- creatksk domainname
+
+- spaeter oder per cron killkeys ausfuehren
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/creatkey Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,59 @@
+#!/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
+done
+
+test $# -lt $[$K_OPTION+1] && echo "SYNOPSIS: creatkey [-k] zonename" && exit 1
+ # prueft ob eine es eine domain gibt
+
+# durchgang fuer jede eingabe
+for DOMAIN in $@
+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 # erzeugt die schluessel und erstelt eine indexdatei
+ then
+ 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
+ else
+ echo "erzeugt ksk fuer" $DOMAIN
+ dnssec-keygen -a RSASHA1 -b 1024 -n ZONE -f KSK $ZONE_NAME >> index.ksk
+ INDEX_KSK=$( tail -n2 index.ksk ) ; echo $INDEX_KSK | fmt -w1 > index.ksk
+ fi
+
+ #loesche 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 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/creatksk Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+test $# -lt 1 && echo "SYNOPSIS: mkseckey domainname" && exit 1
+
+# durchgang fuer jede eingabe
+for DOMAIN in $@
+do
+ #konfiguration
+ ZONE_DIR=/etc/bind/master
+ ZONE_NAME=`idn --quiet $DOMAIN`
+
+ # pruefe die existens des ordners der zone
+ # und beende den durchlauf bei negativer pruefung
+ if [ -d $ZONE_DIR/$ZONE_NAME ]
+ then
+ cd $ZONE_DIR/$ZONE_NAME/
+
+ test -f index.ksk || touch index.ksk
+ test -f index.zsk || touch index.zsk
+
+ #erzeugt die schluessel
+ #echo "erzeugt zsk fuer" $DOMAIN
+ #dnssec-keygen -a RSASHA1 -b 512 -n ZONE $ZONE_NAME >> index.zsk
+ echo "erzeugt ksk fuer" $DOMAIN
+ dnssec-keygen -a RSASHA1 -b 1024 -n ZONE -f KSK $ZONE_NAME >> index.ksk
+
+ #aktuallisiert die schluesselindexdateien
+ # INDEX_ZSK=$( tail -n2 index.zsk ) ; echo $INDEX_ZSK | fmt -w1 > index.zsk
+ INDEX_KSK=$( tail -n2 index.ksk ) ; echo $INDEX_KSK | fmt -w1 > index.ksk
+
+ #loesche 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 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/creatzsk Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+test $# -lt 1 && echo "SYNOPSIS: mkseckey domainname" && exit 1
+
+# durchgang fuer jede eingabe
+for DOMAIN in $@
+do
+ #konfiguration
+ ZONE_DIR=/etc/bind/master
+ ZONE_NAME=`idn --quiet $DOMAIN`
+
+ # pruefe die existens des ordners der zone
+ # und beende den durchlauf bei negativer pruefung
+ if [ -d $ZONE_DIR/$ZONE_NAME ]
+ then
+ cd $ZONE_DIR/$ZONE_NAME/
+
+ test -f index.ksk || touch index.ksk
+ test -f index.zsk || touch index.zsk
+
+ #erzeugt die schluessel
+ echo "erzeugt zsk fuer" $DOMAIN
+ dnssec-keygen -a RSASHA1 -b 512 -n ZONE $ZONE_NAME >> index.zsk
+ # echo "erzeugt ksk fuer" $DOMAIN
+ # dnssec-keygen -a RSASHA1 -b 1024 -n ZONE -f KSK $ZONE_NAME >> index.ksk
+
+ #aktuallisiert die schluesselindexdateien
+ INDEX_ZSK=$( tail -n2 index.zsk ) ; echo $INDEX_ZSK | fmt -w1 > index.zsk
+ # INDEX_KSK=$( tail -n2 index.ksk ) ; echo $INDEX_KSK | fmt -w1 > index.ksk
+
+ #loesche 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 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/killkeys Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,43 @@
+#!/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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mkdomain Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,96 @@
+#! /bin/bash
+
+while getopts "d" opt; do
+ case $opt in
+ d) opt_debug=1;;
+ ?) exit 1;;
+ esac
+done
+
+if test $# -lt 2; then
+ echo "usage: $0 kundennummer domain..." >&2
+ exit
+fi
+
+
+customer="$1"; shift
+start=$(date -I)
+
+# config
+
+secondary=hh.schlittermann.de
+this_host=ns1.eins.lan #${this_host=$(hostname -f)}
+this_ip=192.168.0.1 #${this_ip=$(hostname -i)}
+this_domain=eins.lan #${this_domain=$(hostname -d)}
+
+hostmaster=${hostmaster="hostmaster.$this_domain"}
+
+primary_dir=${primary_dir=/etc/bind/zones.d}
+master_dir=${master_dir=/etc/bind/master}
+
+test -d $primary_dir || mkdir $primary_dir
+test -d $master_dir || mkdir $master_dir
+
+secondary=${secondary?}
+secondary_ip=${secondary_ip=$(dig +short $secondary)}
+
+# debug option
+if test $opt_debug; then
+ cat <<xxx
+this host: $this_host [$this_ip]
+this domain: $this_domain
+secondary: $secondary [$secondary_ip]
+hostmaster: $hostmaster
+primary directory: $primary_dir
+xxx
+ exit
+fi
+
+for utf8domain in "$@"; do
+ domain=$(idn --quiet "$utf8domain")
+
+ test -d $master_dir/$domain || mkdir $master_dir/$domain
+
+ zonefile=$master_dir/$domain/$domain
+ config=$primary_dir/$domain
+
+ echo "$domain ($utf8domain)"
+
+ test -f $zonefile && { echo "$zonefile exists. Skipping $domain" >&2; continue; }
+ test -f $config && { echo "$config exists. Skipping $domain" >&2; continue; }
+
+ cat <<xxx >$zonefile
+\$ORIGIN $domain.
+\$TTL 1d
+@ IN SOA $this_host. $hostmaster. (
+ $(date +%Y%m%d00) ; serial
+ 1d ; refresh
+ 2h ; retry
+ 7d ; expire
+ 1d ; default ttl
+)
+
+ IN TXT "invoice: $customer"
+ IN TXT "start: $start"
+ IN TXT "utf8: $utf8domain"
+
+ IN NS $this_host.
+ IN NS $secondary.
+
+xxx
+
+ cat <<xxx >$config
+zone "$domain" {
+// Start: $start
+// Invoice: $customer
+// UTF8: $utf8domain
+ type master;
+ file "$master_dir/$domain/$domain.signed";
+ allow-transfer { $secondary_ip; };
+ allow-query { any; };
+};
+
+xxx
+done
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mkready Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+BIND_DIR=/etc/bind
+
+cat $BIND_DIR/zones.d/* > $BIND_DIR/named.conf.zones
+
+rndc reload
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rmdomain Fri Jun 18 15:36:13 2010 +0200
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+ZONE=/etc/bind/master
+CONF=/etc/bind/zones.d
+
+for UTF8DOMAIN in $@
+do
+
+ DOMAIN=$(idn --quiet $UTF8DOMAIN )
+ echo $DOMAIN
+
+ test -d $ZONE/$DOMAIN && rm -r $ZONE/$DOMAIN && echo "-> Zonedatei entfernt"
+ test -f $CONF/$DOMAIN && rm $CONF/$DOMAIN && echo "-> Konfiguration entfernt"
+
+done