Sendmail邮件服务配置与管理全解析
立即解锁
发布时间: 2025-08-14 01:07:59 阅读量: 23 订阅数: 40 


24小时内掌握FreeBSD:从入门到实践
# Sendmail邮件服务配置与管理全解析
## 1. 引言
在当今数字化时代,电子邮件已成为人们日常沟通和工作中不可或缺的工具。而Sendmail作为一款经典的邮件传输代理(MTA),在许多系统中都扮演着重要的角色。本文将深入探讨Sendmail的基本配置、文件布局、邮件别名设置、发送者控制、消息队列管理以及邮件中继和垃圾邮件控制等方面的内容,帮助你全面了解和掌握Sendmail的使用。
## 2. 基本Sendmail配置
### 2.1 启用Sendmail
FreeBSD系统默认安装并配置了Sendmail以满足基本的电子邮件需求。要启用Sendmail,使其在系统启动时自动运行,只需在`/etc/rc.conf`文件中添加以下行:
```plaintext
sendmail_enable="YES"
```
### 2.2 从命令行执行SMTP事务
SMTP是一种纯文本交互式协议,使用简单的类似英语的四字命令。你可以仅通过命令行执行完全有效的SMTP事务,示例如下:
```plaintext
# telnet destination.com 25
Trying 64.41.134.166...
Connected to destination.com.
Escape character is ‘^]’.
220 destination.com ESMTP Sendmail 8.11.1/8.11.1; Wed, 16 May 2001 22:55:37 -0700 (PDT)
HELO stripes.sender.com
250 destination.com Hello w012.z064002043.sjc-ca.dsl.cnc.net [64.2.43.12], pleased to meet you
MAIL From: [email protected]
250 2.1.0 [email protected]... Sender ok
RCPT To: [email protected]
250 2.1.5 [email protected]... Recipient ok
DATA
354 Enter mail, end with “.” on a line by itself
From: [email protected]
To: [email protected]
Subject: Testing, 123...
This is a test message.
.
250 2.0.0 f4H5uCu53501 Message accepted for delivery
QUIT
221 2.0.0 destination.com closing connection
Connection closed by foreign host.
```
## 3. Sendmail文件布局
系统中有三个与Sendmail相关的重要位置,如下表所示:
| 位置 | 说明 |
| ---- | ---- |
| `/etc/mail` | Sendmail的配置文件 |
| `/var/mail` | 用户邮箱 |
| `/var/spool/mqueue` | 消息队列文件 |
Sendmail本身位于`/usr/sbin/sendmail`,其日志文件写入`/var/log/maillog`,该日志文件会每天自动轮换和存档。
## 4. 使用Sendmail配置文件
### 4.1 进行常规配置更改
Sendmail的主配置文件是`/etc/mail/sendmail.cf`,但不建议直接编辑该文件来更改Sendmail的行为。建议在主配置文件`/etc/mail/freebsd.mc`中进行更高“宏”级别的更改,然后从该文件编译生成新的`sendmail.cf`文件。以下是`freebsd.mc`文件的部分内容示例:
```plaintext
dnl Uncomment the first line to change the location of the default
dnl /etc/mail/local-host-names and comment out the second line.
dnl define(`confCW_FILE’, `-o /etc/mail/sendmail.cw’)
define(`confCW_FILE’, `-o /etc/mail/local-host-names’)
```
要从`freebsd.mc`文件创建新的`.cf`文件并安装到`sendmail.cf`,可以使用以下命令:
```plaintext
# make cf
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 freebsd.mc > freebsd.cf
# make install
install -c -m 444 freebsd.cf /etc/mail/sendmail.cf
```
### 4.2 创建邮件别名
系统中每个用户在`/var/mail`都有一个邮箱,但不一定需要有系统账户才能拥有电子邮件地址。可以设置别名将传入的电子邮件地址映射到其他地址,默认的`/etc/mail/aliases`文件包含了各种示例,如下:
```plaintext
tiger: [email protected] # 重定向到[email protected]
fsmith: frank # 进入frank的邮箱而不是fsmith的
pager: “|/usr/local/bin/pageme” # 将消息作为输入发送到/usr/local/bin/pageme
dump: “>>/home/frank/dump2me” # 将消息追加到dump2me文件
mylist:include:/home/frank/list.txt # 扩展以包含list.txt中的所有地址
```
对`/etc/mail/aliases`文件进行任何更改后,需要重建`aliases.db`文件,可以使用`newaliases`命令或`make aliases`命令:
```plaintext
# make aliases
/usr/sbin/sendmail -bi
/etc/mail/aliases: 22 aliases, longest 10 bytes, 213 bytes total
```
此外,如果用户希望将所有传入邮件自动转发到外部地址,可以在其主目录中创建一个`.forward`文件,例如:
```plaintext
# echo “[email protected]” > .forward
```
删除该文件将停止邮件转发。
### 4.3 阻止和允许特定发送者
`/etc/mail/access`访问数据库提供了一种对单个主机、子网或整个地址组应用特定规则的方法,这是一个很好的反垃圾邮件措施。适用的规则包括`OK`、`REJECT`、`RELAY`、`DISCARD`或`550 <message>`,示例如下:
```plaintext
cyberspammer.com 550 We don’t accept mail from spammers
FREE.STEALTH.MAILER@ 550 We don’t accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
128.32 RELAY
```
这些规则的含义如下:
- `OK`:接受来自指定主机的消息,无论该主机是否可能在系统的其他检查中失败。
- `REJECT`:拒绝指定主机发起的连接。
- `DISCARD`:接受消息后静默丢弃,使发送者认为消息已成功传递。
- `RELAY`:为指定主机启用中继,覆盖其他检查。
- `550 <message>`:指定一个“拒绝”消息,在SMTP会话期间显示给发送者,并包含在发送回发送者的错误电子邮件消息中。
对`/etc/mail/access`文件进行更改后,需要重新生成`access.db`文件,并重启Sendmail主进程:
```plaintext
# make maps
/usr/sbin/makemap hash access.db < access
# make restart
/bin/kill -HUP `head -1 /var/run/sendmail.pid`
```
0
0
复制全文
相关推荐










