keepcalculator

06 Numbers and Powers

Fix Postfix SMTP Connection Timed Out Errors

Card No. 06·37588 · Updated · Standard formula, shown below

This guide walks you through diagnosing and fixing Postfix SMTP connection timed out errors. You’ll learn the common causes, step-by-step fixes, and how to verify your mail server can send and receive email reliably. You’ll need root or sudo access to your mail server, and a basic understanding of the command line.

What You’ll Need

  • Root or sudo access to the Postfix server
  • Access to the Postfix configuration files (usually in /etc/postfix/)
  • Command-line tools: telnet, nc (netcat), dig, nslookup, ping, traceroute
  • Firewall management tools (e.g., ufw, iptables, or cloud provider console)
  • A test email account on an external provider (e.g., Gmail, Outlook) for verification

Step-by-Step

  1. Identify the exact error. Check the mail logs. On most systems, run tail -f /var/log/mail.log (or /var/log/maillog on RHEL/CentOS). Look for lines containing “connect to” and “timed out”. Note the destination IP and port (usually 25, 465, or 587).
  2. Test basic connectivity to the remote server. Use ping -c 4 [remote_host] to see if the host is reachable. If ping fails, the remote server may be down, or your outbound ICMP is blocked (less common).
  3. Check DNS resolution. Use dig [remote_host] MX (for mail) or dig [remote_host] A to verify the hostname resolves correctly. If you get no answer or a wrong IP, check your DNS settings in /etc/resolv.conf and ensure your server can reach a public DNS server.
  4. Test the SMTP port with telnet or netcat. Run telnet [remote_host] 25 (or the port from the error). If the connection hangs, the port is blocked or the remote server is not accepting connections. If you get a banner like “220 … ESMTP”, the port is open and SMTP is responding.
  5. Check outbound firewall rules. On the Postfix server, run sudo ufw status (Ubuntu/Debian) or sudo iptables -L -n (RHEL/CentOS). Ensure outbound traffic on port 25 (and 465/587 if used) is allowed. If you have a cloud firewall (AWS Security Group, Azure NSG, Google Cloud Firewall), check that outbound rules permit these ports.
  6. Check the remote server’s firewall. If your outbound is fine, the remote server might be blocking your IP or port. Use an online port checker (from a different network) to test if the remote port is open from elsewhere. If it is, your IP may be blacklisted or the remote server is rate-limiting.
  7. Review Postfix main.cf settings. Run postconf -n to see the effective configuration. Pay attention to smtp_helo_name, smtp_connection_timeout (default 60s), and smtp_host_lookup. If smtp_host_lookup is set to dns and DNS is slow, increase the timeout or fix DNS.
  8. Increase connection timeout temporarily. Edit /etc/postfix/main.cf and add or change: smtp_connection_timeout = 120. Then run sudo postfix reload. This gives more time for slow remote servers, but it’s not a permanent fix for a blocked port.
  9. Check for IP blacklisting. If you can connect from other networks but not from your server, your IP might be on a blacklist. Check with services like Spamhaus (use dig [your_ip].zen.spamhaus.org). If listed, follow the removal instructions.
  10. Test with a different destination. Try sending to a major provider like Gmail (aspmx.l.google.com) to see if the issue is specific to one domain. If Gmail works, the problem is with the remote server, not your Postfix.
  11. Check for IPv6 issues. Postfix may try IPv6 first and hang. If your server lacks IPv6 connectivity, set inet_protocols = ipv4 in main.cf and restart Postfix.
  12. Verify the remote server’s SMTP banner. If you get a banner but then the connection times out during EHLO, the remote server may be rejecting your HELO name. Ensure smtp_helo_name is set to a valid FQDN that resolves to your server’s IP.

Common Mistakes

  • Assuming port 25 is always open. Many ISPs and cloud providers block outbound port 25 by default to prevent spam. Check with your provider.
  • Ignoring IPv6. If your server has an IPv6 address but no route, Postfix may try IPv6 and hang. Setting inet_protocols = ipv4 is a quick fix.
  • Misconfiguring DNS. A missing or incorrect MX record for your domain can cause timeouts when others try to send to you, but for outgoing, a bad resolver can cause timeouts.
  • Forgetting to reload Postfix. After changing main.cf, you must run postfix reload or postfix restart for changes to take effect.
  • Testing from the wrong network. Testing from a different IP can mislead you about whether the remote server is down or your IP is blocked.

Tips

  • Use a dedicated SMTP relay service (like Amazon SES, SendGrid, or Mailgun) if outbound port 25 is blocked by your ISP. This is often the most reliable solution.
  • Set up proper reverse DNS (PTR) for your server’s IP. Many mail servers reject connections from IPs without a matching PTR record.
  • Monitor your mail logs with a tool like pflogsumm to spot patterns and recurring timeouts.
  • Use smtp_connection_cache_on_demand to reuse connections and reduce the chance of timeouts during high volume.
  • Test with a simple script that attempts a connection every few minutes to see if the issue is intermittent.

Troubleshooting

If the steps above don’t resolve the issue, try the following:

  • Run postfix check to verify your configuration syntax. It will report any errors.
  • Use strace on the Postfix process to see exactly where it hangs: strace -p $(pgrep -f smtp) -f -e trace=network (requires root). Look for connect() calls that return EINPROGRESS and never complete.
  • Check if the remote server is using a different port. Some servers use port 587 or 465 for submission. If you’re trying to send to a server that only listens on 587, you’ll get a timeout on 25.
  • Temporarily disable firewall (if safe) to see if it’s the cause. On Ubuntu: sudo ufw disable (re-enable after test).
  • Check for network issues with traceroute to see where packets stop. If they stop at your ISP, they may be blocking the port.
  • Look at the remote server’s logs if you have access. They may show a connection refused or a timeout on their side.

Frequently Asked Questions

  1. Why does Postfix time out only for certain domains? This usually means the remote server is blocking your IP or port, or the remote server is down. Check if the domain’s MX record points to a server that accepts connections from your IP.
  2. Can I use port 587 instead of 25 for outgoing mail? Yes, but you need to configure Postfix to use a relay host that listens on 587. Set relayhost = [smtp.example.com]:587 in main.cf and ensure your firewall allows it.
  3. What is the default connection timeout in Postfix? The default is 60 seconds. You can change it with smtp_connection_timeout.
  4. How do I know if my IP is blacklisted? Use a tool like dig against common blacklists (e.g., zen.spamhaus.org). For example: dig [your_ip].zen.spamhaus.org. If you get a 127.0.0.x answer, you’re listed.
  5. Will increasing the timeout solve the problem? It can help if the remote server is slow but reachable. However, if the port is blocked, a longer timeout just delays the error.
  6. What does “connect to [IP]:25: Connection timed out” mean? It means Postfix tried to establish a TCP connection to that IP on port 25 and got no response within the timeout period. This is almost always a network or firewall issue.

Related

Method: the standard formula for this calculation, rounded as each result states. See how the calculators work or report an error.

More cards in this drawer

The whole Numbers and Powers drawer →