Wenn Sie eine Mailingliste mit Mailman betreiben, möchten Sie möglicherweise alle aus Ihrer Organisation gesendeten E-Mails akzeptieren und zustellen. Zum Beispiel, wenn Sie Mailman als Kontaktstelle für Ihre Organisation verwenden. In diesem Artikel werden wir das Modul zur Beurteilung von Moderatoren von Mailman erweitern, um zu erklären, wie alle von einem bestimmten Mailserver gesendeten E-Mails akzeptiert und zugestellt werden.
Um E-Mails von Teilnehmern zu erhalten, die keine Mailinglisten sind, wenn Sie eine Mailingliste mit Mailman ausführen, setzen Sie entweder (1) die Option generic_nonmember_action auf "Approve" oder (2) die Option accept_these_nonmembers auf einen geeigneten regulären Ausdruck. Es gibt Optionen wie. Ersteres (1) akzeptiert jedoch alle E-Mails, und letzteres (2) stützt sich auch auf den leicht zu fälschenden Header From, wodurch er für Spam anfällig wird.
In diesem Artikel,
Basierend auf der Annahme, dass wir basierend auf dem Inhalt des Headers "Received" die Einstellung einführen, um alle vom sendenden Mailserver gesendeten E-Mails zuzustellen.
Geben Sie den folgenden Code als "/ usr / lib / mailman / Mailman / Handlers / TrustedServerModerate.py" ein. Bitte lesen Sie den Pfad / usr / lib / mailman /
entsprechend Ihrer Umgebung.
TrustedServerModerate.py
# Copyright (C) 2015 by TSUCHIYA Masatoshi <[email protected]>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
"""This module implements server based moderation. If a user used one
of trusted remote servers to send his/her message, and only if it has
been delivered through trusted local servers, it is approved as a
trusted message. Otherwise, it will be handled by the default rule of
Mailman.
USAGE:
Add following codes to mm_cfg.py:
TRUSTEDLOCALSERVER = [ "127.0.0.1",
"^192\.168\.10\." ]
TRUSTEDREMOTESERVER = [ "192.168.10.1" ]
GLOBAL_PIPELINE[GLOBAL_PIPELINE.index('Moderate')] = 'TrustedServerModerate'
"""
import re
from Mailman import mm_cfg
from Mailman.Handlers.Moderate import process as moderate_process
from Mailman.Logging.Syslog import syslog
def process(mlist, msg, msgdata):
def extract_ipaddr(str):
m = re.search('\[(\d+\.\d+\.\d+\.\d+)\]', str)
if m:
return m.group(1)
m = re.search('\[((?:[a-fA-F0-9]{4}:+)+[a-fA-F0-9]{4})\]', str)
if m:
return m.group(1)
if '[IPv6:::1]'in str:
return '127.0.0.1'
else:
return ''
def matches_p(ipaddr, patterns):
for pat in patterns:
if pat.startswith('^'):
if re.match(pat, ipaddr):
return 1
else:
if pat==ipaddr:
return 1
return 0
def trusted_message_p(message):
received=[extract_ipaddr(x) for x in message.get_all('Received') if re.match("^from", x)]
syslog('error', 'Servers which deliver this message are %s', ' / '.join(received))
received.reverse()
try:
while received and matches_p(received[-1], mm_cfg.TRUSTEDLOCALSERVER):
received.pop()
remote=0
while received and matches_p(received[-1], mm_cfg.TRUSTEDREMOTESERVER):
received.pop()
remote+=1
if remote > 0:
if len(received) <= 1:
syslog('error', 'This message is trusted')
return 1
else:
return 0
else:
return 0
except AttributeError:
return 0
if mlist.generic_nonmember_action == 1 and trusted_message_p(msg):
return
return moderate_process(mlist, msg, msgdata)
Schreiben Sie dann die folgenden drei Spezifikationen in / etc / mailman / mm_cfg.py
. Geben Sie zunächst die IP-Adresse des Postausgangsservers an, der von den Mitgliedern wie folgt verwendet wird.
TRUSTEDREMOTESERVER = [ "192.168.10.1",
"192.168.10.2" ]
Darüber hinaus wird in den Einstellungen dieses Artikels anhand der hier angegebenen Via-Informationen des sendenden Mailservers festgelegt, ob E-Mails zugestellt werden sollen oder nicht. Daher muss der Postausgangsserver nur die E-Mails akzeptieren, die durch die Methode wie SMTP AUTH authentifiziert wurden.
Geben Sie zweitens die IP-Adresse eines bekannten und vertrauenswürdigen Mailservers vom Postausgangsserver an, um Mailman wie folgt zu erreichen:
TRUSTEDLOCALSERVER = [ "127.0.0.1",
"192.168.10.3",
"192.168.10.4",
"192.168.10.5" ]
Beachten Sie, dass ein bekannter und vertrauenswürdiger Mailserver die IP-Adresse des Servers enthalten muss, auf dem Mailman ausgeführt wird.
Wenn am Anfang der Zeichenfolge ein ^ steht, wird dies als regulärer Ausdruck interpretiert, sodass die obige Spezifikation der folgenden Spezifikation entspricht.
TRUSTEDREMOTESERVER = [ "^192\.168\.10\.[12]$" ]
TRUSTEDLOCALSERVER = [ "127.0.0.1", "^192\.168\.10\.[345]$" ]
Drittens geben Sie an, dass Sie das obige Modul anstelle von "Mailman / Handlers / Moderate.py" verwenden möchten, das mit Mailman selbst geliefert wird.
GLOBAL_PIPELINE[GLOBAL_PIPELINE.index('Moderate')] = 'TrustedServerModerate'
Im obigen Einstellungsbeispiel werden E-Mails, die auf der folgenden Route gesendet wurden, akzeptiert und zugestellt.
MUA
↓
Postausgangsserver(192.168.10.1 oder 2)
↓
Relay Mail Server(192.168.10.3 oder 4)
↓
Mailman-Server(192.168.10.5)
Im Fall der folgenden Route wird sie jedoch nicht zugestellt, da die Benutzerauthentifizierung durch den sendenden Mailserver nicht durchgeführt wurde.
MUA
↓
Unbekannter Mailserver
↓
Postausgangsserver(192.168.10.1 oder 2)
↓
Relay Mail Server(192.168.10.3 oder 4)
↓
Mailman-Server(192.168.10.5)
Im Fall der folgenden Route wird sie auch nicht geliefert, da die Möglichkeit besteht, dass der empfangene Header gefälscht ist.
MUA
↓
Postausgangsserver(192.168.10.1 oder 2)
↓
Unbekannter Mailserver
↓
Relay Mail Server(192.168.10.3 oder 4)
↓
Mailman-Server(192.168.10.5)
Das heißt, der sendende Mailserver, der Relay-Mailserver und der Mailman-Server stehen unter der Kontrolle der eigenen Organisation, und die Routeninformationen werden unter der Annahme extrahiert, dass der vom Mailserver hinzugefügte empfangene Header zuverlässig ist und der sendende Mailserver verwendet wird. Es ist so eingestellt, dass nur vom Benutzer authentifizierte E-Mails zugestellt werden.
Recommended Posts