Ich versuche, ein Mail-Relay für ein altes, launisches Voicemail-System einzurichten. Ich habe Postfix auf einer VM eingerichtet, das Relaying aktiviert und überprüft, ob ich mich aus demselben Subnetz per Telnet mit Port 25 verbinden und E-Mails senden kann, wohin ich will. Hier ist meine main.cf:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_helo_required = no
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mailer
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mailer, localhost.localdomain, localhost
relayhost =
mynetworks = 192.168.1.0/24 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Leider versucht die alte Voicemail immer, ein bloßes EHLO zu senden, bevor sie E-Mails sendet. Ich habe das Debugging für diesen Host aktiviert und das hier ist, was ich sehe:
Oct 13 11:48:57 mailer postfix/smtpd[2201]: connect from unknown[192.168.1.98]
Oct 13 11:48:57 mailer postfix/smtpd[2201]: smtp_stream_setup: maxtime=300 enable_deadline=0
Oct 13 11:48:57 mailer postfix/smtpd[2201]: match_hostname: unknown ~? 192.168.1.0/24
Oct 13 11:48:57 mailer postfix/smtpd[2201]: match_hostaddr: 192.168.1.98 ~? 192.168.1.0/24
Oct 13 11:48:57 mailer postfix/smtpd[2201]: > unknown[192.168.1.98]: 220 mailer ESMTP Postfix (Ubuntu)
Oct 13 11:48:57 mailer postfix/smtpd[2201]: watchdog_pat: 0x7f17a114afe0
Oct 13 11:48:57 mailer postfix/smtpd[2201]: < unknown[192.168.1.98]: EHLO
Oct 13 11:48:57 mailer postfix/smtpd[2201]: > unknown[192.168.1.98]: 501 Syntax: EHLO hostname
Oct 13 11:48:57 mailer postfix/smtpd[2201]: watchdog_pat: 0x7f17a114afe0
Oct 13 11:48:58 mailer postfix/smtpd[2201]: < unknown[192.168.1.98]: HELO
Oct 13 11:48:58 mailer postfix/smtpd[2201]: > unknown[192.168.1.98]: 501 Syntax: HELO hostname
Oct 13 11:48:58 mailer postfix/smtpd[2201]: watchdog_pat: 0x7f17a114afe0
Oct 13 11:48:58 mailer postfix/smtpd[2201]: < unknown[192.168.1.98]: QUIT
Oct 13 11:48:58 mailer postfix/smtpd[2201]: > unknown[192.168.1.98]: 221 2.0.0 Bye
Oct 13 11:48:58 mailer postfix/smtpd[2201]: match_hostname: unknown ~? 192.168.1.0/24
Oct 13 11:48:58 mailer postfix/smtpd[2201]: match_hostaddr: 192.168.1.98 ~? 192.168.1.0/24
Oct 13 11:48:58 mailer postfix/smtpd[2201]: disconnect from unknown[192.168.1.98]
Ich habe nur sehr begrenzte Kontrolle über dieses Voicemail-System, daher ist es wahrscheinlich keine Option, es zum richtigen Funktionieren zu bringen. Gibt es eine Möglichkeit, Postfix dazu zu bringen, jedes EHLO/HELO zu akzeptieren, auch wenn überhaupt kein Hostname vorhanden ist?
Antwort1
Ich habe einen Blick auf die Quelle für geworfen smtpd
und es scheint, dass dies derzeit nicht möglich ist. helo_cmd()
und ehlo_cmd()
beide prüfen auf mindestens 2 Werte in argv
, wobei der erste Wert (vermutlich) der angeforderte Befehl ( HELO
/ EHLO
) und der zweite ein Hostname ist. Alle zusätzlichen Argumente werden mit dem zweiten Argument verknüpft, um einen endgültigen Hostnamenwert zu erhalten. Die verschiedenen Konfigurationsoptionen steuern dann, wie dieser Wert validiert wird, aber er muss vorhanden sein.
Bearbeiten:
Nachdem ich dies in die Mailingliste der Postfix-Benutzer gestellt hatte, wurde darauf hingewiesen, dass es möglich ist, vor der Verarbeitung einen regulären Ausdruck auf die Befehlsargumente anzuwenden. Ich musste postfix-pcre
über installieren apt-get
. Dann erstelle ich eine Datei /etc/postfix/smtpd_cmd_filter
wie diese:
# smtpd_cmd_filter
# Work around brain-dead empty EHLO
/^EHLO\s$/ EHLO domain.invalid
/^HELO\s$/ HELO domain.invalid
und fügte die folgende Zeile hinzu main.cf
:
smtpd_command_filter = pcre:/etc/postfix/smtpd_cmd_filter
Es ist nicht schön, aber es funktioniert.