#!/bin/bash # info: Add a domain to exim4 and spamassassin blacklist # usage: v-blacklist-email-domain DOMAIN SUBDOMAIN(YES/NO) #----------------------------------------------------------# # Variable&Function # #----------------------------------------------------------# whoami=$(whoami) if [ "$whoami" != "root" ]; then echo "You must be root to execute this script" exit 1 fi # Importing system environment source /etc/profile # Determine Debian version and set SpamAssassin service name release=$(cat /etc/debian_version | tr "." "\n" | head -n1) if [ "$release" -lt 12 ]; then SPAMD_SERVICE="spamassassin.service" else SPAMD_SERVICE="spamd.service" fi DENY_SENDERS_FILE="/etc/exim4/deny_senders" SPAMASSASSIN_FILE="/etc/spamassassin/local.cf" # Flags to track changes SPAMASSASSIN_CHANGED=false # Function to check if a domain already exists in a file check_domain_exists() { local domain=$1 local file=$2 grep -qE "^${domain}$" "$file" } # Function to check if a SpamAssassin entry already exists check_spamassassin_exists() { local entry=$1 local file=$2 grep -qF "$entry" "$file" } # Function to add domain to file add_domain_to_file() { local domain=$1 local file=$2 echo "$domain" >> "$file" } # Display usage if no arguments are provided if [ $# -lt 2 ]; then echo "Usage: v-blacklist-domain DOMAIN SUBDOMAIN(YES/NO)" exit 1 fi #----------------------------------------------------------# # Action # #----------------------------------------------------------# DOMAIN=$1 SUBDOMAIN=${2^^} # Convert to uppercase for consistency (YES/NO) # Validate SUBDOMAIN parameter if [[ "$SUBDOMAIN" != "YES" && "$SUBDOMAIN" != "NO" ]]; then echo "Invalid parameter for SUBDOMAIN. Use YES or NO." exit 1 fi # Prepare entries for Exim4 EXIM_ENTRY_MAIN="$DOMAIN" EXIM_ENTRY_SUB="*.$DOMAIN" # Prepare entries for SpamAssassin SPAMASSASSIN_ENTRY_MAIN="blacklist_from *@${DOMAIN}" SPAMASSASSIN_ENTRY_SUB="blacklist_from *.$DOMAIN" #----------------------------------------------------------# # Exim4 Blacklist # #----------------------------------------------------------# echo "Updating $DENY_SENDERS_FILE..." if ! check_domain_exists "$EXIM_ENTRY_MAIN" "$DENY_SENDERS_FILE"; then add_domain_to_file "$EXIM_ENTRY_MAIN" "$DENY_SENDERS_FILE" echo "Added $EXIM_ENTRY_MAIN to $DENY_SENDERS_FILE." else echo "$EXIM_ENTRY_MAIN already exists in $DENY_SENDERS_FILE." fi if [ "$SUBDOMAIN" == "YES" ]; then if ! check_domain_exists "$EXIM_ENTRY_SUB" "$DENY_SENDERS_FILE"; then add_domain_to_file "$EXIM_ENTRY_SUB" "$DENY_SENDERS_FILE" echo "Added $EXIM_ENTRY_SUB to $DENY_SENDERS_FILE." else echo "$EXIM_ENTRY_SUB already exists in $DENY_SENDERS_FILE." fi fi #----------------------------------------------------------# # SpamAssassin Blacklist # #----------------------------------------------------------# echo "Updating $SPAMASSASSIN_FILE..." if ! check_spamassassin_exists "$SPAMASSASSIN_ENTRY_MAIN" "$SPAMASSASSIN_FILE"; then add_domain_to_file "$SPAMASSASSIN_ENTRY_MAIN" "$SPAMASSASSIN_FILE" echo "Added $SPAMASSASSIN_ENTRY_MAIN to $SPAMASSASSIN_FILE." SPAMASSASSIN_CHANGED=true else echo "$SPAMASSASSIN_ENTRY_MAIN already exists in $SPAMASSASSIN_FILE." fi if [ "$SUBDOMAIN" == "YES" ]; then if ! check_spamassassin_exists "$SPAMASSASSIN_ENTRY_SUB" "$SPAMASSASSIN_FILE"; then add_domain_to_file "$SPAMASSASSIN_ENTRY_SUB" "$SPAMASSASSIN_FILE" echo "Added $SPAMASSASSIN_ENTRY_SUB to $SPAMASSASSIN_FILE." SPAMASSASSIN_CHANGED=true else echo "$SPAMASSASSIN_ENTRY_SUB already exists in $SPAMASSASSIN_FILE." fi fi if [ "$SPAMASSASSIN_CHANGED" == "true" ]; then systemctl restart "$SPAMD_SERVICE" echo "SpamAssassin service ($SPAMD_SERVICE) restarted." fi #----------------------------------------------------------# # Done # #----------------------------------------------------------# exit 0