Kurumsal mail sunucu Php log analizi

Kurumsal mail sunucularında tüm kullanıcıların mail loglarının bulunduğu ana log dosyanızdan bir müşterinize ait log talep edildiğinde sunucudaki tüm trafiği içeren mail loglarını üçüncü taraflara iletmek diğer kişilerin trafik bilgisini de içerdiği için doğru olmayacak ayrıca gönderdiğiniz kişi içinde log dosyasını analiz etmesi dosya büyüklüğü açısından zor bir duruma dönüşecektir. Bu durumda mail server log filtreleme yaparak müşteriye sadece kendine ait logları göndermek gerekmektedir. Bu script ile mailenable mail sunucularının smtp log dosyasından bir mail adresine ait trafik loglarını ayırarak ayrı bir dosya olarak kaydedebilirsiniz. Aynı zamanda script dosyasını kullanarak spam filtreleme gibi bir çok log analiz ihtiyacınızı da görebilirsiniz.

SMTP Log Analizi: Mail Trafiği Nasıl Filtrelenir?

---

12/08/25 00:01:39 SMTP-IN 1D752FE4438D41BB9267B3EB233FB53F.MAI 1572 195.42.*.27 MAIL MAIL FROM: 250 Requested mail action okay, completed 43 36
12/08/25 00:01:46 SMTP-IN 1D752FE4438D41BB9267B3EB233FB53F.MAI 1572 195.42.*.27 RCPT RCPT TO: 250 Requested mail action okay, completed 43 40
12/08/25 00:01:46 SMTP-IN 1D752FE4438D41BB9267B3EB233FB53F.MAI 1572 195.42.*.27 DATA DATA 354 Start mail input; end with . 46 6

---

mail enable kurumsal mail sunucularında mail logları bu şekilde tutulmaktadır, aynı anda gerçekleşen trafiklerde satıralar arasında farklı maillerin trafikleri bulunabilmektedir, mail loglarından bir maile ait logları ayrıştırabilmek için mail adresini ve mail adresinin bulunduğu satırdaki ip adresini alarak alt ve üst satırlarda bu ip adresinin geçtiği satıraları filtreleyerek yüksek oranda mail log filtreleme işlemi sağlamış olursunuz, nadiren aynı ip adresinden faklı kullanıcıya aynı saniyelerde gerçekleşen trafik olursa (alt üst 100 satır sorgulayacağımız için çok zor) farklı adreslerin logları da karışabilir bunlarıda işlem sonrasında kontol edebilirsiniz.

Mail Server Php Log Analiz Scripti


$dosya="SMTP-Activity-251209.log";
$logDosyasi = __DIR__ . "/log/$dosya";
$ciktiDosyasi = __DIR__ . "/log/Cikti-$dosya";
$targetMail = "info@*******.com";
$range = 100;

// Kendi sunucusunuzdan gelen trafikleri burda ayıklayabilirsiniz
$excludeIp = "185.*.*.14";

if (!file_exists($logDosyasi)) {
    die("Log dosyası bulunamadı");
}
$lines = file($logDosyasi, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$toplam = count($lines);
$cikti = fopen($ciktiDosyasi, "w");
for ($i = 0; $i < $toplam; $i++) {

    if (stripos($lines[$i], $targetMail) !== false) {
        $parts = preg_split('/\t+/', $lines[$i]);
        $ip = trim($parts[4] ?? '');

    //  eğer ana satırın IP'si atlayacağımız ip adresi ise skip
        if (!$ip || $ip === $excludeIp) continue;
        $start = max(0, $i - $range);
        $end   = min($toplam - 1, $i + $range);

    //  fwrite($cikti, "==== MAIL BULUNDU ====\n");
        fwrite($cikti, $lines[$i] . "\n");
    //   fwrite($cikti, "==== IP: $ip ====\n");

        for ($j = $start; $j <= $end; $j++) {
            $p = preg_split('/\t+/', $lines[$j]);
            $currentIp = trim($p[4] ?? '');
    //  bu IP'yi tamamen atla
            if ($currentIp === $excludeIp) continue;
            if ($currentIp === $ip) {
                fwrite($cikti, $lines[$j] . "\n");
            }
        }
        fwrite($cikti, "\n\n");
    }
}
fclose($cikti);
echo "Tamamlandı → log/Cikti-$dosya";

kodu çalıştırdığınızda log klasörünün içine Cıkti- ile başlayan bir çıktı log dosyası oluşacak ve aradığınız mail adresine ait loglar ayrıştırılmış olarak almış olucaksınız. Çıktıya bakarak yazdığımız php log parser uygulamasında kendinize göre değişiklikler yapabilir sonuçları daha doğru ve anlaşılabilir hale getirebilirsiniz.

Mail Smtp Log Analiz Php Scripti ile Neler Yapılabilir?

Burda anlattığımız smtp log analizinde bir mail adresine ait mail loglarını ayrıştırmayı yapabildiğimiz gibi php analiz scriptinde ufak değişiklikler yaparak brute force saldırılarına karşı örneğin 535 Invalid Username or Password kodunu arayarak tespitler veya farklı kodları ayrıştırarak spam filtreleme gibi bir çok analiz yapmak mümkündür.