提供一个完全重写的干净配置

 

#!/bin/bash
echo "=== 完全重写Postfix配置 ==="

# 1. 停止Postfix
echo "1. 停止Postfix服务..."
sudo systemctl stop postfix

# 2. 备份当前配置
echo "2. 备份当前配置..."
BACKUP_DIR="/root/postfix_backup_$(date +%Y%m%d_%H%M%S)"
sudo mkdir -p "$BACKUP_DIR"
sudo cp -r /etc/postfix "$BACKUP_DIR/"

# 3. 创建全新的最小化配置
echo "3. 创建全新配置..."
sudo tee /etc/postfix/main.cf << 'EOF'
# ========== 基本配置 ==========
myhostname = localhost
mydomain = localhost
myorigin = $myhostname

# 网络设置
inet_interfaces = loopback-only
inet_protocols = ipv4

# 目的地
mydestination = localhost, localhost.localdomain

# 网络限制
mynetworks = 127.0.0.0/8

# 安全设置
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no

# 性能设置
mailbox_size_limit = 0
recipient_delimiter = +
disable_vrfy_command = yes

# 中继控制
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
EOF

# 4. 简化master.cf,暂时禁用SSL
echo "4. 简化master.cf配置..."
sudo tee /etc/postfix/master.cf << 'EOF'
#
# Postfix master process configuration file
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - y - 10 smtpd
#smtps inet n - y - - smtpd
# -o smtpd_tls_wrappermode=yes
#submission inet n - y - - smtpd
# -o smtpd_tls_security_level=encrypt
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
-o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache

# ====================================================================
# Interfaces to non-Postfix software
# ====================================================================
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
EOF

# 5. 重建别名数据库
echo "5. 重建别名数据库..."
echo "root: $(whoami)" | sudo tee /etc/aliases
sudo newaliases

# 6. 检查配置语法
echo "6. 检查配置语法..."
sudo postfix check
if [ $? -eq 0 ]; then
echo "✅ 配置文件语法正确"
else
echo "❌ 配置文件有错误,请查看上面的错误信息"
exit 1
fi

# 7. 启动Postfix
echo "7. 启动Postfix服务..."
sudo systemctl start postfix

# 8. 测试邮件发送
echo "8. 测试邮件发送..."
echo "全新配置测试 $(date)" | mail -s "全新配置测试" root

# 9. 检查状态
echo "9. 检查服务状态..."
sudo systemctl status postfix --no-pager | head -10

echo "10. 检查端口监听..."
sudo netstat -tlnp | grep :25

echo "=== 配置重写完成 ==="
echo "现在邮件系统应该稳定工作了。"
echo "如果需要SSL,请稍后逐步添加配置。"

 

🚀 快速诊断为什么发邮件会死机

#!/bin/bash
echo "=== 发邮件死机深度诊断 ==="

# 1. 检查系统负载
echo "1. 系统负载历史:"
uptime
sar -q 1 3 2>/dev/null || echo "sar未安装"

# 2. 检查内存使用模式
echo -e "\n2. 内存使用模式:"
vmstat 1 3

# 3. 检查I/O等待
echo -e "\n3. I/O等待状态:"
iostat -x 1 3 2>/dev/null || echo "iostat未安装"

# 4. 检查进程限制
echo -e "\n4. 进程限制:"
cat /proc/sys/kernel/pid_max
cat /proc/sys/kernel/threads-max

# 5. 模拟发送大量邮件测试
echo -e "\n5. 模拟压力测试(少量邮件)..."
echo "警告:这将发送5封测试邮件"
for i in {1..5}; do
echo "压力测试邮件 $i" | mail -s "压力测试 $i" root &
echo " 已启动邮件 $i"
sleep 0.5
done

# 等待发送完成
wait

# 6. 检查邮件队列
echo -e "\n6. 邮件队列状态(等待10秒)..."
sleep 10
mailq

# 7. 检查系统状态
echo -e "\n7. 发送后的系统状态:"
top -bn1 | head -20

echo -e "\n=== 诊断完成 ==="
echo "如果这个测试就导致死机,说明系统非常敏感。"
echo "建议使用外部SMTP服务或exim4。"


登陆