Amazon EC2 SES SMTP 자격 증명 유출: 해결 방법

Amazon EC2 SES SMTP 자격 증명 유출: 해결 방법
Amazon EC2 SES SMTP 자격 증명 유출: 해결 방법

EC2에서 SES SMTP 자격 증명 보호

SES SMTP 자격 증명의 보안을 보장하는 것은 특히 cPanel 웹 메일(Exim) 및 PHP를 사용하여 이메일을 보낼 때 중요합니다. 최근에는 이러한 자격 증명이 여러 번 유출되어 기본 도메인 이메일에서 승인되지 않은 스팸 이메일이 전송되었습니다.

이 문서에서는 잠재적인 취약성에 대해 설명하고 Rocky 9를 실행하는 Amazon EC2 인스턴스에서 SES SMTP 자격 증명을 보호하기 위한 실용적인 단계를 제공합니다. 위험을 이해하고 제안된 보안 조치를 구현하면 향후 위반으로부터 이메일 시스템을 보호할 수 있습니다.

명령 설명
openssl_encrypt() 지정된 암호와 키를 사용하여 데이터를 암호화합니다. SMTP 자격 증명을 안전하게 저장하는 데 사용됩니다.
openssl_decrypt() 이전에 암호화된 데이터를 해독합니다. 원래 SMTP 자격 증명을 검색하는 데 사용됩니다.
file_get_contents() 전체 파일을 문자열로 읽어옵니다. 안전한 위치에서 암호화 키를 로드하는 데 사용됩니다.
file_put_contents() 파일에 데이터를 씁니다. 암호화된 SMTP 자격 증명을 안전하게 저장하는 데 사용됩니다.
PHPMailer\PHPMailer\PHPMailer PHP에서 SMTP를 통해 이메일을 보내는 데 사용되는 PHPMailer 라이브러리의 클래스입니다.
sed -i "s/command" 파일을 내부에서 수정하는 스트림 편집기 명령입니다. 해독된 자격 증명으로 Exim 구성을 업데이트하는 데 사용됩니다.
systemctl restart 시스템 서비스를 다시 시작합니다. 구성을 업데이트한 후 Exim 서비스를 다시 시작하는 데 사용됩니다.

SES SMTP 자격 증명 유출에 대한 솔루션 이해

제공된 스크립트는 무단 액세스 및 오용을 방지하기 위해 SES SMTP 자격 증명을 보호하고 관리하도록 설계되었습니다. 첫 번째 PHP 스크립트는 다음을 사용하여 SMTP 자격 증명을 암호화하는 방법을 보여줍니다. openssl_encrypt 중요한 정보가 안전하게 저장되도록 보장하는 기능입니다. 자격 증명은 보안 키로 암호화되어 파일에 저장되어 무단 액세스로부터 보호됩니다. 그만큼 file_get_contents 그리고 file_put_contents 함수는 각각 암호화 키를 읽고 암호화된 자격 증명을 저장하는 데 사용됩니다. 이 방법을 사용하면 누군가가 저장된 파일에 액세스할 수 있더라도 암호화 키 없이는 자격 증명을 읽을 수 없습니다.

두 번째 PHP 스크립트는 이메일 전송을 위해 암호화된 SMTP 자격 증명을 해독하고 사용하는 데 중점을 둡니다. 그것은 자격 증명을 해독하여 이메일 전송 프로세스에 사용할 수 있도록 하는 기능입니다. 이 스크립트는 PHPMailer와 통합되어 해독된 SMTP 자격 증명을 통해 이메일을 보냅니다. PHPMailer를 사용하면 이메일을 안전하게 설정하고 보내는 프로세스가 단순화됩니다. 또한 셸 스크립트는 해독된 자격 증명으로 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 구성을 업데이트하는 쉘 스크립트

#!/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 보안에 대한 일반적인 질문 및 해결 방법

  1. EC2의 SMTP 포트에 대한 액세스를 어떻게 제한할 수 있습니까?
  2. 특정 IP 주소 또는 범위만 SMTP 포트에 액세스하도록 허용하려면 Amazon EC2 보안 그룹을 사용하십시오.
  3. SMTP 자격 증명을 암호화하면 어떤 이점이 있나요?
  4. SMTP 자격 증명을 암호화하면 무단 액세스가 발생하더라도 자격 증명을 쉽게 읽거나 사용할 수 없습니다.
  5. SES SMTP 자격 증명을 얼마나 자주 교체해야 합니까?
  6. SES SMTP 자격 증명을 90일마다 교체하거나 누출이 의심되는 경우 즉시 교체하는 것이 좋습니다.
  7. 의심스러운 활동이 있는지 이메일 시스템을 모니터링하려면 어떤 도구를 사용할 수 있나요?
  8. 활용 AWS CloudTrail 그리고 Amazon CloudWatch 이메일 시스템과 관련된 활동을 모니터링하고 분석합니다.
  9. 암호화 키를 안전하게 저장하려면 어떻게 해야 합니까?
  10. 암호화 키를 AWS Secrets Manager 또는 하드웨어 보안 모듈(HSM)과 같은 안전한 위치에 저장하십시오.
  11. 이메일을 보낼 때 PHPMailer를 사용해야 하는 이유는 무엇입니까?
  12. PHPMailer는 SMTP를 통해 안전하게 이메일을 보낼 수 있는 강력하고 사용하기 쉬운 인터페이스를 제공합니다.
  13. 내 SMTP 자격 증명이 유출된 경우 어떤 조치를 취해야 합니까?
  14. 유출된 자격 증명을 즉시 취소하고 새 자격 증명을 발급하며 유출 원인을 조사하여 향후 사고를 예방하십시오.
  15. 새로운 자격 증명으로 Exim 구성 업데이트를 자동화하려면 어떻게 해야 합니까?
  16. 다음과 함께 쉘 스크립트를 사용하십시오. sed -i Exim 구성 파일을 업데이트하는 명령과 systemctl restart 변경 사항을 적용합니다.

SMTP 자격 증명 보안에 대한 최종 생각

무단 액세스 및 오용을 방지하려면 SES SMTP 자격 증명의 보안을 유지하는 것이 중요합니다. 자격 증명을 암호화하고 보안 그룹을 통해 액세스를 제한하면 취약점을 크게 줄일 수 있습니다. 또한 정기적으로 자격 증명을 교체하고 시스템 활동을 모니터링하면 보안 침해를 감지하고 예방하는 데 도움이 될 수 있습니다. 이러한 관행을 구현하면 보다 안전한 이메일 통신 시스템이 보장되고 도메인의 평판을 보호하는 데 도움이 됩니다.