1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
1.Правим файл /etc/postfix/main.cf 2. Включить header_checks, если они ещё не включены: <span style="color: #461b7e;"> header_checks = pcre:/etc/postfix/header_checks </span> 3. Добавить в /etc/postfix/header_checks правило для замены строки, которую хочется скрыть, заменив в примере mx\.example\.com на имя нужного почтового сервера: <span style="color: #461b7e;"> /^Received: from .*?([[:space:]]+\(Authenticated sender: [^)]+\).*by mx\.example\.com .*)/ REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1])${1} </span> 4. Правило легко доработать чтобы скрывалась строка "Authenticated sender". Например, так: <span style="color: #461b7e;"> /^Received: from .*?\(Authenticated sender: [^)]+\)[[:space:]]+(by mx\.example\.com .*)/ REPLACE Received: ${1} </span> Проверить полученное регулярное выражение можно командой: <span style="color: #461b7e;"> postmap -h -q - pcre:/etc/postfix/header_checks < test_message</span> |
=====================================================
Thank you for reading this post, don't forget to subscribe!Но данное правило будет применяться ко всем входящим и исходящим сообщениям. Если необходимо поправить только для исходящих и только для одного почтового ящика, то:
cat /etc/postfix/main.cf | grep smtpd_sender_restrictions
smtpd_sender_restrictions = hash:/etc/postfix/autoreply/recipient
cat /etc/postfix/autoreply/recipient
test@test.ru FILTER deleteheader:
postmap /etc/postfix/autoreply/recipient
cat /etc/postfix/master.cf | grep deleteheader
deleteheader unix - n n - - pipe flags=F user=nobody argv=/etc/postfix/autoreply/rename_subject.py ${recipient} ${sender}
cat /etc/postfix/autoreply/rename_subject.py
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#!/usr/bin/python from email import Parser from email.parser import HeaderParser import smtplib import sys import logging from subprocess import Popen, PIPE logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', filename='/tmp/content-filter.log', filemode='a') # Get the CLI arguments. try: cli_from = sys.argv[2].lower() cli_to = sys.argv[1] logging.debug(sys.argv) logging.debug("CLI_TO %r" % sys.argv[1]) logging.debug("CLI_TO %r" % cli_to) logging.debug("CLI_FROM %r" % cli_from) logging.debug("To / From : %r" % sys.argv) except: logging.error("Invalid to / from : %r" % sys.argv) sys.exit(69) # postfix will bounce the mail. retrying bad args won't work logging.debug("From : %s, to : %r" % (cli_from, cli_to)) # Get the email content from STDIN. content = ''.join(sys.stdin.readlines()) p = Parser.Parser() #header = HeaderParser() #parsed_headers = header.parsestr(content, True) parsed = p.parsestr(content, True) #logging.debug("email source : %s" % parsed_headers.as_string()) #old_subject = parsed.get('Subject'); #return_subject = parsed.get('Return-Path'); # remove the old header, and add a new one. #try: del parsed['sender'] del parsed['mailto'] #except: # logging.debug("Cannot delete header") #parsed['Return-Path:'] = "" # convert it back to a big string. content = str(parsed) # and let's try reinjecting it into Postfix. command = ["/usr/sbin/sendmail", "-G", "-i", "-f", cli_from, cli_to] stdout = '' stderr = '' retval = 0 try : process = Popen(command, stdin=PIPE) (stdout, stderr) = process.communicate(content); retval = process.wait() if retval == 0: logging.debug("Mail resent via sendmail, stdout: %s, stderr: %s" % (stdout, stderr)) sys.exit(0) else: raise Exception("retval not zero - %s" % retval) except Exception, e: print "Error re-injecting via /usr/sbin/sendmail." logging.error("Error resending mail %s -- stdout:%s, stderr:%s, retval: %s" % (e, stdout, stderr, retval)) sys.exit(75) # tempfail, we hope. |
[/codesyntax]
тут мы удаляем заголовки:
sender
mailto
chmod +x /etc/postfix/autoreply/rename_subject.py
systemctl restart postfix