Bir uygulamayı korumaya alma
Bu rehber iç ağdaki bir uygulamayı r3v3rs3 arkasına alır ve yalnız erişmesi gerekenleri içeri alır. Dört mekanizmayı birlikte kullanır:
| Mekanizma | Geçemeyen client'a verilen cevap |
|---|---|
| IP filtresi | 403 Forbidden |
| Rate limit | Retry-After header'ı ile 429 Too Many Requests |
| Kimlik doğrulama | 401 Unauthorized |
| Audit log | Config'i kimin değiştirdiğini kaydeder |
r3v3rs3 bunları şu sırayla uygular: IP filtresi, rate limit, HTTPS yönlendirmesi, redirect kuralları, kimlik doğrulama. Engellenen bir adres parola kontrolüne hiç gelmez, limiti aşan bir client upstream sunucuya hiç ulaşmaz.
Önce Başlangıç rehberini izleyin. Bu rehber çalışan bir port ve çalışan bir uygulama ile devam eder.
Adım 1: Erişim listesi oluşturun
Erişim listesi bir IP filtresini ve bir kimlik doğrulamayı tek bir adın altında tutar. Birkaç proxy ve route aynı listeyi kullanır, tek bir değişiklik hepsine uygulanır.
- Menüde Erişim Listeleri linkine, sonra Ekle butonuna tıklayın.
- Ad alanına
Officeyazın. - İzin Verilen IP Adresleri alanına ofis network'ünüzü yazın, örneğin
203.0.113.0/24. Proxy'ye yalnız bu client'lar ulaşır. Bütün adreslere izin vermek için alanı boş bırakın. - Kimlik doğrulama bölümünde Basic Auth seçin.
- Realm alanına
Staffyazın. Tarayıcı bu adı giriş kutusunda gösterir. - Kullanıcı Ekle butonuna tıklayın, bir kullanıcı adı ve parola yazın.
- Kaydedin.
r3v3rs3 her parolayı argon2 hash olarak saklar. access_lists.toml dosyası listeyi 0600 moduyla tutar, admin API hash yerine password_set: true döndürür.
Proxy'ye ulaşmaması gereken tek bir adres için Engellenen IP Adresleri alanını kullanın. Engellenen bir adres, izin verilen adresin önüne geçer.
Adım 2: Listeyi proxy'ye bağlayın
- Proxy'yi açın ve Erişim Listesi alanını bulun.
Officelistesini seçin.- Kaydedin.
Liste, proxy'nin IP Filtresi ve Kimlik Doğrulama ayarlarının yerini alır. Bir proxy ikisini birden tutamaz, admin API bu durumda 400 access_list_conflict döndürür.
Sonucu kontrol edin:
$ curl -i https://app.example.com/
HTTP/2 401
www-authenticate: Basic realm="Staff", charset="UTF-8"
$ curl -i -u alice:<parola> https://app.example.com/
HTTP/2 200
İzin verilen adreslerin dışındaki bir client 403 Forbidden alır ve giriş kutusunu hiç görmez.
Adım 3: Rate limit ekleyin
Rate limit proxy üzerinde kalır, çünkü erişim listesi limit tutmaz.
- Proxy'yi açın ve Rate Limit bölümünü bulun.
- Request Sayısı alanına
60yazın, Süre alanındadakikaseçin. - Burst alanına
10yazın, böylece on dosyayı aynı anda yükleyen bir sayfa geçer. - Kaydedin.
$ curl -i -u alice:<parola> https://app.example.com/
HTTP/2 429
retry-after: 14
- r3v3rs3 her client IP adresini ayrı sayar.
- Limit parola kontrolünü de korur: argon2 bilerek CPU zamanı harcar, limit parola denemesini yavaşlatır.
- Sayaçlar bellekte durur. Restart onları sıfırlar. Cluster'da node'lar sayıları paylaşır, bkz. Rate limit doğruluğu.
Bir route kendi limitini tutabilir. Uygulamanızın giriş path'ine daha dar bir limit verin:
- Route'u açın ve Bu Route için Ayrı Rate Limit Kullan seçeneğini açın.
- Request Sayısı alanına
5yazın vedakikaseçin.
Adım 4: Kimlik doğrulama yöntemini seçin
Basic Auth başka bir servis istemez, ama tarayıcı kutusu gösterir ve çıkış yapma yolu yoktur. Diğer üç yöntem başka durumlara uyar:
| Yöntem | Ne zaman kullanılır |
|---|---|
| Basic Auth | Birkaç kişi tek bir parolayı paylaşır ve tarayıcı kutusu yeter. |
| Bearer Token | Bir script veya CI job'ı bir API'yi çağırır. Token'ı openssl rand -hex 32 ile oluşturun. |
| Panel Session | Uygulamanızın kendi girişi yoktur ve kişilerin zaten r3v3rs3 panel hesabı vardır. |
| Forward Auth | Kararı dış bir servis verir, örneğin bir identity provider ile oauth2-proxy veya Authelia. |
Panel Session, route path'inin altındaki /.r3v3rs3/auth/login adresinde bir giriş sayfası sunar. Yalnız proxy'yi gören bir hesabı kabul eder ve TOTP'si olan bir hesaptan TOTP kodunu ister. Uygulamanıza bir çıkış butonu ekleyin:
<form method="post" action="/.r3v3rs3/auth/logout"><button>Çıkış Yap</button></form>
Her yöntemi alanlarıyla ve cevaplarıyla Kimlik doğrulama bölümü anlatır.
Adım 5: Bir path'i herkese açın
Bir health check veya bir webhook credential istemez. Ona kendi route'unu verin:
- Proxy'yi açın ve
/healthzpath'i ile bir route ekleyin. - Bu Route için Ayrı Kimlik Doğrulama Kullan seçeneğini açın ve Yok seçin.
- Bu Route için Ayrı IP Filtresi Kullan seçeneğini açın ve iki listeyi de boş bırakın. Route böylece bütün client'lara açılır.
Route'ların sırası önemli değildir. r3v3rs3 her request'i path'i en uzun eşleşen route'a gönderir, bu yüzden o path'te /healthz route'u / route'unun önüne geçer.
Adım 6: Gerçek client IP'sini alın
CDN veya load balancer arkasında TCP peer'ı edge sunucudur. Doğru ayar olmadan IP filtresi ve rate limit bütün ziyaretçiler için tek bir adres görür.
- r3v3rs3 sekiz bilinen CDN'in IP range'lerine varsayılan olarak güvenir, aralarında Cloudflare, Fastly ve Amazon CloudFront vardır. Provider header'ını okur, örneğin
CF-Connecting-IP. - Kendi load balancer'ınız için adresini proxy'nin Güvenilen Proxy'ler alanına yazın.
- Güvenilmeyen bir peer için r3v3rs3
X-Forwarded-For,X-Real-IPve diğer client IP header'larını siler, çünkü client onları uydurabilir.
Çözümlenen adresi uygulamanızın access log'unda görün. r3v3rs3 adresi X-Real-IP header'ında gönderir. Header sırasını Client IP bölümü anlatır.
Adım 7: Audit log'u okuyun
Audit log, bir hesabın yaptığı her config değişikliğini ve panele her girişini kaydeder. Ziyaretçilerinizin request'lerini kaydetmez.
- Menüde Audit Log linkine tıklayın. Sayfayı yalnız admin hesabı açar.
- Hesaba, kaynağa veya döneme göre filtreleyin.
$ curl -b session.txt 'http://127.0.0.1:46492/api/audit?limit=5'
[{"time":1789643174264,"username":"admin","client":"127.0.0.1","action":"update_access_list","resource_id":"tkx-xqy","summary":"Office"}]
Her kayıt zamanı, hesabı, client IP adresini, action'ı, kaynağın id'sini ve kısa bir özeti tutar. Özet hiçbir zaman parola, token veya key tutmaz. Audit Log Saklama Süresi ayarı bir kaydı varsayılan olarak bir yıl tutar.
Bunlar neyi kapsamaz
- Parola kontrolü proxy'yi korur, uygulamayı değil. Uygulamaya başka bir porttan ulaşan bir client r3v3rs3'ü atlar. Uygulamayı
127.0.0.1adresine veya iç network'e bağlayın. - r3v3rs3
Authorizationheader'ını upstream sunucuya göndermeden önce siler, yani uygulama proxy credential'larını görmez. - Rate limit request sayar, byte saymaz. Yükleme limiti için Request Body Limiti alanını kullanın. Limiti aşan bir request, kimlik doğrulamadan önce
413 Payload Too Largealır.
Sonraki adımlar
- Erişim listeleri: liste modeli ve hataları.
- IP filtresi ve Rate limit: bütün alanlar.
- Hesaplar: roller, proxy listeleri ve TOTP hesapları.