IP filtresi, kimlik doğrulama, rate limit ve audit log tek bir kurulumda

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:

MekanizmaGeçemeyen client'a verilen cevap
IP filtresi403 Forbidden
Rate limitRetry-After header'ı ile 429 Too Many Requests
Kimlik doğrulama401 Unauthorized
Audit logConfig'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.

  1. Menüde Erişim Listeleri linkine, sonra Ekle butonuna tıklayın.
  2. Ad alanına Office yazın.
  3. İ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.
  4. Kimlik doğrulama bölümünde Basic Auth seçin.
  5. Realm alanına Staff yazın. Tarayıcı bu adı giriş kutusunda gösterir.
  6. Kullanıcı Ekle butonuna tıklayın, bir kullanıcı adı ve parola yazın.
  7. 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

  1. Proxy'yi açın ve Erişim Listesi alanını bulun.
  2. Office listesini seçin.
  3. 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.

  1. Proxy'yi açın ve Rate Limit bölümünü bulun.
  2. Request Sayısı alanına 60 yazın, Süre alanında dakika seçin.
  3. Burst alanına 10 yazın, böylece on dosyayı aynı anda yükleyen bir sayfa geçer.
  4. Kaydedin.
$ curl -i -u alice:<parola> https://app.example.com/
HTTP/2 429
retry-after: 14

Bir route kendi limitini tutabilir. Uygulamanızın giriş path'ine daha dar bir limit verin:

  1. Route'u açın ve Bu Route için Ayrı Rate Limit Kullan seçeneğini açın.
  2. Request Sayısı alanına 5 yazın ve dakika seç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öntemNe zaman kullanılır
Basic AuthBirkaç kişi tek bir parolayı paylaşır ve tarayıcı kutusu yeter.
Bearer TokenBir script veya CI job'ı bir API'yi çağırır. Token'ı openssl rand -hex 32 ile oluşturun.
Panel SessionUygulamanızın kendi girişi yoktur ve kişilerin zaten r3v3rs3 panel hesabı vardır.
Forward AuthKararı 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:

  1. Proxy'yi açın ve /healthz path'i ile bir route ekleyin.
  2. Bu Route için Ayrı Kimlik Doğrulama Kullan seçeneğini açın ve Yok seçin.
  3. 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.

Çö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.

  1. Menüde Audit Log linkine tıklayın. Sayfayı yalnız admin hesabı açar.
  2. 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

Sonraki adımlar