Linux .forward 文件详解
.forward 是 Unix/Linux 系统中用于自定义邮件转发规则的配置文件,属于 Sendmail/Postfix 等主流 MTA(邮件传输代理)的核心配置之一,作用是将发送到当前用户的邮件自动转发到指定目标(其他邮箱、本地用户、脚本等),无需手动登录邮箱查看。
一、基本特性
- 存储位置 :默认位于用户主目录(
$HOME/.forward),仅对当前用户生效; - 权限要求 :必须归当前用户所有,且权限不能为
777(过宽权限会被 MTA 忽略,通常建议600或644); - 生效条件 :MTA(如 Postfix)需启用
forward_file功能(默认开启); - 优先级 :
.forward规则优先级高于系统级邮件别名(/etc/aliases),仅对当前用户生效。
二、核心语法与用法
.forward 文件内容为纯文本,每行定义一条转发规则,支持多种目标类型,语法极简:
| 规则类型 | 示例 | 说明 |
|---|---|---|
| 转发到外部邮箱 | user@example.com |
将邮件转发到指定外部邮箱 |
| 转发到本地用户 | root |
将邮件转发到本地 root 用户 |
| 同时转发到多个目标 | user@example.com, root |
逗号分隔多个目标(邮件会同时发送到所有地址) |
| 转发并保留本地副本 | \username, user@example.com |
\username 表示保留本地用户 username 的副本,再转发到外部邮箱 |
| 转发到脚本/程序 | ` | "$HOME/bin/mail-handler.sh"` |
| 转发到文件 | $HOME/mail/archive |
将邮件内容追加到指定文件(需文件可写) |
| 丢弃邮件(黑洞) | /dev/null |
将邮件直接丢弃(无备份、无转发) |
三、配置示例
示例 1:基础转发(外部邮箱)
编辑用户 alice 的 .forward 文件:
bash
# 切换到 alice 主目录
cd ~alice
# 创建/编辑 .forward
echo "alice@company.com" > .forward
# 设置正确权限(关键)
chown alice:alice .forward
chmod 600 .forward
效果:所有发送到 alice@本机域名 的邮件,自动转发到 alice@company.com。
示例 2:多目标转发 + 保留本地副本
bash
# 内容:保留本地副本 + 转发到外部邮箱 + 转发到本地 root
echo "\alice, alice@company.com, root" > ~alice/.forward
示例 3:转发到脚本处理
bash
# 内容:将邮件传给脚本解析(如提取附件、过滤垃圾邮件)
echo "|\"$HOME/bin/process-mail.sh\"" > ~alice/.forward
⚠️ 注意:脚本路径需用绝对路径,且包裹在双引号中(避免空格/特殊字符解析错误),脚本需有可执行权限(chmod +x process-mail.sh)。
示例 4:丢弃垃圾邮件
bash
# 直接丢弃所有发送到当前用户的邮件
echo "/dev/null" > ~alice/.forward
四、生效与调试
- 立即生效 :
.forward无需重启 MTA,配置后下一封邮件即触发规则; - 调试方法 :
- 查看 MTA 日志(Postfix 日志:
/var/log/mail.log;Sendmail 日志:/var/log/maillog); - 测试发送邮件:
echo "test" | mail -s "Forward Test" alice@本机域名,检查目标是否收到;
- 查看 MTA 日志(Postfix 日志:
- 常见问题排查 :
- 权限错误:
.forward权限为777或属主非当前用户 → 调整为600并修正属主; - 规则不生效:MTA 禁用
forward_file→ 编辑 Postfix 配置main.cf,确保allow_mail_to_commands = yes、allow_mail_to_files = yes; - 脚本无响应:脚本路径错误或无执行权限 → 检查路径和
chmod +x。
- 权限错误:
五、与 /etc/aliases 的区别
| 特性 | .forward |
/etc/aliases(系统别名) |
|---|---|---|
| 作用范围 | 仅当前用户 | 系统全局(所有用户) |
| 配置者 | 普通用户(无需 root) | 仅 root 用户 |
| 生效方式 | 实时生效 | 需执行 newaliases 刷新 |
| 复杂度 | 极简(单行规则) | 支持更复杂的别名映射 |
六、安全注意事项
- 避免将
.forward指向可写的公共目录,防止恶意篡改转发规则; - 转发到脚本时,严格校验脚本内容,避免邮件内容触发恶意命令;
- 禁止设置
.forward权限为777(MTA 会直接忽略该文件); - 若服务器开启 SELinux,需确保
.forward和脚本的 SELinux 上下文符合 MTA 要求(如mail_home_t)。
总结
.forward 是 Linux 下轻量、灵活的用户级邮件转发工具,适合普通用户自定义邮件流向,核心优势是无需 root 权限、配置即时生效,常见场景包括:个人邮件转发到常用邮箱、自动归档邮件、脚本处理邮件内容等。使用时需重点关注权限和规则语法,避免因配置错误导致邮件丢失。