Learning to install PowerMTA AlmaLinux is the fastest way to get a high-performance, self-hosted email server running on Red Hat's most popular free clone. PowerMTA is the industry-standard mail transfer agent used by high-volume senders for its unmatched deliverability controls, delivery speed, and per-domain reputation management. AlmaLinux 9, with its RHEL binary compatibility and long support lifecycle, makes an ideal, license-free foundation. In this step-by-step tutorial, you will prepare a fresh AlmaLinux 9 server, install the required dependencies, install the PowerMTA RPM package, configure pmta.conf, activate your license, and send your first test email — ending with a production-ready setup.
Prerequisites Before You Install PowerMTA AlmaLinux
Before touching the installer, make sure your environment is correct. PowerMTA is resource-hungry and port-sensitive, so cutting corners here causes most failures later.
- A clean AlmaLinux 9 VPS with root access. At least 2 GB RAM and 1 vCPU for light volume; 4+ GB for real campaigns. Because PowerMTA must speak SMTP on TCP port 25, your provider must not block it — many clouds (AWS, DigitalOcean, Vultr) block port 25 by default, so choose a sender-friendly host. We recommend Contabo or RackNerd for cheap VPS plans with open port 25.
- A domain name with DNS access. You will need to create an A record, an MX record, and later SPF, DKIM, and DMARC records for good deliverability.
- Reverse DNS (PTR) pointing at your server's hostname. Most providers let you set this in their control panel; without it, Gmail and Outlook will penalize your mail.
- A valid PowerMTA license. PowerMTA is commercial software from Port25/Acquia. The installer runs in a limited demo mode without a license file (
license.xml), and features like VirtualMTA pools are license-gated.
Step 1 — Update the System and Install Dependencies
SSH into your server as root and bring the system up to date first:
dnf update -y
dnf install -y wget telnet perl openssl-libs ca-certificates
PowerMTA ships as a self-contained RPM, so dependencies are minimal. The telnet client is useful for the SMTP test at the end, and openssl lets you verify certificates and DKIM keys later. Also disable the firewall temporarily so it can't interfere with your first test (you will lock it down properly in the final step):
systemctl stop firewalld
systemctl disable firewalld
Step 2 — Download and Install the PowerMTA RPM
PowerMTA for AlmaLinux is distributed as an RPM built for RHEL 9-compatible systems. Download the package link from your Port25 customer portal (or the URL provided with your license purchase) and install it:
wget -O PowerMTA.rpm "https://your-license-download-url/PowerMTA-6.0r1.x86_64.rpm"
dnf install -y ./PowerMTA.rpm
The package installs the pmta binary, the configuration skeleton at /etc/pmta/config, the license directory, and the systemd service. Verify the installation:
pmta --version
systemctl status pmta
Step 3 — Place Your License and Basic pmta.conf Setup
PowerMTA refuses to start as a production MTA without a valid license. Copy your license.xml into the license directory:
mkdir -p /etc/pmta/license
cp license.xml /etc/pmta/license/
chown pmta:pmta /etc/pmta/license/license.xml
chmod 600 /etc/pmta/license/license.xml
Now open /etc/pmta/config and set the essentials. PowerMTA's config is one long file, but you only need these blocks for a working single-server setup:
host-name mail.yourdomain.com
smtp-listener 0/0:25
smtp-listener [::]:25
<source 0/0>
always-allow-relaying yes # restrict this to your IPs in production
process-x-virtual-mta yes
</source>
<domain *>
max-smtp-out 20
use-starttls yes
</domain>
The host-name is the FQDN other mail servers will see in your HELO/EHLO greeting — it must match your PTR record. The <domain *> block applies default delivery behavior globally; tune max-smtp-out (concurrent connections per destination domain) once you know your list size.
Configuring VirtualMTAs for IP Reputation
VirtualMTA pools are PowerMTA's killer feature: each pool binds a separate IP and queue, letting you isolate transactional mail, marketing campaigns, and client accounts. Add a VirtualMTA under the <source> block or globally:
<virtual-mta pmta-1>
smtp-source-host 198.51.100.10 mail.yourdomain.com
</virtual-mta>
<domain *>
route pmta-1
</domain>
Replace 198.51.100.10 with an IP assigned to your server. With multiple IPs you can warm each one independently and protect a high-value sender from a risky one.
Step 4 — Configure DNS Records
Email authentication is not optional anymore — Gmail, Outlook, and Yahoo reject or spam-folder mail from servers missing these records. In your domain's DNS zone, add:
- A record:
mail.yourdomain.com→ your server IP - MX record:
yourdomain.com→mail.yourdomain.com - SPF (TXT):
v=spf1 ip4:198.51.100.10 -all - DKIM: generate a key with
pmta generate-dkim(oropendkim-genkey), then publish the TXT record PowerMTA gives you and reference the key inpmta.confwithdkim-sign yes - DMARC (TXT at
_dmarc):v=DMARC1; p=none; rua=mailto:[email protected]— move toquarantine/rejectonce SPF and DKIM pass consistently
Step 5 — Enable the Systemd Service and Start PowerMTA
Enable the service so it survives reboots, then start it:
systemctl enable --now pmta
systemctl is-active pmta
Check the log for license and config errors — PowerMTA is strict, and a single typo in pmta.conf prevents startup:
tail -f /var/log/pmta/log
You should see the license load successfully and the SMTP listeners bind to port 25. If it fails, run pmta check-config to validate your configuration file.
Step 6 — Test Your Install PowerMTA AlmaLinux Setup
Send your first message through the local SMTP listener with telnet:
telnet localhost 25
ehlo mail.yourdomain.com
mail from:<[email protected]>
rcpt to:<[email protected]>
data
Subject: PowerMTA AlmaLinux test
This is the first test email from my PowerMTA install on AlmaLinux 9.
.
quit
Then inspect delivery in the accounting and log files:
pmta show queues
tail /var/log/pmta/log | grep delivered
If the message leaves the queue and shows as delivered, your install is healthy. Check a seed inbox at Gmail and inspect the “Show original” headers: you want spf=pass, dkim=pass, and dmarc=pass.
Post-Install Security and Hardening
A fresh mail server on the public internet gets probed within minutes. Lock it down before sending real volume:
- Re-enable the firewall with SMTP rules: allow port 25 inbound only from trusted sources plus the general SMTP listener if you accept bounces.
systemctl enable --now firewalld firewall-cmd --permanent --add-service=smtp firewall-cmd --permanent --add-service=ssh firewall-cmd --reload - Restrict relaying. Change
always-allow-relayingtonoand authorize only your application IPs withrelay-addresslines — an open relay will get your IPs blacklisted in hours. - Add fail2ban or brute-force protection for SSH and SMTP auth attempts.
- Keep PowerMTA updated. Port25 releases security fixes regularly; watch their announcements and schedule maintenance windows.
- Monitor blacklists and bounces. A new IP has zero reputation — warm it up gradually (start with a few hundred emails/day to engaged recipients) and watch Postmaster Tools and bounce rates daily.
Key Takeaways
- To install PowerMTA AlmaLinux, you need a clean AlmaLinux 9 VPS with port 25 open, a licensed PowerMTA RPM, and working DNS records.
- Install dependencies with
dnf, install the RPM, drop in yourlicense.xml, and sethost-name, listeners, and<domain *>blocks in/etc/pmta/config. - VirtualMTAs let you isolate IPs and reputations — PowerMTA's biggest advantage over Postfix for high-volume sending.
- SPF, DKIM, and DMARC are mandatory for inbox placement with Gmail, Outlook, and Yahoo in 2026.
- Always test with telnet first, then warm up new IPs gradually before scaling campaign volume.
- Never run an open relay — restrict
always-allow-relayingand firewall port 25 immediately after installation.
Related Guides
- How to Install PowerMTA on Ubuntu 24 — the same PowerMTA walkthrough for Debian-based servers.
- Best VPS Providers with Open Port 25 — compare sender-friendly VPS hosts before you install, since PowerMTA needs port 25 unblocked.