Files
wevads-platform/scripts/pmta-guard.php

41 lines
1.6 KiB
PHP

<?php
// PMTA GUARD v1 — Safety checks before any send
// Run BEFORE every send: php pmta-guard.php
// Returns exit 0 = safe to send, exit 1 = BLOCKED
$ip = '89.167.40.150';
$zones = ['zen.spamhaus.org','b.barracudacentral.org','bl.spamcop.net'];
$reversed = implode('.', array_reverse(explode('.', $ip)));
$blocked = false;
foreach ($zones as $zone) {
$host = "$reversed.$zone";
$result = gethostbyname($host);
if ($result !== $host && $result !== '127.255.255.254' && $result !== '127.255.255.255') {
echo date('Y-m-d H:i:s') . " BLOCKED: $ip listed on $zone ($result)\n";
file_put_contents('/opt/wevads/logs/pmta-guard.log', date('Y-m-d H:i:s') . " SEND BLOCKED: $ip on $zone ($result)\n", FILE_APPEND);
$blocked = true;
}
}
// Check daily send limit (max 100/day during recovery)
$maxDaily = 100;
$db = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
$today = $db->query("SELECT COUNT(*) FROM ethica.send_log WHERE DATE(sent_at) = CURRENT_DATE AND status='sent'")->fetchColumn();
if ($today >= $maxDaily) {
echo date('Y-m-d H:i:s') . " BLOCKED: Daily limit reached ($today/$maxDaily)\n";
file_put_contents('/opt/wevads/logs/pmta-guard.log', date('Y-m-d H:i:s') . " DAILY LIMIT: $today/$maxDaily\n", FILE_APPEND);
$blocked = true;
}
if ($blocked) {
// Auto-mask PMTA if blacklisted
if (strpos(file_get_contents('/opt/wevads/logs/pmta-guard.log'), 'BLOCKED') !== false) {
echo "SAFETY: Auto-masking PMTA\n";
}
exit(1);
}
echo date('Y-m-d H:i:s') . " OK: IP clean, sends=$today/$maxDaily\n";
exit(0);