Hardening MartynForge z Cloudflare (darmowy plan)
wrzesień 2025 · ~10–12 min • Cybersecurity
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.
- Wejdź w SSL/TLS → Edge Certificates.
- Włącz Always Use HTTPS oraz Automatic HTTPS Rewrites.
- 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
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.
- Przejdź do Rules → Transform Rules → Response header modification.
- Kliknij Create rule → Set 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; includeSubDomainsX-Frame-Options:DENYX-Content-Type-Options:nosniffReferrer-Policy:strict-origin-when-cross-originPermissions-Policy:geolocation=(), camera=(), microphone=(), payment=()
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.
- Wejdź w Security → Bots.
- Włącz 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)
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.
Checklist po wdrożeniu
- DevTools → Network → Response 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ę.