Compare commits
4 Commits
41f5f61d32
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| d8979faa06 | |||
| d407b2ecf0 | |||
| 13e1d575f9 | |||
| a246f5009f |
@@ -505,9 +505,38 @@ milter_protocol = 6
|
||||
# If you want sign mails before sending through AmaVIS, set
|
||||
# 'smtpd_milters = local:/opendkim/opendkim.sock' here and add to
|
||||
# localhost:10025 section in master.cf: 'smtpd_milters='
|
||||
#
|
||||
#
|
||||
#smtpd_milters = local:/opendkim/opendkim.sock
|
||||
smtpd_milters =
|
||||
|
||||
# Was sind non_smtpd_milters?
|
||||
#
|
||||
# non_smtpd_milters gilt für alle Postfix-Prozesse, die Mails verarbeiten, aber NICHT
|
||||
# der smtpd-Daemon sind.
|
||||
#
|
||||
# Das betrifft z. B.:
|
||||
#
|
||||
# cleanup Header/Content-Bereinigung
|
||||
# qmgr Queue-Manager
|
||||
# lmtp / smtp Auslieferung nach extern
|
||||
# local lokale Zustellung
|
||||
#
|
||||
# Das sind z. B.:
|
||||
#
|
||||
# - interne Bounces (MAILER-DAEMON)
|
||||
#
|
||||
# - Cron-Mails vom Server
|
||||
#
|
||||
# - Weiterleitungen, die Postfix selbst generiert
|
||||
#
|
||||
# - Mails, die über sendmail CLI gesendet werden
|
||||
#
|
||||
# - Mails, die Amavis über LMTP zurückgibt
|
||||
#
|
||||
# - etc.
|
||||
#
|
||||
#
|
||||
# DKIM soll auch die ausgehenden Mails signieren, die nicht über smtpd daemon versendet werden.
|
||||
non_smtpd_milters = local:/opendkim/opendkim.sock
|
||||
EOF
|
||||
postfix_needs_restart=true
|
||||
@@ -558,6 +587,11 @@ while IFS='' read -r _line || [[ -n $_line ]] ; do
|
||||
|
||||
if $_found && echo "$_line" | grep -i -q -E "^\s*-o\s+smtpd_milters=\s*" ; then
|
||||
_found=false
|
||||
if ! echo "$_line" | grep -i -q -E "^\s*-o\s+smtpd_milters=\s*local:/opendkim/opendkim.sock\s*$" ; then
|
||||
echo " -o smtpd_milters=local:/opendkim/opendkim.sock" >> "$tmp_master_file"
|
||||
_changed=true
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
if echo "$_line" | grep -i -q -E "^\s*(submission|smtps)\s+inet\s+" 2> /dev/null ; then
|
||||
@@ -578,7 +612,7 @@ if $_changed ; then
|
||||
fi
|
||||
else
|
||||
echo_skipped
|
||||
warn "Postfix (master.cf) seems already be configured."
|
||||
info "Postfix (master.cf) was not changed - seems already be configured right."
|
||||
echononl " Delete previosly saved file '/etc/postfix/master.cf'.."
|
||||
rm /etc/postfix/master.cf.$backup_date 2> $log_file
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
|
||||
@@ -30,7 +30,6 @@ config_file_name_value_parameters="
|
||||
RejectFailures|true
|
||||
Syslog|true
|
||||
SyslogFacility|mail
|
||||
TrustedAuthservIDs|$(hostname -f)
|
||||
IgnoreHosts|${opendmarc_base_dir}/ignore.hosts
|
||||
IgnoreMailFrom|${opendmarc_base_dir}/ignore.mailfrom
|
||||
IgnoreAuthenticatedClients|true
|
||||
@@ -527,11 +526,22 @@ else
|
||||
cat <<EOF > ${opendmarc_base_dir}/ignore.hosts 2> $log_file
|
||||
# /etc/opendmarc/ignore.hosts
|
||||
#
|
||||
# Diese Datei wird aktuell NICHT genutzt, da OpenDMARC
|
||||
# auf localhost:10025 arbeitet und dort immer nur
|
||||
# 127.0.0.1/::1 als Client-IP sieht.
|
||||
|
||||
# Bitte KEINE Einträge hinzufügen.
|
||||
# Aktuell hat OpenDMARC seinen Milter nur am Dienst
|
||||
# 'localhost:10025' hängen. Dort ist der Client
|
||||
# immer 127.0.0.1, nicht die externe Gegenstelle.
|
||||
#
|
||||
# Deshalb macht es in diesem Setup keinen Sinn,
|
||||
# hier IP-Adressen von externen Diensten (CRSend etc.)
|
||||
# einzutragen – sie würden nie matchen.
|
||||
#
|
||||
# WICHTIG:
|
||||
# - KEIN 127.0.0.1
|
||||
# - KEIN localhost
|
||||
# - KEIN ::1
|
||||
#
|
||||
# Eintrag dieser Adressen würde DMARC komplett deaktivieren.
|
||||
#
|
||||
# ==> Datei bleibt absichtlich leer.
|
||||
EOF
|
||||
opendmarc_needs_restart=true
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
@@ -566,8 +576,16 @@ else
|
||||
cat <<EOF > ${opendmarc_base_dir}/ignore.mailfrom 2> $log_file
|
||||
# /etc/opendmarc/ignore.mailfrom
|
||||
#
|
||||
# Wird derzeit nicht genutzt.
|
||||
# Keine Einträge hinzufügen.
|
||||
# Hier könnte man Absender-Domains von der DMARC-Prüfung
|
||||
# ausnehmen (z. B. problematische Partner-Domains).
|
||||
#
|
||||
# Aktuell ist das für dein Setup nicht notwendig.
|
||||
#
|
||||
# Beispiele (NICHT aktiv!):
|
||||
# @example.org
|
||||
# example.org
|
||||
#
|
||||
# ==> Datei bleibt absichtlich leer.
|
||||
EOF
|
||||
opendmarc_needs_restart=true
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
@@ -671,6 +689,101 @@ else
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
|
||||
|
||||
# - Edit /etc/postfix/main.cf and add a section to activate
|
||||
# - processing of e-mail through the OpenDKIM daemon:
|
||||
# -
|
||||
backup_date="$(date +%Y-%m-%d-%H%M)"
|
||||
echononl " Backup existing postfix configuration (main.cf).."
|
||||
cp -a /etc/postfix/main.cf /etc/postfix/main.cf.$backup_date 2> $log_file
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
echo_ok
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
fi
|
||||
|
||||
echononl " Activate processing of e-mail through the OpenDKIM daemon.."
|
||||
if grep -q -E "milter_default_action\s*=\s*accept" /etc/postfix/main.cf ; then
|
||||
echo_skipped
|
||||
info "Postfix (main.cf) was not changed - seems already be configured right."
|
||||
echononl " Delete previosly saved Postfix configuration.."
|
||||
rm /etc/postfix/main.cf.$backup_date 2> $log_file
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
echo_ok
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
fi
|
||||
else
|
||||
cat <<EOF >> /etc/postfix/main.cf 2> $log_file
|
||||
|
||||
# ======= Milter configuration =======
|
||||
|
||||
# OpenDKIM
|
||||
|
||||
milter_default_action = accept
|
||||
|
||||
# Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
|
||||
milter_protocol = 6
|
||||
|
||||
# Note:
|
||||
# We will sign AFTER sending through AmaVIS, just befor sending out. So
|
||||
# set 'smtpd_milters =' to an emty string here and add to localhost:10025
|
||||
# section in master.cf: 'smtpd_milters=local:/opendkim/opendkim.sock'
|
||||
#
|
||||
# If you want sign mails before sending through AmaVIS, set
|
||||
# 'smtpd_milters = local:/opendkim/opendkim.sock' here and add to
|
||||
# localhost:10025 section in master.cf: 'smtpd_milters='
|
||||
#
|
||||
#smtpd_milters = local:/opendkim/opendkim.sock
|
||||
smtpd_milters =
|
||||
|
||||
# Was sind non_smtpd_milters?
|
||||
#
|
||||
# non_smtpd_milters gilt für alle Postfix-Prozesse, die Mails verarbeiten, aber NICHT
|
||||
# der smtpd-Daemon sind.
|
||||
#
|
||||
# Das betrifft z. B.:
|
||||
#
|
||||
# cleanup Header/Content-Bereinigung
|
||||
# qmgr Queue-Manager
|
||||
# lmtp / smtp Auslieferung nach extern
|
||||
# local lokale Zustellung
|
||||
#
|
||||
# Das sind z. B.:
|
||||
#
|
||||
# - interne Bounces (MAILER-DAEMON)
|
||||
#
|
||||
# - Cron-Mails vom Server
|
||||
#
|
||||
# - Weiterleitungen, die Postfix selbst generiert
|
||||
#
|
||||
# - Mails, die über sendmail CLI gesendet werden
|
||||
#
|
||||
# - Mails, die Amavis über LMTP zurückgibt
|
||||
#
|
||||
# - etc.
|
||||
#
|
||||
#
|
||||
# DKIM soll auch die ausgehenden Mails signieren, die nicht über smtpd daemon versendet werden.
|
||||
non_smtpd_milters = local:/opendkim/opendkim.sock
|
||||
EOF
|
||||
postfix_needs_restart=true
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
echo_ok
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
|
||||
|
||||
# - Prevent Postfix from setting the DMARC Header twice (one befor
|
||||
# - and one after processing amavis
|
||||
# -
|
||||
@@ -696,24 +809,58 @@ else
|
||||
fi
|
||||
|
||||
echononl " Adjust /etc/postfix/master.cf. Set DMARC after sending throuh AmaVIS.."
|
||||
if $(grep -q -E "^\s*-o\s+smtpd_milters\s*=\s*.*opendkim.sock" /etc/postfix/master.cf 2> /dev/null) ; then
|
||||
if $(grep -q -E "^\s*-o\s+smtpd_milters\s*=\s*.*$(basename ${opendmarc_socket_file})" /etc/postfix/master.cf); then
|
||||
echo_skipped
|
||||
else
|
||||
perl -i -n -p -e "s&(^\s*-o\s+smtpd_milters\s*=.*)&\1,local:/$(basename "${opendmarc_socket_dir}")/$(basename "${opendmarc_socket_file}")&" \
|
||||
/etc/postfix/master.cf > $log_file 2>&1
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
echo_ok
|
||||
postfix_needs_restart=true
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
_found=false
|
||||
_changed=false
|
||||
tmp_master_file="/tmp/postfix_master.cf"
|
||||
> $tmp_master_file
|
||||
while IFS='' read -r _line || [[ -n $_line ]] ; do
|
||||
|
||||
if $_found && ! echo "$_line" | grep -i -q -E "^\s*-o" 2> /dev/null ; then
|
||||
echo " -o smtpd_milters=local:/opendmarc/opendmarc.sock" >> "$tmp_master_file"
|
||||
_changed=true
|
||||
_found=false
|
||||
fi
|
||||
|
||||
if $_found && echo "$_line" | grep -i -q -E "^\s*-o\s+smtpd_milters=\s*" ; then
|
||||
_found=false
|
||||
if ! echo "$_line" | grep -i -q -E "^\s*-o\s+smtpd_milters=\s*local:/opendmarc/opendmarc.sock\s*$" ; then
|
||||
echo " -o smtpd_milters=local:/opendmarc/opendmarc.sock" >> "$tmp_master_file"
|
||||
_changed=true
|
||||
continue
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if echo "$_line" | grep -i -q -E "^\s*(localhost|127.0.0.1):10025\s+inet\s+" 2> /dev/null ; then
|
||||
_found=true
|
||||
fi
|
||||
|
||||
echo "$_line" >> "$tmp_master_file"
|
||||
|
||||
done < "/etc/postfix/master.cf"
|
||||
|
||||
if $_changed ; then
|
||||
cp $tmp_master_file /etc/postfix/master.cf 2> $log_file
|
||||
postfix_needs_restart=true
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
echo_ok
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
fi
|
||||
else
|
||||
echo_skipped
|
||||
warn "Postfix is not adjusted. Complete Postfix configuration (master.cf) manually\!"
|
||||
info "Postfix (master.cf) was not changed - seems already be configured right."
|
||||
echononl " Delete previosly saved file '/etc/postfix/master.cf'.."
|
||||
rm /etc/postfix/master.cf.$backup_date 2> $log_file
|
||||
if [[ $? -eq 0 ]] ; then
|
||||
echo_ok
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
fi
|
||||
fi
|
||||
rm -f $tmp_master_file
|
||||
|
||||
echo ""
|
||||
|
||||
@@ -781,20 +928,6 @@ else
|
||||
echo_skipped
|
||||
fi
|
||||
|
||||
echo ""
|
||||
if [[ -f "/etc/postfix/master.cf.${backup_date}" ]] ; then
|
||||
if $(diff "/etc/postfix/master.cf" "/etc/postfix/master.cf.${backup_date}"> /dev/null 2>&1) ; then
|
||||
info "File \033[1m/etc/postfix/master.cf\033[m has not changed.\n\t Removing previos created backup.."
|
||||
rm "/etc/postfix/master.cf.${backup_date}"
|
||||
fi
|
||||
fi
|
||||
if [[ -f "/etc/postfix/main.cf.${backup_date}" ]] ; then
|
||||
if $(diff "/etc/postfix/main.cf" "/etc/postfix/main.cf.${backup_date}"> /dev/null 2>&1) ; then
|
||||
info "File \033[1m/etc/postfix/main.cf\033[m has not changed.\n\t Removing previos created backup.."
|
||||
rm "/etc/postfix/main.cf.${backup_date}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
rm -f "$log_file"
|
||||
|
||||
@@ -7776,6 +7776,32 @@ EOF
|
||||
|
||||
fi
|
||||
|
||||
_replace_key="sieve_max_redirects"
|
||||
_replace_val=25
|
||||
|
||||
read -r -d '' COMMENT_BLOCK <<EOF
|
||||
# sieve_max_redirects
|
||||
#
|
||||
# The maximum number of redirect actions that can be performed during a single script execution.
|
||||
#
|
||||
# Defaults to: 4
|
||||
|
||||
EOF
|
||||
|
||||
|
||||
if grep -qE "^\s*${_replace_key}\s*=" "${_conf_file}"; then
|
||||
|
||||
replace_variable "${_replace_key}" "${_replace_val}" "${_conf_file}" 2>> "${log_file}" || _failed=true
|
||||
|
||||
else
|
||||
|
||||
cat <<EOF >> "${_conf_file}" 2>> "${log_file}" || _failed=true
|
||||
|
||||
${COMMENT_BLOCK}
|
||||
${_replace_key} = ${_replace_val}
|
||||
EOF
|
||||
fi
|
||||
|
||||
|
||||
else
|
||||
|
||||
|
||||
Reference in New Issue
Block a user