保障 Sendmail 服务器安全
一、网络访问限制与系统安全基础
在网络访问控制方面,通过特定配置可以限制对服务器的访问。例如,使用
only_from
属性可以允许特定网络(如 172.16.12.0)的系统访问,同时阻止其他系统。但如果该网络中有不可信的系统(如 172.16.12.231),可以添加
no_access
属性来拒绝其访问。这体现了更精确匹配的规则(如
no_access
命令)会优先生效。
此外,
tcpd
和
xinetd
可用于限制对服务器的网络访问,但它们并非 Sendmail 专用工具,其复杂语法细节不在这里详述。
保障 Sendmail 服务器安全,底层操作系统和硬件的安全是基础。不过,在确保服务器运行的系统安全后,还需进一步保障 Sendmail 自身的安全。
二、应对拒绝服务攻击的配置参数
2.1 confMAX_DAEMON_CHILDREN
该参数定义了可同时运行的 Sendmail 进程的最大数量。默认情况下,Sendmail 对可启动的子进程数量没有上限。为了限制 Sendmail 同时运行的子进程数量为 200,可以在 m4 宏配置文件中添加以下命令:
define(`confMAX_DAEMON_CHILDREN', `200')dnl
此设置下,只有当运行的子进程少于 200 个时,Sendmail 才会接受邮件。但这只是示例,实际使用时,应先研究系统的实际使用模式,然后将该值设置为观察到的最大值至少 50% 以上,以应对使用高峰。
confMAX_DAEMON_CHILDREN
对提供多种服务的系统(如运行自己的 Sendmail 服务器的 Linux 桌面系统)非常有用,它能保护其他服务免受失控的 Sendmail 守护进程影响,但攻击者也可能通过发送大量邮件使子进程数量超过最大值,从而关闭 SMTP 端口,因此需谨慎使用。
2.2 confCONNECTION_RATE_THROTTLE
该参数定义了每秒允许的最大 SMTP 连接数。默认情况下,Sendmail 对新 SMTP 连接的速率没有限制。若要将 Sendmail 每秒的新连接数限制为 10 个,可在 m4 宏配置文件中添加以下命令:
define(`confCONNECTION_RATE_THROTTLE', `10')dnl
设置后,在任何一秒内,Sendmail 会拒绝前 10 个之后的网络连接。同样,这只是示例,需根据系统实际使用模式选择合适的值,并设置为观察到的最大值至少 50% 以上。
confCONNECTION_RATE_THROTTLE
和
confMAX_DAEMON_CHILDREN
通常在相同的系统中使用,二者常配合使用。
confMAX_DAEMON_CHILDREN
设置了同时进行的电子邮件连接的绝对上限,而
confCONNECTION_RATE_THROTTLE
设置了达到该上限的速率。虽然攻击者可能轻易突破设置的连接速率来拒绝邮件访问,但设置该速率可以保护系统的其他服务。
2.3 confMAX_MESSAGE_SIZE
该参数定义了邮件服务器接受的邮件的最大大小。默认情况下,Sendmail 接受任何大小的邮件。以下命令可将最大邮件大小设置为 2,000,000 字节:
define(`confMAX_MESSAGE_SIZE', `2000000')dnl
部分拒绝服务攻击会通过发送大量大邮件填满磁盘,该参数旨在防范此类攻击,但攻击者可以通过发送更多小邮件达到相同效果,因此该参数效果有限。
这些参数的主要目的是限制拒绝服务攻击造成的损害,无法完全保护 Sendmail 免受攻击。
三、防止未经授权访问的用户 ID 配置
Sendmail 根据不同操作使用三种不同的用户 ID:
3.1 DefaultUser
这是
sendmail.cf
文件中的一个选项,用于标识运行邮件程序和其他外部命令的用户 ID 和组 ID。该选项有三种可能的默认值:
1. 若
/etc/passwd
文件中定义了
mailnull
用户,则使用分配给
mailnull
的用户 ID 和组 ID。
2. 若
mailnull
未定义,但
/etc/passwd
文件中定义了
daemon
用户,则使用分配给
daemon
的用户 ID 和组 ID。
3. 若
/etc/passwd
文件中既未定义
mailnull
也未定义
daemon
,则用户 ID 和组 ID 都使用 1。
可以在 m4 宏配置文件中使用
confDEF_USER_ID
参数覆盖默认值。例如,Red Hat 7 的宏配置文件中有如下命令:
define(`confDEF_USER_ID',`8:12')dnl
此命令将用户 ID 设置为 8,组 ID 设置为 12,对应
/etc/passwd
文件中的
mail
用户。
添加
mailnull
用户账户时,需满足以下三个要求:
- 不能有关联的密码。
- 不能有有效的登录 shell(如示例中
mailnull
的登录 shell 为
/dev/null
)。
- 不能拥有任何文件。
这些要求可防止该账户被利用以获取未经授权的访问。
3.2 TrustedUser
该选项定义了拥有 Sendmail 文件(如数据库文件)的用户。默认值为
root
,可在 m4 宏配置文件中使用
confTRUSTED_USER
参数覆盖默认值。例如:
define(`confTRUSTED_USER', `mailuser')dnl
此示例假设
/etc/passwd
文件中定义了名为
mailuser
的用户账户。
TrustedUser
拥有
/etc/mail
目录及其内部文件,目录权限设置为 755,文件权限设置为 644。Sendmail 的其他文件(如
/etc/sendmail.cf
和
/etc/aliases
)也由
TrustedUser
拥有,权限同样为 644。但
TrustedUser
不拥有邮件队列和邮件假脱机目录。
DefaultUser
可执行命令(如邮件程序),但不能拥有文件;
TrustedUser
可拥有文件,但不能执行命令。这种分工旨在提高安全性,大多数管理员不会更改
TrustedUser
的默认值。
3.3 RunAsUser
该选项定义了 Sendmail 运行时的用户 ID。默认情况下,该选项未定义,Sendmail 以
root
身份运行。若定义了该选项,Sendmail 在绑定到 SMTP 端口后会放弃
root
权限,切换到
RunAsUser
选项定义的用户 ID。之后,Sendmail 及其执行的所有邮件程序和命令都在该用户 ID 下运行。
RunAsUser
选项仅适用于防火墙邮件服务器,普通邮件服务器一般不使用该选项。
对于大多数配置,只需在
/etc/passwd
目录中定义
mailnull
用户,使其成为
DefaultUser
,就能实现文件创建和命令执行的分离。对于大多数系统,
root
作为
TrustedUser
和
RunAsUser
是合适的。
四、文件和文件访问的安全保障
4.1 文件访问标准
为避免安全问题,Sendmail 在文件访问方面应遵循以下标准:
- 发送邮件读取的文件不应授予组或其他用户写权限,推荐权限为 644。例如,若
relay-domains
文件可被其他用户写入,任何人都可能授予其喜欢的垃圾邮件发送者中继权限。
- 发送邮件读取的文件不应位于可被组或其他用户写入的目录中,推荐目录权限为 755。因为在这样的目录中,其他用户可能创建给 Sendmail 错误指令的文件。
- 发送邮件读取或写入的文件不应是符号链接。
在某些情况下(如读取
.forward
文件),Sendmail 会检查这些标准是否得到维护。可以在 m4 配置文件中使用
confDONT_BLAME_SENDMAIL
参数设置
DontBlameSendmail
选项来禁用 Sendmail 执行的文件访问检查,但这些设置会降低安全性。
4.2 别名数据库和
.forward
文件的安全
.forward
文件和别名数据库都可以使用
| program
语法将邮件转发到程序。作为 Sendmail 管理员,需负责别名数据库的内容,确保其不被他人修改。别名文件及其所在目录应仅由所有者(通常是
TrustedUser
)可写。若在数据库中设置了将邮件发送到程序的别名,必须确保该程序能正确处理数据,以避免缓冲区溢出等安全漏洞。
虽然可能无法为每个用户创建
.forward
文件,但可以通过
smrsh
控制用户可使用的程序。
4.3 使用 smrsh 功能
smrsh
即 Sendmail 受限 shell,它替代
/bin/sh
作为
prog
邮件程序使用的程序。在大多数 Linux 系统中,
/bin/sh
是
bash
,这意味着任何可由
bash
处理的命令都可由
prog
邮件程序处理,存在安全风险。而
smrsh
限制了这种灵活性,降低了危险。
smrsh
是受限 shell,部分内置 shell 命令(如
exec
、
exit
和
echo
)可用,但大多数不可用,不允许标准 I/O 重定向,大部分 shell 特殊字符(如回车、换行、
<
、
>
、
;
、
$
、
(
和
)
)不被允许,仅接受
||
和
&&
。最重要的是,用户只能使用可由
exec
运行的命令或通过特殊执行目录提供给
smrsh
的命令。
smrsh
仅将邮件转发到
/usr/adm/sm.bin
目录中的程序。Sendmail 管理员需创建该目录,并将可通过
prog
邮件程序访问的受信任程序放入其中。
smrsh
会去除邮件转发程序的初始路径名。例如,若用户输入
/usr/local/vacation
作为程序名,
smrsh
会将其简化为
vacation
,并在
/usr/adm/sm.bin
目录中查找该文件。
默认情况下,
smrsh
使用
/usr/adm/sm.bin
作为执行目录。可以使用
-DPATH
或
-DCMDBIN
编译选项指定不同的执行路径。
综上所述,保障 Sendmail 服务器的安全需要从多个方面入手,包括网络访问限制、应对拒绝服务攻击、防止未经授权访问以及保障文件和文件访问的安全等。通过合理配置相关参数和使用安全功能,可以有效降低服务器面临的安全风险。
以下是一个简单的 mermaid 流程图,展示了 Sendmail 处理邮件时的部分安全检查流程:
graph TD;
A[接收邮件] --> B{是否超过 confMAX_DAEMON_CHILDREN 限制};
B -- 是 --> C[拒绝邮件];
B -- 否 --> D{是否超过 confCONNECTION_RATE_THROTTLE 限制};
D -- 是 --> C;
D -- 否 --> E{邮件大小是否超过 confMAX_MESSAGE_SIZE 限制};
E -- 是 --> C;
E -- 否 --> F[检查文件访问权限];
F -- 不符合标准 --> C;
F -- 符合标准 --> G[处理邮件];
同时,为了更清晰地展示 Sendmail 使用的三种用户 ID 的特点,整理成如下表格:
| 用户 ID | 用途 | 权限特点 | 默认值 | 覆盖方式 |
| ---- | ---- | ---- | ---- | ---- |
| DefaultUser | 运行邮件程序和其他外部命令 | 可执行命令,不能拥有文件 | 根据
/etc/passwd
文件情况确定 | 使用
confDEF_USER_ID
参数在 m4 宏配置文件中覆盖 |
| TrustedUser | 拥有 Sendmail 文件 | 可拥有文件,不能执行命令 |
root
| 使用
confTRUSTED_USER
参数在 m4 宏配置文件中覆盖 |
| RunAsUser | Sendmail 运行时的用户 ID | 运行 Sendmail 及其相关程序 | 未定义,默认以
root
身份运行 | 在配置文件中定义 |
五、综合安全策略与最佳实践
5.1 策略制定原则
保障 Sendmail 服务器安全需要制定综合的安全策略,该策略应基于服务器的实际使用场景、业务需求和安全风险评估。例如,对于企业内部的邮件服务器,需要重点防范来自外部的攻击和内部的违规操作;对于面向公众的邮件服务提供商,则需要更严格地控制垃圾邮件和拒绝服务攻击。
5.2 最佳实践建议
- 定期更新系统和软件 :及时安装操作系统和 Sendmail 的安全补丁,以修复已知的安全漏洞。可以设置自动更新机制,确保系统始终保持最新状态。
- 监控和审计 :建立日志监控和审计机制,定期检查 Sendmail 的日志文件,及时发现异常活动。可以使用日志分析工具,对日志数据进行深入分析,以便及时采取措施。
- 备份和恢复 :定期备份 Sendmail 的配置文件、邮件数据和数据库,确保在发生故障或攻击时能够快速恢复。备份数据应存储在安全的位置,避免受到损坏或丢失。
- 安全培训 :对 Sendmail 管理员和相关人员进行安全培训,提高他们的安全意识和技能。培训内容可以包括安全策略、操作规范、应急处理等方面。
六、常见安全问题及解决方案
6.1 垃圾邮件问题
垃圾邮件是邮件服务器面临的常见问题之一,不仅会占用服务器资源,还会影响用户体验。可以采取以下措施来解决垃圾邮件问题:
-
使用垃圾邮件过滤工具
:如 SpamAssassin 等,这些工具可以根据邮件的内容、发件人、收件人等信息,对邮件进行过滤和分类。
-
设置邮件白名单和黑名单
:将信任的发件人添加到白名单,将垃圾邮件发送者添加到黑名单,从而减少垃圾邮件的接收。
-
加强邮件认证
:使用 SPF、DKIM 和 DMARC 等邮件认证技术,确保邮件的真实性和完整性。
6.2 拒绝服务攻击问题
拒绝服务攻击会导致服务器无法正常工作,影响邮件服务的可用性。可以通过前面介绍的
confMAX_DAEMON_CHILDREN
、
confCONNECTION_RATE_THROTTLE
和
confMAX_MESSAGE_SIZE
等参数来限制攻击的影响。此外,还可以采取以下措施:
-
使用防火墙
:配置防火墙,限制对服务器的网络访问,只允许合法的 IP 地址和端口进行连接。
-
负载均衡
:使用负载均衡器,将流量均匀分配到多个服务器上,避免单个服务器过载。
-
与网络服务提供商合作
:及时向网络服务提供商报告攻击情况,请求协助处理。
6.3 未经授权访问问题
未经授权访问可能导致服务器数据泄露和系统被破坏。可以通过合理配置用户 ID 和文件权限,以及加强身份验证和访问控制来解决该问题。具体措施包括:
-
使用强密码
:要求用户使用强密码,并定期更换密码。
-
多因素认证
:采用多因素认证方式,如使用短信验证码、指纹识别等,增加用户身份验证的安全性。
-
限制远程访问
:只允许授权用户进行远程访问,并使用安全的远程访问协议,如 SSH。
七、未来安全趋势与应对策略
7.1 安全威胁趋势
随着技术的不断发展,Sendmail 服务器面临的安全威胁也在不断变化。未来,可能会出现更复杂的攻击手段,如人工智能驱动的攻击、零日漏洞攻击等。此外,随着物联网和云计算的普及,邮件服务器与其他系统的连接更加紧密,安全风险也相应增加。
7.2 应对策略建议
- 加强技术研发 :关注安全技术的发展趋势,积极采用新的安全技术和方法,如人工智能安全、区块链安全等,提高服务器的安全防护能力。
- 建立安全联盟 :与其他企业和组织建立安全联盟,共享安全信息和经验,共同应对安全威胁。
- 制定应急预案 :制定完善的应急预案,确保在发生安全事件时能够快速响应和处理,减少损失。
以下是一个 mermaid 流程图,展示了应对安全事件的基本流程:
graph TD;
A[检测到安全事件] --> B{事件类型};
B -- 垃圾邮件 --> C[使用过滤工具处理];
B -- 拒绝服务攻击 --> D[调整参数并通知网络服务提供商];
B -- 未经授权访问 --> E[锁定账户并调查];
C --> F[记录处理结果];
D --> F;
E --> F;
F --> G{是否解决};
G -- 是 --> H[恢复正常服务];
G -- 否 --> I[升级处理措施];
I --> D;
同时,为了更清晰地展示常见安全问题及解决方案,整理成如下表格:
| 安全问题 | 表现形式 | 解决方案 |
| ---- | ---- | ---- |
| 垃圾邮件 | 大量无关邮件涌入 | 使用垃圾邮件过滤工具、设置白名单和黑名单、加强邮件认证 |
| 拒绝服务攻击 | 服务器无法正常响应 | 使用
confMAX_DAEMON_CHILDREN
等参数、配置防火墙、负载均衡、与网络服务提供商合作 |
| 未经授权访问 | 非法用户获取系统权限 | 合理配置用户 ID 和文件权限、使用强密码、多因素认证、限制远程访问 |
总之,保障 Sendmail 服务器的安全是一个长期而复杂的过程,需要不断关注安全形势的变化,采取有效的安全措施,确保服务器的稳定运行和数据安全。
超级会员免费看
20

被折叠的 条评论
为什么被折叠?



