Prólogo
En mi servidor 2 dominios separados están girando. Antes de la historia del bloqueo de Roskomnadzor, recolectamos tráfico de aproximadamente 2000 visitas por día, y el servidor de correo envió unas 200 cartas por día a todos los servicios de correo populares, incluidos Google y Yandex. Todo estuvo genial. Pero como dice el famoso video: “¡Todo fue tan bueno hasta que llegó
Navalny Roskomnadzor!
Ahora que hemos logrado encontrar un proveedor de alojamiento cuyas direcciones IP no caen bajo el bloqueo de la censura estatal, ha surgido otro problema. Google Good Corporation ha dejado de permitir que nuestro cartero vaya más allá del umbral.
El servidor google MX lanza mi correo con aproximadamente el siguiente mensaje: "Su mensaje parece no solicitado, adiós ..."
Registro de conexión SMTP de Google050 <legale.legale@gmail.com>... Connecting to gmail-smtp-in.l.google.com. via esmtp... 050 220 mx.google.com ESMTP v6-v6si38552789wrc.432 - gsmtp 050 >>> EHLO sevenlight.ru 050 250-mx.google.com at your service, [2a02:c207:2018:3546::1] 050 250-SIZE 157286400 050 250-8BITMIME 050 250-STARTTLS 050 250-ENHANCEDSTATUSCODES 050 250-PIPELINING 050 250-CHUNKING 050 250 SMTPUTF8 050 >>> STARTTLS 050 220 2.0.0 Ready to start TLS 050 >>> EHLO sevenlight.ru 050 250-mx.google.com at your service, [2a02:c207:2018:3546::1] 050 250-SIZE 157286400 050 250-8BITMIME 050 250-ENHANCEDSTATUSCODES 050 250-PIPELINING 050 250-CHUNKING 050 250 SMTPUTF8 050 >>> MAIL From:<root@sevenlight.ru> SIZE=297 050 250 2.1.0 OK v6-v6si38552789wrc.432 - gsmtp 050 >>> RCPT To:<legale.legale@gmail.com> 050 >>> DATA 050 250 2.1.5 OK v6-v6si38552789wrc.432 - gsmtp 050 354 Go ahead v6-v6si38552789wrc.432 - gsmtp 050 >>> . 050 550-5.7.1 [2a02:c207:2018:3546::1 7] Our system has detected that this 050 550-5.7.1 message is likely unsolicited mail. To reduce the amount of spam sent 050 550-5.7.1 to Gmail, this message has been blocked. Please visit 050 550-5.7.1 https://support.google.com/mail/?p=UnsolicitedMessageError 050 550 5.7.1 for more information. v6-v6si38552789wrc.432 - gsmtp
Con este comando, envié un mensaje de prueba:
echo "Subject: Hello baby!" | sendmail -v legale.legale@gmail.com
No escribiré sobre mis bailes con una pandereta para intentar romper los filtros de spam. Solo puedo decir que fui transportado toda la noche, pero solo pude tener éxito al día siguiente. Por eso decidí escribir este manual.
INSTRUCCIONES DE CONFIGURACIÓN SPF + DKIM EN UBUNTU 18.04
La inclinación de esta instrucción es que funciona, a diferencia de muchas otras. Te garantizo que puedes configurar al menos 2 dominios en 1 servidor sin mucha dificultad.
1. Instale los paquetes necesarios
apt-get install sendmail opendkim -y
2. Configurar opendkim
La configuración está aquí: /etc/opendkim.conf
/etc/opendkim.confReinicio automático Sí
UMask 002
Syslog si
AutoRestartRate 10 / 1h
Canonicalización relajada / simple
ExternalIgnoreList refile: / etc / opendkim / TrustedHosts
InternalHosts refile: / etc / opendkim / TrustedHosts
Archivo de KeyTable: / etc / opendkim / KeyTable
Archivo SigningTable: / etc / opendkim / SigningTable
LogWhy Yes
Modo sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
Entrada de socket: 8891 @ localhost
SyslogSuccess Sí
Directorio temporal / var / tmp
ID de usuario opendkim: opendkim
3. Configurar claves y reglas de firma
Describiré el procedimiento para crear sus propias claves para aquellos que desean una autonomía completa. Personalmente, utilizo el servicio Yandex.Direct Mail para el dominio pdd.yandex.ru, así que tengo las claves generadas por Yandex.
# mkdir -p /etc/opendkim/keys/*****.ru # cd /etc/opendkim/keys/******.ru # #-s -d opendkim-genkey -s mail -d ******.ru # 2 mail.txt mail.private # opendkim:opendkim chown opendkim:opendkim mail.* # chmod 600 mail.private
A continuación, conectamos nuestra clave secreta DKIM creada o descargada de Yandex.
Estamos interesados en estas tres líneas de la configuración de opendkim:
InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable
El primer
/etc/opendkim/TrustedHosts
contiene hosts que tendrán acceso al servidor opendkim para firmar correos electrónicos.
/ etc / opendkim / TrustedHosts127.0.0.1
localhost
######. ru
******. ru
El segundo archivo
/etc/opendkim/KeyTable
contiene una tabla de claves privadas y entradas DKIM relacionadas, que son las siguientes:
[selector]._domainkey.[domain_name]
/ etc / opendkim / KeyTablemail._domainkey.sevenlight.ru sevenlight.ru:mail:/etc/opendkim/keys/sevenlight.ru/mail.private
mail._domainkey.st-goods.ru st-goods.ru:mail:/etc/opendkim/keys/st-goods.ru/mail.private
El tercer archivo
/etc/opendkim/SigningTable
contiene una tabla de reglas para firmar cartas. Indica qué letras y con qué tecla firmar.
/ etc / opendkim / SigningTable*@sevenlight.ru mail._domainkey.sevenlight.ru
*@st-goods.ru mail._domainkey.st-goods.ru
Creamos estos archivos, indicando nuestro dominio y nuestra ruta al archivo clave. Esto completa la configuración de opendkim.
4. Configurar sendmail
Configurar sendmail es lo más simple posible. Solo necesitamos agregar las siguientes líneas al final del prototipo del archivo de configuración
/etc/mail/sendmail.mc
:
# starttls include(`/etc/mail/tls/starttls.m4')dnl # sendmail opendkim INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl
Para enviar correo de forma predeterminada desde el dominio correcto, debe realizar un cambio más en el archivo
/etc/mail/sendmail.mc
Estamos buscando una línea similar a esta:
MASQUERADE_AS(`st-goods.ru')dnl
Reemplace con el dominio deseado. Es este dominio el que se usará como la dirección de retorno predeterminada. Tenga en cuenta que las comillas son diferentes, estrictamente hablando, el primer signo
`
se llama gravis. Entonces, por alguna razón, se encuentra en una configuración de sendmail.
Ahora agregaremos entradas al archivo / etc / hosts. Esto es necesario para que sendmail pase los mensajes a través del filtro. Se estableció experimentalmente que si no agrega entradas, todos los registros permanecen vírgenes, sin mostrar un solo error, pero las letras no están firmadas.
#ipv4 echo -e "127.0.0.1 st-goods.ru" >> /etc/hosts #ipv6 echo -e "::1 st-goods.ru" >> /etc/hosts
Ahora necesitamos reconstruir sendmail con la nueva configuración.
# # "" sendmailconfig # opendkim sendmail service opendkim restart && service sendmail restart
Ahora nuestro servidor sendmail puede pasar mensajes salientes a través del servidor opendkim, que agrega una firma digital y cifra los encabezados de las cartas enviadas. Queda por publicar la clave pública para el host para que los encabezados se puedan descifrar y asegurarse de que los encabezados no se cambien.
5. Configuración de registro DKIM TXT en el servidor DNS
La clave debe suspenderse en el servidor DNS en una cadena de tipo TXT con el siguiente contenido:
host:
mail._domainkey
valor:
v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3fBEOKw
v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3fBEOKw
Explicaciones:
p=
esta es nuestra clave pública
v=
define el número de versión de DKIM
t=
establece banderas; las banderas no están configuradas por defecto. Hay 2 banderas 'y' y 's'.
y
indica que DKIM está en modo de prueba.
s
significa el modo cuando la parte correcta de la dirección de correo después de @ debe coincidir completamente con el dominio especificado en el parámetro d = DKIM de la firma de la carta.
El host debe especificarse de la siguiente manera:
[selector]._domainkey
Tenemos un selector de correo, por lo que el host será así:
mail._domainkey
La clave pública debe
/etc/opendkim/keys/st-goods.ru/mail.txt
del archivo
/etc/opendkim/keys/st-goods.ru/mail.txt
/etc/opendkim/keys/st-goods.rumail._domainkey IN TXT ("v = DKIM1; h = sha256; k = rsa;„
"P = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsLFjSAqvfSrjvF0JfMkiSzqWRhXwwVPzW5OEtRFSoDVBwDxR6hMna1iESnUQ1OzbUQQPnDPbrFXkalDCAXigZqltTSAV + JQSyOwhi0b88WS3djb1IkA / qioCobjlhMFSatvcmz5kMkG8oeoHhVFQ / BE84PwDPTXRmcObDvg7meUmkYpdxeyr + tcG5ezuC + s15I00 + 6NSAaj0Tj»
«Y / Bl2e2TE / WG45wVShlQ85E8IpYixscd0qDJ9 / NbZrbWIfy8shujWVk5izNU4PqcWwW7 / H9uTkhAbMu0fgqT8W9Jv / GRVAireOCzMl13E9PVANt4o + ywqyGk38vSY8QdgJsZPDUQIDAQAB»); - Correo clave DKIM para st-goods.ru
La clave va desde p = hasta la última cita. Las comillas mismas deben eliminarse.
6. Configuración de SPF
SPF (Sender Policy Frameword) es otra tecnología de protección contra spam, no voy a hablar de eso. Solo 2 palabras para entender la esencia de esta tecnología. En el registro DNS de un dominio, las direcciones de los servidores que tienen derecho a enviar correo desde este dominio se registran de la misma manera que la clave pública DKIM. Necesitamos registrar las direcciones IP de nuestro servidor en esta entrada. En mi caso, el servidor Yandex también se agrega a la lista.
Aquí hay un ejemplo de mi publicación:
anfitrión:
@
valor:
v=spf1 a mx include:_spf.yandex.net ip4:173.249.51.13 ip6:2a02:c207:2018:3546::1 ~all
La sintaxis es simple. Primero, se indica la versión spf, y luego, después de un espacio con o sin un plus, se indican las direcciones de los servidores que tienen derecho a enviar correo desde este dominio. Tengo registros a y mx, lo que significa que los servidores de los registros DNS A y MX también se incluyen en la lista de permitidos. Vía incluir: se especifica la dirección del servidor Yandex, y luego las direcciones ipv4 e ipv6 de mi servidor. ~ todo significa softfail "falla suave". Es decir todas las direcciones que no figuran en permitidas aún pueden ir a discreción del servidor receptor. -todos significarían un duro rechazo.
7. configuración DMARC
El último clavo para penetrar en el bastión de gmail es DMARC. DMARC establece qué hacer con los correos electrónicos que fallan SPF o DKIM.
Hacemos todo exactamente igual a través de un registro TXT DNS.
host:
_dmarc
valor:
v=DMARC1; p=none
v=DMARC1; p=none
Aquí establecemos que si las letras no pasaron el SPF o DKIM, no es necesario hacer nada. Puedes poner p = rechazar. Entonces tales cartas serán rechazadas.
Cheque
Envíate una carta.
echo "Subject: Hello baby!" | sendmail -v legale.legale@gmail.com
Observamos las últimas entradas en el registro de correo.
tail -f /var/log/mail.log | grep dkim
Debería aparecer una línea similar a esta:
Jun 11 22:07:55 sevenlight opendkim[6473]: w5BK7sl9008069: DKIM-Signature field added (s=mail, d=st-goods.ru)
Si hay una línea, el servidor sendmail y opendkim han trabajado juntos y han firmado su carta. Si no existe esa línea, consulte la sección "Posibles problemas".
Ahora veamos qué pasó en el buzón. Abra la letra y presione el botón de flecha hacia abajo en la esquina superior derecha de la letra. En el menú desplegable, seleccione el elemento "Mostrar original".
Esto es lo que obtuve:
Message ID <201806112007.w5BK7sUS008068@******.ru> Created on: 11 June 2018 at 22:07 (Delivered after 2 seconds) From: info@*****.ru To: legale.legale@gmail.com Subject: №2221 - ******.ru SPF: PASS with IP 2a02:c207:2018:3546:0:0:0:1 Learn more DKIM: 'PASS' with domain *****.ru Learn more DMARC: 'PASS' Learn more
BENEFICIO $$$
Posibles problemas
Espero sinceramente que no haya necesidad de leer esta sección, pero la técnica es algo complicado ... A veces no está claro quién trabaja para quién.
Primero, verifique si hizo todo en la secuencia exacta especificada en las instrucciones.
Primero, revise el archivo / etc / hosts para ver si los cambios en él son correctos. Tuve la mayoría de los problemas allí. A continuación, verifique el registro del sistema para detectar errores de dkim. Mientras buscaba, me encontré con una situación en la que era imposible leer opendkim la clave secreta, aunque asigné al usuario opendkim como el propietario del archivo. A continuación, debe examinar cuidadosamente el registro de ejecución del comando sendmailconfig. Tuve un caso en el que usé la comilla simple habitual en lugar de la grava puesta, y sendmailconfig lo juró. Si todo lo demás falla, escríbeme y sigue intentándolo.