nastavitve:cloudflare_wordpress_rest_api_n8n
Differences
This shows you the differences between two versions of the page.
| nastavitve:cloudflare_wordpress_rest_api_n8n [2026/01/19 05:48] – created sistemc | nastavitve:cloudflare_wordpress_rest_api_n8n [2026/01/19 05:54] (current) – sistemc | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | # Cloudflare + WordPress REST API + n8n | + | ====== |
| - | ## IP-based secure integration (BREZ Zero Trust) | + | |
| - | --- | + | ===== 🎯 Namen dokumenta ===== |
| - | ## Namen | + | Ta dokument opisuje: |
| - | Omogočiti varno uporabo WordPress REST API za n8n avtomatizacijo tako, da: | + | |
| - | - REST API ni javno dostopen | + | |
| - | - dostop imajo samo dovoljeni IP-ji | + | |
| - | - ni Cloudflare Access / Zero Trust aplikacij | + | |
| - | - ni Service Tokenov | + | |
| - | - ni JS / Managed Challenge blokad | + | |
| - | --- | + | * 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 | ||
| - | ## Končna arhitektura | + | ----- |
| - | n8n (statičen IP) | + | ===== Velja za ===== |
| - | → Cloudflare WAF (Custom Rules – IP allowlist) | + | |
| - | → WordPress REST API (/wp-json/) | + | |
| - | --- | + | * **WordPress** |
| + | * **n8n** | ||
| + | * **Cloudflare (Free plan zadostuje)** | ||
| + | * REST API integracije brez browserja | ||
| + | * machine-to-machine dostop | ||
| - | ## Predpogoji | + | ----- |
| - | - WordPress za Cloudflare | + | ===== 🧠 Povzetek problema |
| - | - n8n z znanim izhodnim IP | + | |
| - | - WordPress uporabnik z Application Password | + | |
| - | - Cloudflare plan z Custom Rules (Free je OK) | + | |
| - | --- | + | Če uporabljaš: |
| - | ## 1. WordPress | + | * Cloudflare |
| + | * WordPress | ||
| + | * n8n ali drugo avtomatizacijo | ||
| - | 1. WordPress Admin → Users | + | potem Cloudflare privzeto: |
| - | 2. Izberi uporabnika (npr. `automation_n8n`) | + | |
| - | 3. Na dnu ustvari **Application Password** | + | |
| - | 4. Shrani: | + | |
| - | - username | + | |
| - | - generated password | + | |
| - | Uporablja se **Basic Auth**. | + | |
| + | * 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. |
| - | ## 2. n8n – Preveri izhodni IP | + | Rešitev je: |
| - | HTTP Request node: | + | * IP allowlist |
| + | * Cloudflare Custom Rules (Allow + Block) | ||
| + | * WordPress Application Password | ||
| + | * Basic Auth | ||
| + | * brez Zero Trust | ||
| - | - Method: `GET` | + | ----- |
| - | - URL: `https:// | + | |
| - | Primer izhoda: | + | ===== Končna arhitektura ===== |
| - | ```json | + | |
| + | n8n (statičen IP) | ||
| + | -> Cloudflare WAF (Custom Rules) | ||
| + | -> WordPress REST API (/ | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== 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:// | ||
| + | Authentication: | ||
| + | </ | ||
| + | |||
| + | Rezultat: | ||
| + | |||
| + | < | ||
| { | { | ||
| " | " | ||
| } | } | ||
| + | </ | ||
| + | |||
| + | 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, | ||
| + | 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, | ||
| + | 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:// | ||
| + | </ | ||
| + | |||
| + | Pričakovano: | ||
| + | |||
| + | * JSON z WordPress podatki | ||
| + | |||
| + | Iz nedovoljenega IP-ja: | ||
| + | |||
| + | * Cloudflare block page | ||
| + | * " | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== 8️⃣ Testiranje v n8n ===== | ||
| + | |||
| + | HTTP Request node: | ||
| + | |||
| + | < | ||
| + | Method: GET | ||
| + | URL: https:// | ||
| + | Authentication: | ||
| + | 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č " | ||
| + | * 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: | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== 🧩 Opomba ===== | ||
| + | |||
| + | Če se IP n8n spremeni: | ||
| + | |||
| + | * posodobi Cloudflare Custom Rules | ||
| + | * ni potrebe po spremembi WordPress konfiguracije | ||
nastavitve/cloudflare_wordpress_rest_api_n8n.1768801706.txt.gz · Last modified: by sistemc
