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 |
Скрипт подписывания файла зоны для DNSSEC.
Пример использования:
- Создайте файл зоны. Лучше сего назвать его по имени зоны - myzone.ru.
- Запустите скрипт:
sign.sh myzone.ru
- Скрипт создаст ключи и файл подписанной зоны - myzone.ru.signed.
- Используйте последний файл в сервере DNS.
При внесении изменений в файл зоны:
- Внесите изменения в первичный файл. Не забудьте изменить serial зоны.
- Снова запустите скрипт:
sign.sh myzone.ru
- Он переподпишет зону (существующими ключами, которые он создал ранее) и обновит файл .signed.
- Перезагрузите зону в сервере DNS.
Если нужно обновить ZSK:
Запустите скрипт с режимом = 2:
sign.sh myzone.com 2
ВАЖНОЕ ЗАМЕЧАНИЕ:
Не забудьте изменить путь к обёртке ldns-signzone (которая поддерживает include):
https://gist.github.com/BoresXP/4d1c2310aa22aa352e58f8c9cfb5f14b
Также у вас должен быть установлен пакет ldnsutils.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Typical usage:
sign.sh myzone.com
If you want change a zone:
sign.sh myzone.com
If you need to recreate ZSK:
Run script with mode = 2:
sign.sh myzone.com 2
IMPORTANT NOTE:
Change path to ldns-signzone wrapper (that supports include) in the bottom the the file.
https://gist.github.com/BoresXP/4d1c2310aa22aa352e58f8c9cfb5f14b
You need to have package ldnsutils installed in your system.