第一部分:安装 Postfix

1. 安装 Postfix

# 更新软件包列表
sudo apt update

# 安装 Postfix 和必要工具
sudo apt install postfix mailutils libsasl2-modules sasl2-bin -y

2. 安装过程中的配置向导

安装过程中会出现配置对话框,按以下选择:

第一个对话框(配置类型)

选择配置类型:
-> 选择 "Internet Site"

第二个对话框(系统邮件名称)

邮件服务器的主机名:
-> 输入你的域名(如:yourdomain.com)
或直接按 Enter 使用系统主机名

3. 安装完成后检查

# 检查 Postfix 状态
sudo systemctl status postfix

# 检查版本
postconf -d | grep mail_version

第二部分:基本配置

1. 编辑主配置文件

sudo nano /etc/postfix/main.cf

2. 添加/修改以下配置

# ========== 基本设置 ==========
# 服务器主机名(替换为你的域名)
myhostname = mail.yourdomain.com
mydomain = yourdomain.com

# 接收哪些域名的邮件
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# 监听所有网络接口
inet_interfaces = all

# 协议版本
inet_protocols = all

# ========== 网络设置 ==========
# 允许哪些网络通过本服务器发送邮件
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
# 如果允许任意IP:mynetworks = 0.0.0.0/0

# ========== 邮件大小限制 ==========
message_size_limit = 10485760 # 10MB
mailbox_size_limit = 0 # 0表示不限制
recipient_delimiter = +

# ========== 安全设置 ==========
# 防止被用作垃圾邮件中继
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

# 允许中继(重要!)
relayhost =
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

# ========== TLS/SSL 设置 ==========
# 启用 TLS
smtpd_use_tls = yes
smtp_use_tls = yes

# TLS 证书位置(先用自签名)
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

# 安全级别
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_auth_only = yes

# ========== 日志设置 ==========
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

3. 配置 master.cf 启用所有端口

sudo nano /etc/postfix/master.cf

确保以下行没有被注释(去掉行首的 #):

# ========== 标准 SMTP (端口25) ==========
smtp inet n - y - - smtpd

# ========== SMTP Submission (端口587) ==========
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

# ========== SMTPS (端口465) ==========
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

第三部分:配置身份验证(SASL)

1. 配置 SASL

# 创建 SASL 配置目录和文件
sudo mkdir -p /etc/postfix/sasl
sudo nano /etc/postfix/sasl/smtpd.conf

添加以下内容:pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 3
saslauthd_path: /var/spool/postfix/var/run/saslauthd/mux

2. 配置 SASL 认证

# 编辑 Postfix 配置
sudo postconf -e "smtpd_sasl_auth_enable = yes"
sudo postconf -e "smtpd_sasl_security_options = noanonymous"
sudo postconf -e "smtpd_sasl_local_domain ="
sudo postconf -e "broken_sasl_auth_clients = yes"
sudo postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination"

3. 创建系统用户用于认证

# 添加用户(用于 SMTP 认证)
sudo adduser postfixuser
# 设置密码
sudo passwd postfixuser

# 测试 SASL 认证
sudo testsaslauthd -u postfixuser -p 'yourpassword'

第四部分:生成 SSL 证书

1. 生成自签名证书

# 生成证书
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/private/postfix.key \
-out /etc/ssl/certs/postfix.crt \
-subj "/C=CN/ST=State/L=City/O=Organization/CN=mail.yourdomain.com"

# 设置权限
sudo chmod 600 /etc/ssl/private/postfix.key
sudo chmod 644 /etc/ssl/certs/postfix.crt

2. 更新 Postfix 使用新证书

sudo postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/postfix.crt"
sudo postconf -e "smtpd_tls_key_file = /etc/ssl/private/postfix.key"

第五部分:防火墙配置

1. 开放必要的端口

# 如果使用 ufw
sudo ufw allow 25/tcp
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw reload

# 如果使用 iptables
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 587 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

第六部分:重启和测试

1. 重启服务

# 重启 Postfix
sudo systemctl restart postfix
sudo systemctl enable postfix

# 启动 SASL 服务
sudo systemctl restart saslauthd
sudo systemctl enable saslauthd

2. 检查服务状态

# 检查 Postfix
sudo systemctl status postfix

# 检查监听端口
sudo netstat -tulpn | grep :25
sudo netstat -tulpn | grep :465
sudo netstat -tulpn | grep :587

# 或使用 ss 命令
ss -tulpn | grep postfix

3. 测试邮件发送

# 方法1:使用 mail 命令
echo "This is a test email from Postfix" | mail -s "Test Email" 该 Email 地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。

# 方法2:使用 telnet 测试 SMTP
telnet localhost 25

输入以下命令(逐行输入):

HELO localhost
MAIL FROM: <该 Email 地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。;
RCPT TO: <该 Email 地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。;
DATA
Subject: Test Email from Postfix

This is a test email.
.
QUIT

4. 测试加密连接

# 测试端口 465 (SMTPS)
openssl s_client -connect localhost:465 -quiet

# 测试端口 587 (STARTTLS)
openssl s_client -starttls smtp -connect localhost:587

 

 

 

 

 

 

 

 

 

 

 


登陆