feat(common): add host-tree file/template overrides and skip global items when host overrides exist

This commit is contained in:
2026-07-27 21:55:27 +02:00
parent b40d3249fb
commit f39babaf5d
33 changed files with 1148 additions and 43 deletions
@@ -160,10 +160,29 @@ id=RATE_UNKNOWN_CLIENT_ADDR
client_name==unknown
action=rate(client_address/5/300/450 4.7.1 only 5 recipients per 5 minutes allowed)
# Ausnahme vom 50/Minute-Limit: IPs aus der Whitelist-Datei
# duerfen bis zu 100 Nachrichten/Minute senden. 'final=yes'
# sorgt dafuer, dass fuer diese IPs die nachfolgende
# RATE_CLIENT_ADDR-Regel NICHT mehr zusaetzlich ausgewertet wird.
id=HIGH_RATE_CLIENT_ADDR
&&INCOMING
client_address=cidr:/etc/postfix/postfwd.high_rate_ip
action=rate($$client_address/100/60/421 421 4.7.0 Too many connections (150/m) from $$client_address)
final=yes
# Ausnahme vom 50/Minute-Limit auf Basis des Client-Hostnamens
# (Reverse-DNS/PTR). 'final=yes' verhindert die zusaetzliche
# Auswertung der nachfolgenden RATE_CLIENT_ADDR-Regel.
id=HIGH_RATE_CLIENT_NAME
&&INCOMING
client_name=pcre:/etc/postfix/postfwd.high_rate_hostname
action=rate($$client_address/100/60/421 421 4.7.0 Too many connections (150/m) from $$client_address ($$client_name))
final=yes
# Block clients (ip-addresses) sending more than 50 messages per minute exceeded. Error:RATE_CLIENT)
id=RATE_CLIENT_ADDR
&&INCOMING
action=rate($$client_address/50/60/421 421 4.7.0 Too many connections from $$client_address)
action=rate($$client_address/50/60/421 421 4.7.0 Too many connections (50/m) from $$client_address)
# Block messages with more than 50 recipients
id=BLOCK_MSG_RCPT
@@ -172,7 +191,7 @@ id=BLOCK_MSG_RCPT
recipient_count=90
action=REJECT Too many recipients, please reduce to less than 90 or consider using a mailing list. Error: BLOCK_MSG_RCPT
# Higher rate limit for users in exception list
# Higher rate limit for users in exception list (limit: 500 messages/hour)
id=RATE_MSG_EXCEPTION
&&INCOMING
&&SASL_AUTH
@@ -185,7 +204,7 @@ id=RATE_MSG
&&SASL_AUTH
action=rate($$sasl_username/50/3600/450 4.7.1 Number messages per hour exceeded. Error:RATE_MSG)
# Higher recipient rate limit for specific users from file
# Higher recipient rate limit for specific users from file (limit: 1000 recipients total/hour)
id=RATE_RCPT_HIGH
&&INCOMING
&&SASL_AUTH
@@ -0,0 +1,38 @@
# *** [ Ansible managed: DO NOT EDIT DIRECTLY ] ***
# ============================================================
# Whitelist fuer erhoehtes Rate-Limit (100 Nachrichten/Minute)
# auf Basis des Client-Hostnamens (Reverse-DNS/PTR-Eintrag),
# statt der Standard-Grenze von 50/Minute aus RATE_CLIENT_ADDR
#
# Format: PCRE-regulaerer Ausdruck pro Zeile (kein Wildcard/Glob!),
# postfwd2 vergleicht jede Zeile gegen den von Postfix aufgeloesten
# 'client_name'-Wert (PTR-Eintrag der Client-IP).
# Leerzeilen und Zeilen, die mit '#' beginnen, werden ignoriert.
#
# Beispiele:
# /^buchsys3\.buchsys\.de$/ -> nur dieser eine Hostname
# /\.buchsys\.de$/ -> alle Subdomains von buchsys.de
# (z.B. buchsys3.buchsys.de,
# mail.buchsys.de, etc.)
#
# WICHTIG:
# - Diese Regel greift NUR, wenn Reverse-DNS fuer die jeweilige
# IP sauber konfiguriert ist und der PTR-Eintrag auf das Muster
# passt. Pruefe den tatsaechlichen 'client_name'-Wert vorher in
# den postfwd2-Logs.
# - Ein zu breites Muster (z.B. /buchsys\.de/ ohne Anker) kann auch
# unerwuenschte Hosts matchen (z.B. "evil-buchsys.de.attacker.com").
# Deshalb immer mit '^' und '$' bzw. '\.' vor der Domain arbeiten.
# - Jeder hier gematchte Hostname umgeht das strengere 50er-Limit
# und erlaubt bis zu 100 Nachrichten/Minute. Bitte nur Muster
# eintragen, denen du tatsaechlich vertraust.
# - Nach Aenderungen an dieser Datei postfwd2 neu laden/starten:
# systemctl restart postfwd2
# - Diese Datei wird per 'pcre:' Lookup direkt in postfwd.cf
# referenziert, siehe Regel 'HIGH_RATE_CLIENT_NAME'.
# - Die IP-basierte Regel (HIGH_RATE_CLIENT_ADDR) ist zuverlaessiger
# und sollte die primaere Loesung sein; diese Hostname-Regel
# eignet sich vor allem als Ergaenzung bei wechselnden IPs.
# ============================================================
@@ -0,0 +1,32 @@
# *** [ Ansible managed: DO NOT EDIT DIRECTLY ] ***
# ============================================================
# Whitelist fuer erhoehtes Rate-Limit (100 Nachrichten/Minute)
# statt der Standard-Grenze von 50/Minute aus RATE_CLIENT_ADDR
#
# Hier werden IP-Adressen bzw. CIDR-Netze von vertrauenswuerdigen
# Absende-Systemen eingetragen, die routinemaessig hoehere
# Mailmengen ueber eine feste Absender-IP verschicken, z. B.
# Kunden-Mailserver, angebundene Fachanwendungen/Buchungssysteme,
# Newsletter- oder Transaktionsmail-Versender.
#
# Format: eine IP-Adresse oder ein CIDR-Netz pro Zeile.
# Leerzeilen und Zeilen, die mit '#' beginnen, werden ignoriert.
# IPv4 und IPv6 werden unterstuetzt.
#
# Beispiele:
# 116.202.85.120
# 203.0.113.0/24
#
# WICHTIG:
# - Jede hier eingetragene IP umgeht das strengere 50er-Limit
# und darf bis zu 100 Nachrichten/Minute senden. Bitte nur
# IPs eintragen, denen du tatsaechlich vertraust (kompromittierte
# oder falsch eingetragene Systeme koennten sonst zum offenen
# Spam-Verteiler werden).
# - Nach Aenderungen an dieser Datei postfwd2 neu laden/starten,
# damit die Aenderung sicher greift:
# systemctl restart postfwd2
# - Diese Datei wird per 'cidr:' Lookup direkt in postfwd.cf
# referenziert, siehe Regel 'HIGH_RATE_CLIENT_ADDR'.
# ============================================================