Last active
September 29, 2022 02:06
-
-
Save eklex/dfa6c1c1c46a94bf1538c51208a6bf98 to your computer and use it in GitHub Desktop.
Update DNS blacklist for dnscrypt-proxy
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 | |
DNSCRYPT_DIR="/config/dnscrypt-proxy" | |
DNSCRYPT_UTILS_DIR="$DNSCRYPT_DIR/utils" | |
DNSCRYPT_BIN="$DNSCRYPT_DIR/dnscrypt-proxy" | |
LOGGING_DIR="/var/log" | |
export PATH=$PATH:/usr/sbin:$DNSCRYPT_DIR | |
NOW=`date +"%Y-%m-%d %T"` | |
START_TIME=`date +"%T"` | |
SCRIPT_FILE_NAME=`basename "$0"` | |
LOG_FILE_NAME="${SCRIPT_FILE_NAME%.*}.log" | |
STATUS=0 | |
CMD_RETRY_CNT=10 | |
BLACKLIST_GENERATOR="$DNSCRYPT_UTILS_DIR/generate-domains-blacklist.py" | |
BLACKLIST_ORIG_CONF_FILE_PATH="$DNSCRYPT_UTILS_DIR/domains-blacklist.conf" | |
TIME_BLACKLIST_CONF_FILE_PATH="$DNSCRYPT_UTILS_DIR/domains-time-restricted.txt" | |
WHITELIST_CONF_FILE_PATH="$DNSCRYPT_UTILS_DIR/domains-whitelist.txt" | |
BLACKLIST_FINAL_CONF_FILE_PATH="/tmp/dns-blacklist.conf" | |
WHITE_LIST_FILE_PATH="$DNSCRYPT_DIR/whitelist.txt" | |
BLACKLIST_FILE_PATH="$DNSCRYPT_DIR/blacklist.txt" | |
EXTRA_BLACKLIST_LIST_OF_DOMAIN_URL=( | |
#"https://v.firebog.net/hosts/lists.php?type=tick" | |
) | |
EXTRA_BLACKLIST_DOMAIN_URL=( | |
#"https://raw.githubusercontent.com/kboghdady/youTube_ads_4_pi-hole/master/youtubelist.txt" | |
"https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/dnscrypt/spy.txt" | |
) | |
# Log everything to syslog | |
exec 1> >(logger -s -t $(basename $0)) 2>&1 | |
# Notify logger that the script starts | |
logger -s "$SCRIPT_FILE_NAME [$NOW] Updating dnscrypt blacklists..." 2>> "$LOGGING_DIR/$LOG_FILE_NAME" | |
logger -s "$SCRIPT_FILE_NAME [$NOW] $PATH" 2>> "$LOGGING_DIR/$LOG_FILE_NAME" | |
# Reset final configuration | |
>$BLACKLIST_FINAL_CONF_FILE_PATH | |
# Save time in config file | |
echo "# $NOW" >> $BLACKLIST_FINAL_CONF_FILE_PATH | |
# Start with local configuration | |
cat $BLACKLIST_ORIG_CONF_FILE_PATH >> $BLACKLIST_FINAL_CONF_FILE_PATH | |
# Download files with list of URLs | |
for item in "${EXTRA_BLACKLIST_LIST_OF_DOMAIN_URL[@]}"; do | |
curl -s "$item" >> $BLACKLIST_FINAL_CONF_FILE_PATH | |
done | |
# Add extra URLs | |
for item in "${EXTRA_BLACKLIST_DOMAIN_URL[@]}"; do | |
echo "$item" >> $BLACKLIST_FINAL_CONF_FILE_PATH | |
done | |
# Generate blacklist | |
python $BLACKLIST_GENERATOR -i -t 10 -c "$BLACKLIST_FINAL_CONF_FILE_PATH" -r "$TIME_BLACKLIST_CONF_FILE_PATH" -w "$WHITELIST_CONF_FILE_PATH" > "$BLACKLIST_FILE_PATH" | |
# Copy whitelist | |
cat "$WHITELIST_CONF_FILE_PATH" > "$WHITE_LIST_FILE_PATH" | |
# Add time to blacklist and whitelist | |
echo "# $NOW" >> "$BLACKLIST_FILE_PATH" | |
echo "# $NOW" >> "$WHITE_LIST_FILE_PATH" | |
# Restart DNS service | |
logger -s "$SCRIPT_FILE_NAME [$NOW] Restarting dnscrypt service..." 2>> "$LOGGING_DIR/$LOG_FILE_NAME" | |
cmd_retry=0 | |
$DNSCRYPT_BIN -service restart >> "$LOGGING_DIR/$LOG_FILE_NAME" 2>&1 | |
while [ "$?" != 0 ] && [ $cmd_retry -lt $CMD_RETRY_CNT ]; do | |
let "cmd_retry++" | |
echo "Failed to restart dnscrypt service...$cmd_retry" | |
logger -s "$SCRIPT_FILE_NAME [$NOW] Failed to restart dnscrypt service (try #$cmd_retry)" 2>> "$LOGGING_DIR/$LOG_FILE_NAME" | |
STATUS=1 | |
sleep 60 | |
$DNSCRYPT_BIN -service restart >> "$LOGGING_DIR/$LOG_FILE_NAME" 2>&1 | |
done | |
if [ $cmd_retry -lt $CMD_RETRY_CNT ]; then | |
STATUS=0 | |
fi | |
END_TIME=`date +"%T"` | |
if [ $STATUS != 0 ]; then | |
logger -s "$SCRIPT_FILE_NAME [$NOW] $START_TIME-$END_TIME: Failed to update blacklists" 2>> "$LOGGING_DIR/$LOG_FILE_NAME" | |
else | |
logger -s "$SCRIPT_FILE_NAME [$NOW] $START_TIME-$END_TIME: Successfully updated blacklists" 2>> "$LOGGING_DIR/$LOG_FILE_NAME" | |
fi | |
exit $STATUS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment