Exim non firmerà la posta inviata da PHP tramite SMTP

Ho avuto difficoltà ad get Exim per firmare le mie mail che sto inviando con la class Zend2 Mailer. La class ha l'opzione di submit tramite SMTP; questo è incredibile dato che ho tutto configurato a livello MTA.

Però. Inviare la posta da un client (Thunderbird) verrà firmato. La posta inviata con la class Mailing di Zend2 non lo farà. Cominciamo con la mia versione di Exim.

  • Come gestire i protocolli IP con failover manuale?
  • IPTABLES: Sciacquare e partire da zero su SSH - VPS - CentOS 5.5 x86_64
  • Come faccio a utilizzare RPM per installare GCC dal mio supporto di distribuzione CentOS?
  • Le performance di NFS sono scarse
  • Imansible connettersi al socket di dominio unix di PostgreSQL
  • CentOS 6 dispone di kernel compatibili Xen?
  • Exim version 4.76 #1 built 19-Jul-2011 02:56:59 Copyright (c) University of Cambridge, 1995 - 2007 Berkeley DB: Berkeley DB 4.7.25: (November 12, 2010) Support for: crypteq IPv6 Perl OpenSSL move_frozen_messages Content_Scanning DKIM Old_Demime Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz Authenticators: cram_md5 plaintext Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp Size of off_t: 8 Configuration file is /etc/exim.conf 

    Poi c'è la configuration di DKIM. Ho provato a cercare il dominio con il metodo sottostante invece di utilizzare la variabile $sender_address_domain . Ho visto in un altro messaggio serverfault che il command DATA può rendere malformata la busta con conseguente un indirizzo wierd mittente. Però non era per me. Entrambi risolvono il mittente effettivo / da indirizzo.

     [rob@server ~]$ exim -bP transports | grep dkim dkim_canon = relaxed dkim_domain = ${lc:${domain:$h_from:}} dkim_private_key = ${if exists{/etc/virtual/$sender_address_domain/dkim.private.key}{/etc/virtual/$sender_address_domain/dkim.private.key}{0}} dkim_selector = x dkim_sign_headers = MIME-Version:Date:Message-ID:Subject:From:To dkim_strict = 0 

    Le chiavi sono lì. La configuration funziona, come verificato con invio via posta con Thunderbird.

    Poi mi sono chiesto, queste mail in realtà passano attraverso il server SMTP? Il risultato; si lo fanno. Ho controllato il /var/log/exim/mainlog . Ora ho anche notato che le mail di Thunderbird non ottengono che la "ricezione della mail" logline. Non so perché? Può qualcuno elaborare su questo se sappiano perché? PHP si connette usando il metodo di login SMTP con le stesse informazioni SMTP utilizzate da Thunderbird. Stesse porte, dominio, username, password.

    https://framework.zend.com/manual/2.4/en/modules/zend.mail.smtp.options.html#zend-mail-smtp-options

     # This is the mail recieved from the PHP code. 2016-11-15 08:28:52 1c6YAm-000154-6p <= mailbox@mydomain.com H=mydomain.com [ipv4.addr] P=esmtpa A=login:mailbox@mydomain.com S=22098 id=26412cc5accb22e5ce03925c7ac38a7c95c398cb19d5736fa41fb565c8dc1254@mydomain.com T="Another day at the office with DKIM..." from <mailbox@mydomain.com> for mygmail@gmail.com # Here it is outbound for its destination. Not signed to be noted. 2016-11-15 08:28:52 1c6YAm-000154-6p => mygmail@gmail.com F=<mailbox@mydomain.com> R=lookuphost T=remote_smtp S=22157 H=gmail-smtp-in.l.google.com [ipv6.addr] X=UNKNOWN:ECDHE-RSA-AES128-GCM-SHA256:128 C="250 2.0.0 OK 1479194932 yr4si27147042wjc.210 - gsmtp" # This is send with Thunderbird. This gets signed... 2016-11-15 08:31:47 1c6YDa-0001CM-UY => mygmail@gmail.com F=<mailbox@mydomain.com> R=lookuphost T=remote_smtp S=762 H=gmail-smtp-in.l.google.com [ipv6.addr] X=UNKNOWN:ECDHE-RSA-AES128-GCM-SHA256:128 C="250 2.0.0 OK 1479195107 s17si1915514wme.47 - gsmtp" 

    Anche queste mail non vengono rifiutate né possono essere trovate nel registro di panico. Entrambi ricevono il mio account gmail:

     # This is the mail send from thunderbird. With DKIM signing. Delivered-To: mygmail@gmail.com Received: by 10.80.186.18 with SMTP id g18csp1289759edc; Mon, 14 Nov 2016 23:31:47 -0800 (PST) X-Received: by 10.194.248.5 with SMTP id yi5mr384988wjc.11.1479195107193; Mon, 14 Nov 2016 23:31:47 -0800 (PST) Return-Path: <mailbox@mydomain.com> Received: from myserver.com (myserver.com. [ipv6.addr]) by mx.google.com with ESMTPS id s17si1915514wme.47.2016.11.14.23.31.47 for <mygmail@gmail.com> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Nov 2016 23:31:47 -0800 (PST) Received-SPF: pass (google.com: domain of mailbox@mydomain.com designates ipv6.addr as permitted sender) client-ip=ipv6.addr; Authentication-Results: mx.google.com; dkim=pass header.i=@mydomain.com; spf=pass (google.com: domain of mailbox@mydomain.com designates ipv6.addr as permitted sender) smtp.mailfrom=mailbox@mydomain.com; dmarc=pass (p=NONE dis=NONE) header.from=mydomain.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mydomain.com; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Date:Message-ID:Subject:From:To; bh=zaNQl8a2eAEHfPVmKMA7RmtMqJ/6huDk4u6pr/tWrqQ=; b=xcDHIzzTWS8hPMxjqbZM0I6b/act/LlweTuNcnZJ9ttEF1dAm37Lzy8zOJz2E2aDTkcQOdCQuC+VyIaXTRzTMJXyzJTUXTgPUPOePsR5XYqqsE0iQRMkDl/Ah650kBHD5drqIrFJwCw5g0aL9OECqTyRO9kwL0DQJX/mKcTkLtiiIs7Z7G77ZwWhJpFm/duoQARtZZ1UZFu42/Vbl+V8vSoWbXoZBpg+WBGucWJoGq+hb5zILxwsMPcbrIu+avBjjoUdLVP9YMFiPC3nK+7zOGBWOO7x6QoHQmO8uo0P88E52Sm9ZJGgLQOCfFCMjCnv4IMemj/GSe25Sf8PKah/Xg==; Received: from 159-032-128-083.dynamic.caiway.nl ([83.128.32.159] helo=[192.168.1.108]) by myserver.com with esmtpsa (UNKNOWN:AES128-SHA:128) (Exim 4.76) (envelope-from <mailbox@mydomain.com>) id 1c6YDa-0001CM-UY for mygmail@gmail.com; Tue, 15 Nov 2016 08:31:46 +0100 To: Rob van der Lee <mygmail@gmail.com> From: Rob van der Lee <mailbox@mydomain.com> Subject: Dit is een verzonden mail via account Message-ID: <2ccd7be7-bbd1-0fdc-a8d4-a4f6f652bfc2@mydomain.com> Date: Tue, 15 Nov 2016 08:31:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Dit is echt een test. 

    E qui la posta che viene inviata da PHP che non viene firmata.

     Delivered-To: mygmail@gmail.com Received: by 10.80.186.18 with SMTP id g18csp1288906edc; Mon, 14 Nov 2016 23:28:52 -0800 (PST) X-Received: by 10.28.170.134 with SMTP id t128mr2009669wme.29.1479194932632; Mon, 14 Nov 2016 23:28:52 -0800 (PST) Return-Path: <mailbox@mydomain.com> Received: from myserver.com (myserver.com. [ipv6.addr]) by mx.google.com with ESMTPS id yr4si27147042wjc.210.2016.11.14.23.28.52 for <mygmail@gmail.com> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Nov 2016 23:28:52 -0800 (PST) Received-SPF: pass (google.com: domain of mailbox@mydomain.com designates ipv6.addr as permitted sender) client-ip=ipv6.addr; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mailbox@mydomain.com designates ipv6.addr as permitted sender) smtp.mailfrom=mailbox@mydomain.com; dmarc=pass (p=NONE dis=NONE) header.from=mydomain.com Received: from mydomain.com ([37.97.128.104]) by myserver.com with esmtpa (Exim 4.76) (envelope-from <mailbox@mydomain.com>) id 1c6YAm-000154-6p for mygmail@gmail.com; Tue, 15 Nov 2016 08:28:52 +0100 Date: Tue, 15 Nov 2016 07:28:52 +0000 To: mygmail@gmail.com From: Rob van der Lee <mailbox@mydomain.com> Sender: Rob van der Lee <mailbox@mydomain.com> Subject: Another day at the office with DKIM... MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=_7ebb8a8d12984c5cc3f5fbf995b1b4ad" Message-ID: <26412cc5accb22e5ce03925c7ac38a7c95c398cb19d5736fa41fb565c8dc1254@mydomain.com> This is a message in Mime Format. If you see this, your mail reader does not support this format. --=_7ebb8a8d12984c5cc3f5fbf995b1b4ad Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... content of mail in text and then html, left it out since not relevant. 

    Non mi ha ragione perchè l'Exim non firmerà questa posta. Come visto nel file di registro entrambe le mail ricevono l'invio via T=remote_smtp e secondo la mia configuration MTA tutte le mail in output che ricevono via remote_smtp devono essere firmate.

    A parte il fatto che la posta effettivamente ottiene submit e raggiungere la cassetta postale. Spero che posso imparare da questo.

    Aggiornare:

    Come per suggerimento di Daniel ho provato a risolvere il dominio, gestendo la richiesta SMTP, internamente, invece di lasciare che il mio gestore gestisca questo per me. Questo non aiuta, il messaggio è ancora inviato senza firma.

    I registri sembrano uguali a quelli sopra indicati.

    Dig Richiesta di vecchia situazione:

     ;; QUESTION SECTION: ;mydomain.com. IN NS ;; ANSWER SECTION: mydomain.com. 86400 IN NS ns1.transip.nl. mydomain.com. 86400 IN NS ns2.transip.eu. mydomain.com. 86400 IN NS ns0.transip.net. 

    Dig Richiesta di nuova situazione:

     ;; QUESTION SECTION: ;mydomain.com. IN NS ;; ANSWER SECTION: mydomain.com. 14400 IN NS ns2.myserver.com. mydomain.com. 14400 IN NS ns1.myserver.com. 

    Aggiornamento alla risposta:

    Ho anche fatto un biglietto di bug oltre al tracker di Bug Exim. Pensato di avere qualche aiuto sugli esperti; Jeremy Harris mi ha indicato nella giusta direzione.

     Jeremy Harris 2016-11-15 14:58:55 GMT First, if you're running Exim 4.76 - update it. Then, assuming the problem still exists: restart your daemon with a commandline debug option, collecting output. Feed it a test mail. Examine the debug output, which shows the processing flow for the message. Compare with your config and work out where it differs from what you expected. 

    Ho fatto quello che mi ha detto. Aggiornato, poi ha scoperto che il problema persiste ancora. Fed è la debug di modus 2 mail. Uno firmato, l'altro non firmato.

    Ho iniziato a confrontare strettamente e ho notato che il corpo di entrambe le mail ha iniziato ad alimentarsi a PDKIM (il dkim lib per Exim). Poi ho notato che la mia posta non firmata non aveva chiuso dopo il corpo come il messaggio firmato.

    Ho immaginato che abbia a che fare con il contenuto; quindi dal lato PHP invio una mail con una sola row di text. Questo stava firmando …

    Soluzione? Wordwrapping! Che non ci pensavo prima! Non mi sento veramente tutto così intelligente. Questo perché sapevo di questo a forehand. La specifica RFC 2646 ci racconta tutto.

    Spero che questo post aiuterà qualcun altro. Era un buon viaggio e abbastanza stupido il problema era la mia implementazione.

  • Cerchi un modo per montare azioni cifs su centos 6 con più utenti
  • setenforce: SELinux è disabilitato
  • utenti sftp virtuali con openssh
  • Configurazione del file pg_hba.conf per consentire l'accesso da altri server al database
  • Installazione di Tomcat su CentOS 5
  • Aggiorna PHP alla versione più recente su CentOS 4.5
  • One Solution collect form web for “Exim non firmerà la posta inviata da PHP tramite SMTP”

    (Non posso commentare, quindi questo non è inteso come risposta, ma spero che aiuta)

    Un po 'di tempo ho lavorato sulla stessa questione e mi ha dato una vera mal di testa, nel mio caso avevo due server di nomi, uno sull'usustore presso la società di hosting e uno era anche in esecuzione sul server stesso, per gestire la denominazione interna. (Come sembra olandese, TransIP VPS con Cpanel e i domini where sono gestiti sul lato TransIP).

    Ora sul DNS esterno avevo impostato il DKIM, in modo che funzionassi per la maggior parte delle situazioni, ma non per la mia function di posta PHP, per questo ho dovuto anche impostarlo sul DNS interno (Cpanel) per farlo funzionare per PHP.

    (Anche mentre cercavo questo problema c'era qualcosa con 7bit e 8bit Content-Transfer-Encoding, ma questo non ha fatto la differenza nel mio caso)

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.