# HG changeset patch # User Andre Suess # Date 1276868173 -7200 # Node ID 51d248a512a1361d69477bff2462987e63be4947 start diff -r 000000000000 -r 51d248a512a1 .hgignore --- /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 diff -r 000000000000 -r 51d248a512a1 README --- /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 diff -r 000000000000 -r 51d248a512a1 creatkey --- /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 diff -r 000000000000 -r 51d248a512a1 creatksk --- /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 diff -r 000000000000 -r 51d248a512a1 creatzsk --- /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 diff -r 000000000000 -r 51d248a512a1 killkeys --- /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 diff -r 000000000000 -r 51d248a512a1 mkdomain --- /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 <&2; continue; } + test -f $config && { echo "$config exists. Skipping $domain" >&2; continue; } + + cat <$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 <$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 + + diff -r 000000000000 -r 51d248a512a1 mkready --- /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 diff -r 000000000000 -r 51d248a512a1 rmdomain --- /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