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.
iptables
salida anterior con la deiptables -L -n -v
, completa y sin modificar? Además, dada sutcpdupmp
prueba, 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.Respuestas:
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
tcpdump
salida 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,postfix
los 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.
fuente