Created
September 7, 2018 17:43
-
-
Save BoresXP/fa1a56700e664805b644c213db1f2754 to your computer and use it in GitHub Desktop.
Script to generate keys and sign zone for DNSSEC.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [ $# -eq 0 ]; then | |
echo "Script that generates keys for domain." | |
fi | |
if [ $# -lt 1 -o $# -gt 2 ]; then | |
echo "Illegan number of arguments!" | |
echo "Usage:" | |
echo " $0 <domain> [mode]" | |
echo "Where:" | |
echo " domain - domain name." | |
echo " mode - 0 = resign zone (default), 1 = generate keys and sign zone, 2 = generate ZSK and sign zone." | |
exit | |
fi | |
confirm() { | |
# call with a prompt string or use a default | |
read -r -p "${1:-Are you sure? [y/N]} " response | |
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then | |
true | |
else | |
false | |
fi | |
} | |
MODE=$2 | |
[ -z $MODE ] && MODE=0 | |
REMODE="^[012]$" | |
if [[ ! "$MODE" =~ $REMODE ]]; then | |
echo "Invalid mode!" | |
exit | |
fi | |
KEYS=$(find . -name "K$1.+007+*.key" | sed "s/.*\(K.\+\)\.key/\1/") | |
if [ $MODE -ne 1 -a -z "$KEYS" ]; then | |
confirm "No keys found. Create new? [y/N]" && MODE=1 | |
fi | |
# Signing algorithm. Use 6 or 7 here because we calling signzone with -n option. | |
ALGO="RSASHA1-NSEC3-SHA1" | |
# Random source. Change to /dev/urandom to speed up the process. | |
RNDEV="/dev/random" | |
if [ $MODE -eq 1 -o $MODE -eq 2 ]; then | |
echo "Generating ZSK" | |
/usr/bin/ldns-keygen -a $ALGO -b 1024 -r $RNDEV "$1" | |
fi | |
if [ $MODE -eq 1 ]; then | |
echo "Generating KSK" | |
/usr/bin/ldns-keygen -a $ALGO -k -b 2048 -r $RNDEV "$1" | |
fi | |
KEYS=$(find . -name "K$1.+007+*.key" | sed "s/.*\(K.\+\)\.key/\1/") | |
echo "Generating salt" | |
SALT=$(head -c 447 $RNDEV | shasum | cut -b 1-16) | |
echo "Signing zone '$1'" | |
echo "Keys found: $KEYS" | |
# Change path to ldns-signzone wrapper. | |
/root/ldns-signzone.sh -e 20181231 -n -s $SALT -p $1 $KEYS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Скрипт подписывания файла зоны для DNSSEC.
Пример использования:
sign.sh myzone.ru
При внесении изменений в файл зоны:
sign.sh myzone.ru
Если нужно обновить ZSK:
Запустите скрипт с режимом = 2:
sign.sh myzone.com 2
ВАЖНОЕ ЗАМЕЧАНИЕ:
Не забудьте изменить путь к обёртке ldns-signzone (которая поддерживает include):
https://gist.github.com/BoresXP/4d1c2310aa22aa352e58f8c9cfb5f14b
Также у вас должен быть установлен пакет ldnsutils.