保护 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 filefile_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 PHPMaileruse 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 locationencryption_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 credentialssmtp_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 configurationsed -i "s/smtp_user = .*/smtp_user = $smtp_user/" /etc/exim/exim.confsed -i "s/smtp_pass = .*/smtp_pass = $smtp_pass/" /etc/exim/exim.conf# Restart Exim servicesystemctl 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 凭据的安全对于防止未经授权的访问和滥用至关重要。通过加密凭据并通过安全组限制访问,您可以显着减少漏洞。此外,定期轮换您的凭据并监控系统活动可以帮助检测和防止安全漏洞。实施这些做法可确保电子邮件通信系统更加安全,并有助于保护您的域的声誉。