====== Cloudflare + WordPress REST API + n8n integracija ======
===== 🎯 Namen dokumenta =====
Ta dokument opisuje:
* kako varno omogočiti **WordPress REST API** za n8n
* kako **blokirati javni REST API dostop**
* kako uporabiti **Cloudflare WAF + IP allowlist**
* kako se izogniti **Cloudflare Access / Zero Trust**
* preverjeno delujočo konfiguracijo iz produkcije
-----
===== Velja za =====
* **WordPress**
* **n8n**
* **Cloudflare (Free plan zadostuje)**
* REST API integracije brez browserja
* machine-to-machine dostop
-----
===== 🧠 Povzetek problema (TL;DR) =====
Če uporabljaš:
* Cloudflare
* WordPress REST API
* n8n ali drugo avtomatizacijo
potem Cloudflare privzeto:
* blokira REST API z **JS Challenge**
* sproža **Bot Fight Mode**
* vrača **403 Forbidden**
* zahteva **Access token**, ki za REST API NI primeren
⚠️ **REST API ni browser** in ne zna reševati Cloudflare izzivov.
Rešitev je:
* IP allowlist
* Cloudflare Custom Rules (Allow + Block)
* WordPress Application Password
* Basic Auth
* brez Zero Trust
-----
===== Končna arhitektura =====
n8n (statičen IP)
-> Cloudflare WAF (Custom Rules)
-> WordPress REST API (/wp-json/)
-----
===== 1️⃣ WordPress – Application Password =====
V WordPress Admin panelu:
- Users
- izberi uporabnika (npr. automation_n8n)
- Application Passwords
- Create new password
Shrani:
* WordPress username
* Application Password
Opomba:
* uporablja se **Basic Auth**
* ne JWT
* ne OAuth
-----
===== 2️⃣ n8n – preveri izhodni IP =====
V n8n ustvari HTTP Request node:
Method: GET
URL: https://api.ipify.org?format=json
Authentication: None
Rezultat:
{
"ip": "49.12.184.65"
}
Ta IP bo uporabljen v Cloudflare pravilih.
-----
===== 3️⃣ Cloudflare – Global Security Level =====
Cloudflare Dashboard:
* Security
* Settings
Nastavi:
Security Level = Low
Razlog:
* Medium / High sprožata JS Challenge
* REST API tega ne zna obdelati
-----
===== 4️⃣ Cloudflare – Custom Rule (ALLOW + SKIP) =====
Cloudflare:
* Security
* Security rules
* Custom rules
* Create rule
Ime pravila:
Allow WordPress REST API
Expression:
starts_with(http.request.uri.path, "/wp-json/")
and (ip.src eq 49.12.184.65 or ip.src eq 86.61.31.249)
Action:
Skip
WAF components to skip:
* All managed rules
* All rate limiting rules
* Super Bot Fight Mode rules
Rule order:
First
To pravilo:
* dovoli REST API
* izključi vse Cloudflare zaščite za dovoljene IP-je
-----
===== 5️⃣ Cloudflare – Custom Rule (BLOCK public REST) =====
Ustvari drugo pravilo.
Ime:
Block public WordPress REST
Expression:
starts_with(http.request.uri.path, "/wp-json/")
and not (ip.src eq 49.12.184.65 or ip.src eq 86.61.31.249)
Action:
Block
Rule order:
* After: Allow WordPress REST API
To pravilo:
* blokira javni REST API
* prepreči brute-force in scan napade
-----
===== 6️⃣ Cloudflare – Zero Trust / Access =====
Cloudflare:
* Zero Trust
* Access
* Applications
Stanje:
NO APPLICATIONS
Ne uporabljamo:
* Access Applications
* Service Tokens
* Access Policies
* Identity Providers
Razlog:
* REST API = machine-to-machine
* IP allowlist + Basic Auth je stabilnejši
-----
===== 7️⃣ Testiranje v browserju =====
Iz dovoljenega IP-ja:
https://example.com/wp-json/
Pričakovano:
* JSON z WordPress podatki
Iz nedovoljenega IP-ja:
* Cloudflare block page
* "Sorry, you have been blocked"
-----
===== 8️⃣ Testiranje v n8n =====
HTTP Request node:
Method: GET
URL: https://example.com/wp-json/wp/v2/users/me
Authentication: Basic Auth
Username: WP user
Password: Application Password
Pričakovano:
* HTTP 200
* JSON odgovor
* brez Cloudflare challenge
-----
===== 🔐 Varnostna politika =====
^ Element ^ Status ^
| REST API javno dostopen | ❌ |
| IP allowlist | ✅ |
| Basic Auth | ✅ |
| WAF bypass samo za n8n | ✅ |
| Cloudflare Zero Trust | ❌ |
-----
===== ⚠️ Pogoste napake =====
* Security Level = High
* uporaba Cloudflare Access za REST API
* manjkajoč "Skip"
* napačen vrstni red pravil
* JS / Managed Challenge na /wp-json/
* testiranje iz napačnega IP-ja
-----
===== ✅ Status =====
* Produkcijsko preverjeno: **DA**
* Stabilno: **DA**
* Primerno za wiki dokumentacijo: **DA**
-----
===== 🧩 Opomba =====
Če se IP n8n spremeni:
* posodobi Cloudflare Custom Rules
* ni potrebe po spremembi WordPress konfiguracije