Intentando configurar el servidor de correo, no puedo hacer que los puertos (25, 587) funcionen

9

He buscado en todas partes y realmente estoy luchando con este. Creo que he intentado casi todo.

Información de fondo

  • VPS con CentOS 6.7
  • Postfix 2.6.6
  • palomar, amavis, mysql, fail2ban
  • Verifiqué con mi proveedor de VPS que no bloquean ningún puerto.

Cosas que he hecho

  • Se eliminó stock sendmail
  • He instalado postfix, dovecot, mysql, etc. para una solución completa de correo
  • Solo estoy permitiendo imap, smtp con STARTTLS (puertos 143 y 587)
  • Inicios de sesión SSH deshabilitados, solo con claves
  • Puedo recibir correos (a través del puerto 143)
  • Puedo telnet desde localhost a ambos puertos (587, 25) y recibo un saludo postfix
  • Intentar conectarme a 587 o 25 (cliente de correo o telnet) me da respuesta cero, es decir, el tiempo de espera de conexión

Cosas que he probado

1) ¿Están abiertos los puertos? Sí, iptables:

Chain INPUT (policy DROP 11 packets, 1375 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
   25  2579 f2b-dovecot  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 110,995,143,993,587,465,4190
   68  7788 f2b-postfix  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,465,587
    0     0 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22
   25  2579 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
    7   600 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
23464 2662K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   49  2940 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3915
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    5   300 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 23235 packets, 2494K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain f2b-dovecot (1 references)
 pkts bytes target     prot opt in     out     source               destination
   25  2579 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-postfix (1 references)
 pkts bytes target     prot opt in     out     source               destination
   68  7788 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

2) ¿Postfix está escuchando en el puerto 587? Si. ¿Está escuchando solo en localhost? No, cualquier anfitrión.

Aquí está netstat:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      917/httpd
tcp        0      0 127.0.0.1:4190              0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 127.0.0.1:24                0.0.0.0:*                   LISTEN      749/dovecot

Y aquí está también el postfix / main.cf, por si acaso:

# Enable both IPv4 and/or IPv6: ipv4, ipv6, all.
inet_protocols = ipv4

# Enable all network interfaces.
inet_interfaces = all

3) ¿Estás forzando conexiones seguras correctamente? Que yo sepa, sí, aquí está el postfix / master.cf:

# Submission, port 587, force TLS connection.
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o content_filter=smtp-amavis:[127.0.0.1]:10026

4) ¿Qué pasa con las restricciones smtpd? Parece bien:

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_non_fqdn_helo_hostname
    reject_invalid_helo_hostname
    check_helo_access pcre:/etc/postfix/helo_access.pcre

5) ¿Postfix funciona correctamente?

Sí, iniciar sesión en el servidor y enviar correo de prueba desde la consola funciona y se recibe correo electrónico en el otro extremo, es decir:

echo "Test mail from postfix" | mail -s "Test Postfix" [email protected]

6) ¿Qué sucede cuando se conecta en el puerto 587?

Al parecer, nada en absoluto. Si trato de hacer telnet a cualquier puerto aleatorio, al menos obtengo algo. Por ejemplo, intentar hacer telnet al puerto 666 (que no está abierto) no produce respuesta al cliente, pero al menos obtengo algo en tcpdump:

15:22:20.305697 IP xxx > xxx.com.mdqs: Flags [S], seq 3195304468, win 8192, options [mss 1352,nop,wscale 8,nop,nop,sackOK], length 0

Cuando tcpdumping puerto 587, no sucede absolutamente nada al intentar telnet a él.

¿Qué me falta todavía?

Todo lo anterior agota mi conocimiento de las cosas que aún puedo probar. Me las arreglé para clavarlo en mi puerto 587 completamente bloqueado por algo. Como dije, mi proveedor de VPS confirmó que no están bloqueando ningún puerto. He probado el puerto 25 y es la misma historia.

Lo único que puedo ver es que de alguna manera he bloqueado esos puertos al configurar mi servidor, pero no puedo recordar si ese es el caso y no sé cómo probarlo.

Realmente agradecería cualquier ayuda que me puedan dar. De hecho, estoy comprando una cerveza para quien me ayude a resolver esto , ya he perdido dos días y está empezando a ser realmente molesto.

reachergilt
fuente
3
¿Podría reemplazar la iptablessalida anterior con la de iptables -L -n -v, completa y sin modificar? Además, dada su tcpdupmpprueba, y la garantía de su proveedor que no bloquea 25 y 587 de entrada , también es posible que el lugar que está probando a partir de bloques 25 y 587 de salida . Si publicaste la dirección IP, sería mucho más fácil confirmar o negar esa hipótesis.
MadHatter
Gracias por responder. Claro, he editado mi publicación. Hmm, nunca pensé en los puertos bloqueados por mi parte, es una buena idea. Intentaré probar esto.
reachergilt
1
@ MadHatter, tenías toda la razón en los puertos bloqueados de mi lado. Resultó (después de muchas llamadas) que el administrador de la VPN de mi empresa decidió comenzar a bloquear ciertos puertos, 25 y 578 siendo uno de ellos, pero no otros. Esto explica por qué nunca tuve tales problemas antes y ni siquiera lo pensé. Probablemente mi servidor ya estaba funcionando bien los últimos días mientras me estaba volviendo loco. Si lo desea, puede publicar como respuesta real y lo aceptaré. Además, envíeme su información de PayPal (o similar), realmente se merece una grande y fría, Dios sabe cuándo lo resolveré.
reachergilt
Lo he escrito para que pueda aceptar la respuesta, porque de lo contrario la pregunta flotará para siempre, y eso es malo. Además, esto podría ser útil para otros en el futuro. Quise decir lo que dije en mi respuesta sobre que ya has realizado la mayor parte del trabajo de investigación (¡más poder para ti!), Pero si te sientes honrado de enviarme una cerveza, puedes encontrar mis datos de contacto en mi sitio web personal, a través de mi perfil.
MadHatter
Hecho y gracias de nuevo por su ayuda, es probable que me haya ahorrado horas, si no días, de tiempo perdido. Te contactaré mañana, ya revisé tu sitio web.
reachergilt

Respuestas:

4

Reachergilt, bienvenido a SF, y gracias por una excelente primera pregunta. Puede sentir que lo hemos salvado, pero honestamente, ya había hecho todo el trabajo pesado y lo había presentado de manera muy sistemática. Con una mentalidad forense como esa, espero que te quedes por estas partes por algún tiempo.

La tcpdumpsalida es particularmente condenatoria. Demuestra más allá de toda duda razonable que sus intentos de conexión ni siquiera llegan a su servidor, lo que exonera el firewall del servidor, postfixlos enlaces y todo lo demás del lado del servidor.

Armado con ese puntero, te has ido y has confirmado que tus conexiones salientes estaban siendo bloqueadas, por lo que tus pruebas nunca llegaron tan lejos como tu servidor. Es bastante (deprimentemente) normal que 25 (y en menor medida, 587) se bloqueen salientes de las redes modernas, porque las botnets que envían correo no deseado las usan.

En cualquier caso, ahora está contento de que su nuevo servidor de correo funcione como se anuncia, y eso es bueno.

MadHatter
fuente
3
Sí, mi publicación es una buena lista de verificación para cualquiera que tenga problemas similares. Curiosamente, porque pensé que algo estaba mal con mi servidor, verifiqué cuatro veces todo de A a Z, permitiéndome documentar todo aquí.
reachergilt