Przejdź do głównej zawartości

Whitelist filtra antyspamowego

Symulacje phishingu w PhishSpot wyglądają jak prawdziwe ataki — taki jest cel. Korporacyjne filtry antyspamowe (Microsoft 365, Google Workspace, Mimecast, Proofpoint, on-prem Postfix/SpamAssassin) rutynowo je blokują, chyba że są jawnie wpuszczone na białą listę. Ten rozdział opisuje, jak dać administratorowi serwera pocztowego jeden URL, który wpina się w filtr — i sprawia, że lista pozostaje aktualna automatycznie.

SPF, DKIM i DMARC mówią serwerom odbierającym: “ten mail naprawdę pochodzi z domeny, z której się podaje”. Prawdziwy phishing często to spełnia — dlatego phishing jest skuteczny. Te same testy przechodzą również nasze symulacje, ale nowoczesne filtry antyspamowe używają znacznie więcej niż SPF/DKIM: analizują wzorce treści, reputację linków, historię zachowań nadawcy i kilkadziesiąt innych sygnałów. Wiele z tych sygnałów (słusznie!) zakwalifikuje symulację phishingu jako podejrzaną.

Właściwe rozwiązanie polega na tym, żeby filtr odbiorcy omijał skanowanie spamu dla ruchu pochodzącego z PhishSpot. Wymaga to, żeby admin powiedział swojemu filtrowi:

  • z jakich adresów IP wysyłamy,
  • jakich domen nadawcy używamy, oraz
  • (opcjonalnie) jakie konkretne adresy nadawcy pojawiają się w polu From:.

PhishSpot generuje tę listę per account i udostępnia ją pod stałym URL-em. Skonfiguruj filtr żeby pobierał ją cyklicznie (albo reagował na nasz webhook gdy się zmieni) i gotowe.

Otwórz Ustawienia konta → Integracje → Whitelist filtra antyspamowego. Zobaczysz panel z:

  • Twoim unikalnym URL-em zawierającym 64-znakowy token sekretny,
  • Selektorem formatu (txt / json / csv / md / Microsoft 365 / Google Workspace / Mimecast / Proofpoint / Postfix / SpamAssassin),
  • Plakietką statusu pokazującą, kiedy URL był ostatnio pobierany i z jakiego IP,
  • Przyciskiem rotacji, który unieważnia bieżący URL,
  • Przełącznikiem wyłączania, który zwraca 410 Gone do czasu ponownego włączenia,
  • Podglądem na żywo tego, co jest aktualnie dozwolone,
  • Historią pobrań ostatnich 50 odsłon.

URL to jedna linia, którą wklejasz do filtra antyspamowego lub do małego skryptu odświeżającego. Nie ma żadnego API tokena, żadnego nagłówka Authorization — sekret jest w ścieżce, a HTTPS szyfruje go w trakcie przesyłania. Ograniczamy każdy token do 60 zapytań na minutę, logujemy każde pobranie (IP + UA) w historii i działamy wyłącznie po HTTPS.

FormatKiedy używać
txtCzysty tekst. Domyślny. Łatwy do grepowania i pipe’owania do skryptów.
jsonUstrukturyzowany payload. Najlepszy do integracji niestandardowych.
csvGeneryczny CSV — dobry fallback.
mdMarkdown czytelny dla człowieka — do dokumentacji i przeglądu.
microsoft365Snippet PowerShell + komendy Tenant Allow/Block List dla Exchange Online.
google-workspaceCSV w formacie importu Google Admin email allowlist.
mimecastCSV w kształcie polityki Mimecast Permitted Senders.
proofpointCSV w kształcie Proofpoint PPS Safelist.
postfixSnippet access table dla on-prem Postfix.
spamassassinLinie whitelist_from dla local.cf.

Schemat URL: https://platform.phishspot.com/api/v1/integrations/spam/<TOKEN>/<format> — jeśli pominiesz format, dostaniesz czysty tekst.

  1. W panelu PhishSpot wybierz Microsoft 365 (PowerShell) i skopiuj URL.
  2. Zapisz do phishspot-whitelist.ps1 na stacji roboczej z zainstalowanym Exchange Online PowerShell.
  3. Uruchom Connect-ExchangeOnline (potrzebne uprawnienia Exchange Administrator).
  4. Wykonaj skrypt. Robi dwie rzeczy:
    • Dodaje każdą domenę i adres nadawcy do Tenant Allow/Block List przez New-TenantAllowBlockListItems,
    • Łączy IP-ki bramki z Hosted Connection Filter Policy przez Set-HostedConnectionFilterPolicy.
  5. Opcjonalnie utwórz regułę Mail Flow z “skip spam filtering” dla nadawców pasujących do @<twoja-domena-phishspot>. Ponawiaj pobieranie URL co tydzień, żeby lista pozostała aktualna.
  1. Wybierz format Google Workspace (CSV) i pobierz plik.
  2. W Google Admin Console przejdź do Aplikacje → Google Workspace → Gmail → Spam, phishing i złośliwe oprogramowanie.
  3. Otwórz Email allowlist dla swojej OU najwyższego poziomu i wklej wpisy IP z CSV (jeden na linię).
  4. Otwórz Inbound gateway (też w ustawieniach spam) i dodaj te same IP. To sprawia, że Gmail omija scoring spam dla tych połączeń.
  5. Aby zezwalać po domenie zamiast po IP, dodaj wpisy domen z CSV do listy Approved senders (ta sama sekcja).
  1. Wybierz Mimecast (CSV) w panelu.
  2. W Mimecast Administration przejdź do Gateway → Policies → Permitted Senders.
  3. Kliknij Import i załaduj CSV. Mimecast pobiera IP-ki nadawcy z kolumny Sender IP, a nadawców/domeny z kolumny Sender.
  4. Zaplanuj zadanie curl (curl -fSL '<URL>' > whitelist.csv potem re-import) albo użyj Mimecast API do automatyzacji.
  1. Wybierz Proofpoint PPS (CSV).
  2. Załaduj przez System → User Management → Safelists → Import w UI PPS, albo przepchnij przez PPS REST API (/api/v1/safelist/import).
  3. PPS traktuje wpisy nadawcy, domeny i IP inaczej — kolumna type w CSV mówi PPS-owi, na którą listę dany wiersz wrzucić.
  1. Wybierz Postfix access table.
  2. Zapisz do /etc/postfix/phishspot_whitelist, potem uruchom postmap /etc/postfix/phishspot_whitelist żeby skompilować tabelę.
  3. Odwołaj się w main.cf:
    smtpd_sender_restrictions =
    check_sender_access hash:/etc/postfix/phishspot_whitelist,
    ...
  4. Uruchom postfix reload.
  5. Dla obejścia po IP, skopiuj IP-ki do osobnego pliku CIDR i dodaj check_client_access cidr:/etc/postfix/phishspot_ips do smtpd_client_restrictions.
  1. Wybierz SpamAssassin local.cf.
  2. Doklej snippet do /etc/spamassassin/local.cf.
  3. Sprawdź spamassassin -D --lint.
  4. Zrestartuj spamd.
  5. Snippet używa whitelist_from *@<domena> i trusted_networks <ipsy> — to drugie podnosi score zaufania dla relayowanej poczty.

Whitelist zmienia się, gdy (Ty lub PhishSpot) dodaje domenę nadawczą, gdy kampania używa nowego adresu From:, albo gdy nasz infra-team rotuje IP-ki bramki. Aby utrzymać stronę klienta zawsze aktualną:

  1. W Ustawienia konta → Webhooki → Endpointy dodaj nowy endpoint wskazujący na URL po Twojej stronie.
  2. Zasubskrybuj event type spam_whitelist.updated.
  3. Gdy lista się zmieni, POST-ujemy do tego URL podpisany payload (HMAC-SHA256 w X-Webhook-Signature używając signing secret endpointu). Payload zawiera nowy snapshot digest i pełny zestaw URL-i whitelisty w różnych formatach.
  4. Twój handler weryfikuje podpis, a potem uruchamia import specyficzny dla platformy (job PowerShell powyżej, wywołanie Google Admin API, Mimecast / Proofpoint API, etc.).

Powtarzamy nieudane dostarczenia 5 razy z exponential backoff. Po 5 kolejnych porażkach mailujemy adminów konta, żeby integracja nie zgniła po cichu.

Śledzimy, kiedy każdy URL był ostatnio pobrany. Jeśli minie 24 godziny bez udanego pobrania — czyli filtr antyspamowy przestał pobierać listę — wysyłamy mail do każdego admina w koncie. Najczęstsze przyczyny:

  • Cron / scheduled task pobierający URL przestał działać.
  • Firewall blokuje teraz wychodzący HTTPS do platform.phishspot.com.
  • URL został wygenerowany ponownie, a stary wygasł, zanim ktokolwiek zaktualizował filtr.
  • Integracja została przypadkowo usunięta z filtra antyspamowego.

Aby uciszyć ostrzeżenie, wywołaj ręcznie pobranie po Twojej stronie (wystarczy jeden curl — resetujemy licznik przy każdym udanym zapytaniu).

  • Zaplanuj pobieranie przynajmniej raz dziennie, najlepiej co godzinę. Endpoint jest tani.
  • Weryfikuj snapshot digest (nagłówek X-PhishSpot-Snapshot-Digest) — jeśli zgadza się z tym, co już masz, pomiń re-import żeby uniknąć szumu w downstream systemie.
  • Rotuj kwartalnie. Nawet bez wycieku regularna rotacja ogranicza blast radius, gdyby skrypt kiedyś zalogował URL.
  • Monitoruj też po swojej stronie. Alarmuj, jeśli cron job nie zadziałał poprawnie przez N godzin. Nie polegaj wyłącznie na naszym mailu stale-warning.
  • Używaj webhooka oprócz crona, nie zamiast. Cron to safety net; webhook to szybka ścieżka.
  • Przetestuj bypass funkcją “Wyślij testowy email” w PhishSpot przed pełnym uruchomieniem. Jeśli test nie trafia do skrzynki odbiorcy — bypass nie działa.

“Nasze symulacje phishingu nadal trafiają do spamu.” Sprawdź, czy filtr antyspamowy faktycznie pobiera URL: zajrzyj do historii pobrań w panelu PhishSpot — czy IP i timestamp zgadzają się z egress IP i harmonogramem pobierania Twojego filtra? Jeśli tak, sprawdź, czy reguła bypass jest na odpowiedniej polityce (filtry często mają osobne polityki inbound vs. transport). Jeśli nie, URL nie dociera do filtra.

“Format CSV, którego oczekuje mój filtr, jest inny.” Użyj zwykłego formatu csv jako szablonu i przetransformuj po stronie serwera. Format json jest najbardziej elastycznym źródłem — łatwy do zmapowania do dowolnego docelowego schematu z jq lub 20-linijkowym skryptem.

“Mój webhook nie otrzymuje dostarczeń.” Sprawdź URL endpointu w Webhooki → Endpointy — upewnij się, że jest HTTPS, publicznie osiągalny i nie jest za ścianą uwierzytelniania. Otwórz stronę szczegółów endpointu w PhishSpot, żeby zobaczyć log dostarczeń z kodami odpowiedzi i body. Sprawdź, czy obsługa podpisu HMAC po Twojej stronie pasuje do OpenSSL::HMAC.hexdigest("SHA256", signing_secret, raw_body).

“Co jeśli zmienicie IP-ki bramki?” Dostaniesz event spam_whitelist.updated w momencie, gdy dokonamy zmiany, a odpowiedź URL zawiera nowe IP natychmiast. Jeśli Twój filtr ma świeże pobranie w oknie zmiany — w ogóle tego nie zauważysz.

“Czy mogę mieć wiele URL-i dla różnych filtrów?” Nie w MVP — jest jeden aktywny URL per account. Jeśli potrzebujesz osobnych URL-i (np. dla phased rollout), skorzystaj z przepływu rotacji: zrotuj, zaczekaj 24h, zrotuj ponownie. Każda rotacja daje świeży URL z 24-godzinnym grace period.