在 Ubuntu 上优化邮件服务器性能,需要从 系统层、邮件服务软件、网络与 DNS、存储与队列、安全与反垃圾 等多个层面综合进行。下面以 生产环境常见组合(Postfix + Dovecot + MySQL/SQLite + SpamAssassin + ClamAV) 为例,系统性地给出优化建议。
编辑 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
并确认 systemd 限制:
systemctl edit postfix
[Service]
LimitNOFILE=65535
编辑 /etc/sysctl.conf:
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
应用:
sysctl -p
/etc/postfix/main.cf# 并发与队列
default_process_limit = 100
smtp_destination_concurrency_limit = 20
smtp_destination_rate_delay = 1s
# 减少 DNS 查询
smtp_host_lookup = dns,native
disable_dns_lookups = no
# 队列优化
queue_run_delay = 300s
minimal_backoff_time = 300s
maximal_backoff_time = 3600s
# 内存与缓存
smtp_mx_session_limit = 5
smtpd_client_connection_count_limit = 20
/etc/postfix/master.cfsmtp unix - - y - - smtp
-o smtp_connect_timeout=30
-o smtp_helo_timeout=30
/etc/dovecot/dovecot.conf# 进程数
default_process_limit = 200
default_client_limit = 1000
# IMAP 优化
imap_max_line_length = 64k
mail_max_userip_connections = 20
✅ 推荐使用 Maildir 或 mdbox
mail_location = mdbox:~/mdbox
避免 mbox(性能差)
邮件服务器对 IO 非常敏感
挂载参数:
noatime,nodiratime
/var/spool/postfix # 队列
/var/log/mail.log # 日志
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
query_cache_size = 0
# 关闭不必要的插件
/etc/spamassassin/v320.pre
使用 amavisd-new + SpamAssassin 时:
$sa_spam_modifies_subj = 0;
$sa_kill_level_deflt = 6.5;
✅ 如果服务器负载高:
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 20
postscreen = yes
postscreen_greet_action = enforce
postscreen_dnsbl_action = enforce
可挡掉 70% 垃圾连接
postqueue -pdoveadm whoiotop, htop, ss| 现象 | 原因 | 解决 |
|---|---|---|
| 邮件延迟 | 队列堆积 | 优化队列参数 |
| CPU 高 | SpamAssassin | 关闭或限流 |
| IO 高 | mbox | 改用 Maildir |
| 并发低 | 默认进程少 | 增加 process_limit |
| 项目 | 建议 |
|---|---|
| MTA | Postfix |
| IMAP | Dovecot |
| 用户 | 虚拟用户(DB) |
| 存储 | mdbox |
| 反垃圾 | Postscreen + SpamAssassin |
| 杀毒 | 可选 |
| 系统 | Ubuntu 22.04+ |
如果你愿意,我可以:
只要告诉我你的使用场景即可。