Răsfoiți Sursa

Feature(multi ip):When adding/rebuilding a mail domain configure exim server to use web domain ip if present

Robert Zollner 6 ani în urmă
părinte
comite
4119d4345b

+ 14 - 1
bin/v-add-mail-domain

@@ -33,7 +33,6 @@ fi
 # Additional argument formatting
 # Additional argument formatting
 format_domain
 format_domain
 format_domain_idn
 format_domain_idn
-get_user_ip
 
 
 
 
 #----------------------------------------------------------#
 #----------------------------------------------------------#
@@ -57,6 +56,15 @@ check_hestia_demo_mode
 #                       Action                             #
 #                       Action                             #
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
+# Inherit web domain local ip address
+domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
+local_ip=$(get_real_ip "$domain_ip")
+if [ ! -z "$local_ip" ]; then
+    is_ip_valid "$local_ip" "$user"
+else
+    get_user_ip
+fi
+
 # Generating timestamp
 # Generating timestamp
 new_timestamp
 new_timestamp
 
 
@@ -88,6 +96,11 @@ if [[ "$MAIL_SYSTEM" =~ exim ]]; then
     ln -s $HOMEDIR/$user/conf/mail/$domain \
     ln -s $HOMEDIR/$user/conf/mail/$domain \
         /etc/$MAIL_SYSTEM/domains/$domain_idn
         /etc/$MAIL_SYSTEM/domains/$domain_idn
 
 
+    # Seeting outgoing ip address
+    if [ ! -z "$local_ip" ]; then
+        echo "$local_ip" > $HOMEDIR/$user/conf/mail/$domain/ip
+    fi
+
     # Adding antispam protection
     # Adding antispam protection
     if [ "$antispam" = 'yes' ]; then
     if [ "$antispam" = 'yes' ]; then
         touch $HOMEDIR/$user/conf/mail/$domain/antispam
         touch $HOMEDIR/$user/conf/mail/$domain/antispam

+ 1 - 0
bin/v-rebuild-mail-domain

@@ -17,6 +17,7 @@ domain=$2
 source $HESTIA/func/main.sh
 source $HESTIA/func/main.sh
 source $HESTIA/func/domain.sh
 source $HESTIA/func/domain.sh
 source $HESTIA/func/rebuild.sh
 source $HESTIA/func/rebuild.sh
+source $HESTIA/func/ip.sh
 source $HESTIA/conf/hestia.conf
 source $HESTIA/conf/hestia.conf
 
 
 # Define mail user
 # Define mail user

+ 1 - 0
bin/v-rebuild-mail-domains

@@ -16,6 +16,7 @@ user=$1
 source $HESTIA/func/main.sh
 source $HESTIA/func/main.sh
 source $HESTIA/func/domain.sh
 source $HESTIA/func/domain.sh
 source $HESTIA/func/rebuild.sh
 source $HESTIA/func/rebuild.sh
+source $HESTIA/func/ip.sh
 source $HESTIA/conf/hestia.conf
 source $HESTIA/conf/hestia.conf
 
 
 # Define mail user
 # Define mail user

+ 15 - 0
func/rebuild.sh

@@ -445,6 +445,15 @@ rebuild_mail_domain_conf() {
         domain_idn=$domain
         domain_idn=$domain
     fi
     fi
 
 
+    # Inherit web domain local ip address
+    local domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
+    local local_ip=$(get_real_ip "$domain_ip")
+    if [ ! -z "$local_ip" ]; then
+        is_ip_valid "$local_ip" "$user"
+    else
+        get_user_ip
+    fi
+
     if [ "$SUSPENDED" = 'yes' ]; then
     if [ "$SUSPENDED" = 'yes' ]; then
         SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
         SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
     fi
     fi
@@ -466,10 +475,16 @@ rebuild_mail_domain_conf() {
         rm -f $HOMEDIR/$user/conf/mail/$domain/protection
         rm -f $HOMEDIR/$user/conf/mail/$domain/protection
         rm -f $HOMEDIR/$user/conf/mail/$domain/passwd
         rm -f $HOMEDIR/$user/conf/mail/$domain/passwd
         rm -f $HOMEDIR/$user/conf/mail/$domain/fwd_only
         rm -f $HOMEDIR/$user/conf/mail/$domain/fwd_only
+        rm -f $HOMEDIR/$user/conf/mail/$domain/ip
         touch $HOMEDIR/$user/conf/mail/$domain/aliases
         touch $HOMEDIR/$user/conf/mail/$domain/aliases
         touch $HOMEDIR/$user/conf/mail/$domain/passwd
         touch $HOMEDIR/$user/conf/mail/$domain/passwd
         touch $HOMEDIR/$user/conf/mail/$domain/fwd_only
         touch $HOMEDIR/$user/conf/mail/$domain/fwd_only
 
 
+        # Seeting outgoing ip address
+        if [ ! -z "$local_ip" ]; then
+            echo "$local_ip" > $HOMEDIR/$user/conf/mail/$domain/ip
+        fi
+
         # Adding antispam protection
         # Adding antispam protection
         if [ "$ANTISPAM" = 'yes' ]; then
         if [ "$ANTISPAM" = 'yes' ]; then
             touch $HOMEDIR/$user/conf/mail/$domain/antispam
             touch $HOMEDIR/$user/conf/mail/$domain/antispam

+ 2 - 0
install/deb/exim/exim4.conf.template

@@ -72,6 +72,7 @@ DKIM_DOMAIN = ${lc:${domain:$h_from:}}
 DKIM_FILE = /etc/exim4/domains/${lc:${domain:$h_from:}}/dkim.pem
 DKIM_FILE = /etc/exim4/domains/${lc:${domain:$h_from:}}/dkim.pem
 DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
 DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
 
 
+OUTGOING_IP = /etc/exim4/domains/$sender_address_domain/ip
 
 
 
 
 ######################################################################
 ######################################################################
@@ -330,6 +331,7 @@ remote_smtp:
   dkim_private_key = DKIM_PRIVATE_KEY
   dkim_private_key = DKIM_PRIVATE_KEY
   dkim_canon = relaxed
   dkim_canon = relaxed
   dkim_strict = 0
   dkim_strict = 0
+  interface = ${if exists{OUTGOING_IP}{${readfile{OUTGOING_IP}}}}
 
 
 procmail:
 procmail:
   driver = pipe
   driver = pipe