保护 EC2 上的 SES SMTP 凭证的安全
确保 SES SMTP 凭据的安全至关重要,尤其是在使用 cPanel Webmail (Exim) 和 PHP 发送电子邮件时。最近,发生了多起这些凭据被泄露的情况,导致从您的主域电子邮件发送未经授权的垃圾邮件。
本文讨论了潜在的漏洞,并提供了在运行 Rocky 9 的 Amazon EC2 实例上保护您的 SES SMTP 凭证的实用步骤。通过了解风险并实施建议的安全措施,您可以保护您的电子邮件系统免受未来的破坏。
命令 | 描述 |
---|---|
openssl_encrypt() | 使用指定的密码和密钥加密数据。用于安全地存储 SMTP 凭据。 |
openssl_decrypt() | 解密之前加密的数据。用于检索原始 SMTP 凭据。 |
file_get_contents() | 将整个文件读入字符串。用于从安全位置加载加密密钥。 |
file_put_contents() | 将数据写入文件。用于安全地存储加密的 SMTP 凭据。 |
PHPMailer\PHPMailer\PHPMailer | PHPMailer 库中的一个类,用于在 PHP 中通过 SMTP 发送电子邮件。 |
sed -i "s/command" | 用于就地修改文件的流编辑器命令。用于使用解密的凭据更新 Exim 配置。 |
systemctl restart | 重新启动系统服务。用于在更新其配置后重新启动 Exim 服务。 |
了解 SES SMTP 凭据泄漏的解决方案
提供的脚本旨在保护和管理 SES SMTP 凭据,以防止未经授权的访问和滥用。第一个 PHP 脚本演示了如何使用 openssl_encrypt 功能,确保敏感信息的安全存储。凭证使用安全密钥加密并存储在文件中,防止未经授权的访问。这 file_get_contents 和 file_put_contents 函数分别用于读取加密密钥和存储加密凭证。此方法可确保即使有人获得对存储文件的访问权限,如果没有加密密钥,他们也无法读取凭据。
第二个 PHP 脚本侧重于解密并使用加密的 SMTP 凭据发送电子邮件。它使用 openssl_decrypt 函数来解密凭据,使其可用于电子邮件发送过程。该脚本与 PHPMailer 集成,通过解密的 SMTP 凭据发送电子邮件。 PHPMailer 的使用简化了安全设置和发送电子邮件的过程。此外,shell 脚本旨在使用解密的凭据更新 Exim 配置。它使用 sed -i 命令修改Exim配置文件和 systemctl restart 命令重新启动 Exim 服务,确保立即应用新配置。
使用 PHP 保护您的 SES SMTP 凭证
用于加密和存储 SMTP 凭据的 PHP 脚本
<?php
// Load encryption key from a secure location
$encryption_key = file_get_contents('/path/to/secure/key');
// SMTP credentials
$smtp_user = 'your_smtp_user';
$smtp_pass = 'your_smtp_password';
// Encrypt credentials
$encrypted_user = openssl_encrypt($smtp_user, 'aes-256-cbc', $encryption_key, 0, $iv);
$encrypted_pass = openssl_encrypt($smtp_pass, 'aes-256-cbc', $encryption_key, 0, $iv);
// Store encrypted credentials in a file
file_put_contents('/path/to/secure/credentials', $encrypted_user . "\n" . $encrypted_pass);
?>
在 PHP 中解密并使用 SES SMTP 凭证
用于解密和使用 SMTP 凭证的 PHP 脚本
<?php
// Load encryption key and credentials from secure location
$encryption_key = file_get_contents('/path/to/secure/key');
$credentials = file('/path/to/secure/credentials');
$encrypted_user = trim($credentials[0]);
$encrypted_pass = trim($credentials[1]);
// Decrypt credentials
$smtp_user = openssl_decrypt($encrypted_user, 'aes-256-cbc', $encryption_key, 0, $iv);
$smtp_pass = openssl_decrypt($encrypted_pass, 'aes-256-cbc', $encryption_key, 0, $iv);
// Use decrypted credentials to send email
// Example using PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'email-smtp.us-east-1.amazonaws.com';
$mail->SMTPAuth = true;
$mail->Username = $smtp_user;
$mail->Password = $smtp_pass;
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// ... additional email setup ...
?>
更新 Exim 配置以使用加密凭证
用于更新 Exim 配置的 Shell 脚本
#!/bin/bash
# Load encryption key and credentials from secure location
encryption_key=$(cat /path/to/secure/key)
credentials=$(cat /path/to/secure/credentials)
encrypted_user=$(echo "$credentials" | head -n 1)
encrypted_pass=$(echo "$credentials" | tail -n 1)
# Decrypt credentials
smtp_user=$(echo "$encrypted_user" | openssl enc -aes-256-cbc -d -a -A -k "$encryption_key")
smtp_pass=$(echo "$encrypted_pass" | openssl enc -aes-256-cbc -d -a -A -k "$encryption_key")
# Update Exim configuration
sed -i "s/smtp_user = .*/smtp_user = $smtp_user/" /etc/exim/exim.conf
sed -i "s/smtp_pass = .*/smtp_pass = $smtp_pass/" /etc/exim/exim.conf
# Restart Exim service
systemctl restart exim
使用 SES 增强 EC2 上的电子邮件安全
除了加密和安全存储 SMTP 凭据之外,为您的电子邮件系统实施全面的安全策略也很重要。一种有效的措施是利用 Amazon EC2 安全组来限制对 SMTP 端口的访问。通过限制对特定 IP 地址或范围的访问,您可以降低未经授权访问的风险。此外,定期轮换 SES SMTP 凭据可以减轻潜在泄漏的影响。
另一个重要方面是在您的 EC2 实例和 SES 帐户上启用日志记录和监控。实施 AWS CloudTrail 和 Amazon CloudWatch 可以帮助您跟踪和分析与电子邮件系统相关的任何可疑活动。这种主动方法使您能够及时识别并响应安全事件,从而维护电子邮件通信的完整性和安全性。
SES SMTP 安全的常见问题和解决方案
- 如何限制对 EC2 上的 SMTP 端口的访问?
- 使用 Amazon EC2 安全组仅允许特定 IP 地址或范围访问您的 SMTP 端口。
- 加密 SMTP 凭据有什么好处?
- 加密 SMTP 凭据可确保即使发生未经授权的访问,凭据也无法轻易读取或使用。
- 我应该多久轮换一次 SES SMTP 凭据?
- 建议每 90 天轮换一次 SES SMTP 凭据,如果您怀疑发生泄漏,请立即轮换一次。
- 我可以使用哪些工具来监控我的电子邮件系统是否存在可疑活动?
- 利用 AWS CloudTrail 和 Amazon CloudWatch 监控和分析与您的电子邮件系统相关的活动。
- 如何安全地存储我的加密密钥?
- 将您的加密密钥存储在安全位置,例如 AWS Secrets Manager 或硬件安全模块 (HSM)。
- 为什么要使用 PHPMailer 发送电子邮件?
- PHPMailer 提供了一个强大且易于使用的界面,用于通过 SMTP 安全地发送电子邮件。
- 如果我的 SMTP 凭据泄露,我应该采取什么步骤?
- 立即撤销泄露的凭证,颁发新的凭证,并调查泄露的原因,以防止未来发生类似事件。
- 如何使用新凭据自动更新 Exim 配置?
- 使用 shell 脚本 sed -i 用于更新 Exim 配置文件的命令和 systemctl restart 应用更改。
关于保护 SMTP 凭据的最终想法
维护 SES SMTP 凭据的安全对于防止未经授权的访问和滥用至关重要。通过加密凭据并通过安全组限制访问,您可以显着减少漏洞。此外,定期轮换您的凭据并监控系统活动可以帮助检测和防止安全漏洞。实施这些做法可确保电子邮件通信系统更加安全,并有助于保护您的域的声誉。