← Wróć do bloga Strona główna

Hardening MartynForge z Cloudflare (darmowy plan)

wrzesień 2025 · ~10–12 min • Cybersecurity

Cloudflare hardening – okładka

Poniżej pokazuję, jak w kilkanaście minut podnieśliśmy bezpieczeństwo MartynForge – bez ingerencji w serwer i bez kosztów. Tłumaczę prosto, „po co” jest każdy krok, i gdzie kliknąć w Cloudflare.

Problem

Małe strony też są atakowane. Boty skanują Internet w poszukiwaniu paneli /admin, wysyłają spam przez formularze i testują znane luki. Efekt? Spowolnienia, dziwne błędy, a w skrajnych przypadkach — przejęcie treści. Chcieliśmy podnieść bezpieczeństwo bez dotykania serwera i bez nowych kosztów.

Plan

  • Wymusić HTTPS (szyfrowanie zawsze i wszędzie).
  • Dodać nagłówki bezpieczeństwa (przeglądarka dostaje jasne zasady).
  • Włączyć Bot Fight Mode (odsiać najprostsze automaty).
  • Zbudować mini-WAF w darmowym planie (własne reguły firewall).

1) Wymuszenie HTTPS (SSL/TLS + HSTS)

Po co? Żeby nikt nie podsłuchał danych po drodze i żeby przeglądarka pamiętała, że z naszą domeną wolno łączyć się tylko przez HTTPS.

  1. Wejdź w SSL/TLS → Edge Certificates.
  2. Włącz Always Use HTTPS oraz Automatic HTTPS Rewrites.
  3. Włącz HSTS (HTTP Strict Transport Security):
    • Enable HSTS: ON
    • Max Age: 12 months
    • includeSubDomains: OFF (na start; włącz, gdy wszystkie subdomeny mają HTTPS)
    • Preload: OFF (to bilet w jedną stronę — decyzja później)
    • No-Sniff Header: ON
Uwaga: HSTS utrudnia powrót do HTTP. Włączaj, gdy masz pewność, że wszystko już chodzi po HTTPS.
Cloudflare – konfiguracja HSTS
Cloudflare – ustawienia HSTS

2) Nagłówki bezpieczeństwa (bez serwera)

Po co? To jak „znaki drogowe” dla przeglądarki: co wolno ładować, skąd i w jakiej formie. Zmniejszamy ryzyko wstrzyknięcia złośliwego kodu i przypadkowego ładowania zasobów z obcych domen.

  1. Przejdź do Rules → Transform Rules → Response header modification.
  2. Kliknij Create ruleSet static i dodaj nagłówki:
  • Content-Security-Policy:
    default-src 'self'; img-src 'self' data: https:; style-src 'self' https: 'unsafe-inline'; script-src 'self' https: 'unsafe-inline'; font-src 'self' https: data:; connect-src 'self' https:; frame-ancestors 'none'
    Wersja „startowa”. Jeśli używasz dodatkowych CDN-ów (np. ikon lub fontów), dopisz ich domeny.
  • Strict-Transport-Security: max-age=31536000; includeSubDomains
  • X-Frame-Options: DENY
  • X-Content-Type-Options: nosniff
  • Referrer-Policy: strict-origin-when-cross-origin
  • Permissions-Policy: geolocation=(), camera=(), microphone=(), payment=()
Cloudflare – Response Header Modification (security headers)
Cloudflare – Response Header Modification – nagłówki bezpieczeństwa
Tip: Jeśli nie jesteś pewien, co blokuje CSP, włącz na 24–48h nagłówek Content-Security-Policy-Report-Only (druga reguła) – zdiagnozujesz, co trzeba dopuścić, zanim „dokręcisz śrubę”.

3) Bot Fight Mode

Po co? Najprostsze boty odpadną automatycznie zanim zaczną szarpać Twoje endpointy.

  1. Wejdź w Security → Bots.
  2. Włącz Bot Fight Mode.
Cloudflare – Bot Fight Mode
Cloudflare – Bot Fight Mode

4) „Mini-WAF” w darmowym planie (Security rules)

Po co? Pełny WAF (Managed Rules) jest płatny, ale darmowe Security rules pozwalają zbudować skuteczny filtr pod Twoją stronę.

A. Blokada ruchu z wybranych krajów

Nie obsługujemy klientów z RU/CN, więc ten ruch blokujemy na wejściu.

(ip.geoip.country in {"RU" "CN"})

Action: Block

B. Challenge dla całego świata poza PL/NL/GB

Dla Polski, Holandii i UK dostęp „na czysto”. Cała reszta świata dostaje prosty challenge (anty-bot).

not (ip.geoip.country in {"PL" "NL" "GB"})

Action: Managed Challenge

C. Blokada zbędnych metod HTTP

Strona nie potrzebuje metod zapisu — atakujący je kochają. Zostaw GET/POST, zablokuj resztę.

(http.request.method in {"DELETE" "PUT" "PATCH" "PURGE"})

Action: Block (TRACE i tak nie przechodzi przez edge Cloudflare; OPTIONS zostaw dla CORS)

D. Ochrona panelu /admin

Jeśli kiedyś powstanie panel, już jest pod tarczą.

(http.request.uri.path contains "/admin")

Action: Managed Challenge (albo Block, jeśli panel nie ma być publiczny)

Cloudflare – lista reguł Security rules (mini-WAF)
Cloudflare – Security rules – mini‑WAF (lista przykładowych reguł)
Najczęstszy błąd: ustawienie trzech warunków Country does not equal połączonych OR (PL, NL, GB). Taki warunek spełnia każdy kraj – więc challenge dostaniesz też Ty.
Poprawnie: użyj not (ip.geoip.country in {"PL" "NL" "GB"}).

Efekt

  • HTTPS zawsze – brak „gołego” HTTP.
  • Przeglądarka z zasadami – CSP i spółka ograniczają ryzykowne źródła.
  • Mniej botów – część odpada automatycznie, reszta odbija się na challenge.
  • Mini-WAF – realne odfiltrowanie śmieci i prób ataków w darmowym planie.
W praktyce: strona działa normalnie dla użytkownika, a ryzyko nadużyć i skanów spada wielokrotnie. Logi Cloudflare zaczną pokazywać blokady/challenge dla „podejrzanych” zapytań.

Checklist po wdrożeniu

  • DevTools → NetworkResponse Headers: widać CSP/HSTS/XFO/XCTO?
  • Strona ładuje fonty/ikony? Jeśli nie – dodaj ich domeny do CSP (font-src/img-src).
  • Security → Events: czy Twoje żądania nie wpadają w regułę geo-challenge?
  • Sprawdź formularz kontaktowy po włączeniu reguł (czy nie odcinamy potrzebnych metod).

FAQ (krótko)

Czy muszę blokować TRACE? Nie – Cloudflare i tak go nie przepuszcza na edge.

Czy mogę włączyć HSTS dla subdomen? Tak, gdy wszystkie subdomeny mają poprawny HTTPS.

Co z pełnym WAF? Warto rozważyć plan Pro (płatny), gdy ruch rośnie i potrzebujesz gotowych reguł OWASP.


Co dalej

W kolejnych wpisach: kopie zapasowe i testy przywracania, monitoring błędów, proste alerty bezpieczeństwa oraz Turnstile (anty-spam) na formularz.

Potrzebujesz pomocy?

Jeśli wolisz, żeby ktoś zrobił to za Ciebie — chętnie pomogę.

📩 [email protected]