Admin paneline yalnızca belirli IP'lerden erişilmesini nasıl sağlarım?
Kısa cevap
Yönetim yolunu (ör. Path, Regex ^/+admin(/.*)?$, Case Insensitive) ve izinli adresleri (Source IP → Manual) tanımlayan iki koşul oluşturulur; Block aksiyonunda yol koşulu ile izinli adres koşulunun olumsuz hâli (!ofis) and ile birleştirilir ve aksiyon vService'in Actions alanına eklenir. Böylece yönetim yoluna izinli adreslerden gelmeyen istekler 403 ile engellenir. Uzun adres listeleri için Dynamic List, markalı bir engel sayfası için Show Content kullanılabilir; TR7 bir CDN ya da proxy arkasındaysa önce Trusted Proxy tanımlanır.
Sorun: Yönetim Paneli Herkese Açık
Yönetim paneli internete açık olduğunda parola deneme ve tarama isteklerinin hedefi olur. Panele yalnızca ofis ya da VPN adreslerinden erişilmesi, diğer isteklerin Kurum Servisine ulaşmadan engellenmesi istenir.
Çözüm: Altı Yöntem
Yöntemlerin hepsi iki koşula dayanır: yönetim yolunu (ya da alan adını) tanıyan bir koşul ve izinli adresleri tanıyan bir koşul. Fark, izinsiz isteğe verilen yanıttadır. Source IP koşulu istemcinin gerçek adresini görmelidir; TR7'nin önünde bir CDN ya da ters proxy varsa önce TR7'nin önünde Cloudflare / Akamai gibi bir CDN var; gerçek istemci IP'sini nasıl alırım (Trusted Proxy)? uygulanır.
| Durumunuz | Uygun yöntem |
|---|---|
| Yol (ya da alan adı) bazlı kısıt, izinsize 403 | Yöntem 1: Block + Path + olumsuz Source IP |
| Uzun ya da sık değişen adres listesi | Yöntem 2: Dynamic list |
| Engellenen kullanıcıya markalı sayfa göstermek | Yöntem 3: Show content |
| Engellenen kullanıcıyı bilgi sayfasına göndermek | Yöntem 4: Location redirection |
| L7 TCP ile yayımlanan yönetim servisi (RDP, SSH) | Yöntem 5: TCP Connection Management |
| Komut satırından | Yöntem 6: WEB-CLI |
Yöntem 1: Block + Path + Olumsuz Source IP Önerilen
- Nasıl çalışır Yol koşulu sağlanıp istek izinli adreslerden gelmiyorsa istek Kurum Servisine gitmeden 403 ile engellenir.
- Nerede açılırLoad Balancer → Conditions · Load Balancer → Actions → Block
- Gereksinim Source IP gerçek istemci adresini görür (proxy arkasında Trusted proxy)
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır (nasıl eklenir).
Criteria = Path, eşleştirme Regex, değer ^/+admin(/.*)?$, Case Insensitive işaretli (admin paneli senaryosu). Kalıbın sonucu:
| Yol | Eşleşir mi? |
|---|---|
/admin, /admin/, /admin/login, /ADMIN/login, //admin/ | Evet |
/administrator, /adminx/, /static/admin/x | Hayır |
Panel ayrı bir alan adındaysa (ör. admin.example.com) yol yerine HTTP Header koşulu kullanılır: Header name = Request Host, Exact match, Case insensitive, değer admin.example.com. Panel kendi vService'indeyse yol koşulu gerekmez.
Add tıklanır.
Load Balancer → Conditions → Add tıklanır.
Criteria = Source IP, Source IP Type = Manual. Adresler ve CIDR blokları boşluk ya da satır sonuyla ayrılarak yazılır; açıklama yalnızca satırın başında # ile yazılır:
# Ofis
198.51.100.0/24
# VPN çıkışı
198.51.100.77Add tıklanır.
Load Balancer → Actions → Add tıklanır (nasıl eklenir).
Action Name girilir, Action Type = Block seçilir.
- Execution Level = On request (varsayılan).
- Deny Type = Standard (varsayılan); diğer seçenekler Tarpit ve Silent drop.
- Status Code = 403 (varsayılan); yolun varlığını gizlemek için 404.
- Conditions: aynı gruba yol koşulu (
admin-yolu) ve izinli adres koşulunun!önekli olumsuz hâli (!ofis) eklenir, aradaki işleç and bırakılır (Bir koşulu olumsuz ("şu değilse") olarak kullanabilir miyim?). - Hit Counter açılırsa engellenen istekler sayılır.
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Save tıklanır. Değişiklik açık bağlantılar kopmadan uygulanır; cluster'da varsayılan auto-sync ile eş cihaza da gönderilir (Manual Sync Mode açıksa Synchronize ile).
Doğrulama
Ofis ağı dışından curl -sI https://www.example.com/admin/ ve curl -sI --path-as-is https://www.example.com//ADMIN/
403 ForbiddenOfis ağından aynı istek gönderilir; HTTP Logs ekranında iki isteğin durum kodları karşılaştırılır.
Ofisten 200 · dışarıdan 403Yöntem 2: Dynamic List (IP/cidr match)
- Nasıl çalışır İzinli adresler uzun bir listede tutulur; listenin olumsuz hâli yol koşuluyla birleştirilir.
- Nerede açılırLoad Balancer → Conditions → Dynamic List
- Gereksinim Yöntem 1'deki yol koşulu
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add tıklanır.
Criteria = Dynamic List; Key to Search varsayılan istemci IP değişkeninde bırakılır; Search Method = IP/cidr match; List alanına izinli adresler ve bloklar yazılır.
Add tıklanır.
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Block seçilir; Yöntem 1'in 8. adımındaki gibi doldurulur, izinli adres koşulu yerine bu listenin ! önekli olumsuz hâli seçilir.
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
Listede olmayan ve listede olan bir adresten curl -sI https://www.example.com/admin/
Listede olmayan 403 · listedeki 200Yöntem 3: Show Content ile Engel Sayfası
- Nasıl çalışır Engellenen isteklere 403 koduyla markalı bir erişim engeli sayfası gösterilir.
- Nerede açılırLoad Balancer → Actions → Show Content
- Gereksinim Yöntem 1'deki iki koşul; engel sayfası Content Pages'te ya da yerleşik Access Denied Page
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Show content seçilir. Execution Level = On request; Content Page = Access Denied Page (Turkish) ya da özel bir sayfa (Content Pages profili nedir; kendi HTML sayfamı nasıl hazırlarım?); Status Code = 403 (varsayılan 200); Conditions Yöntem 1'deki gibi kurulur.
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
Ofis ağı dışından curl -i https://www.example.com/admin/
HTTP/1.1 403 + engel sayfasıYöntem 4: Location Redirection
- Nasıl çalışır Engellenen istekler bir bilgi sayfasına 302 ile yönlendirilir.
- Nerede açılırLoad Balancer → Actions → Location Redirection
- Gereksinim Yöntem 1'deki iki koşul; hedef adres yönetim yolunun dışında
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Location Redirection seçilir. Redirect Code = 302: Found (Moved Temporarily); Redirect Location = /erisim-bilgisi; Conditions Yöntem 1'deki gibi kurulur.
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
Ofis ağı dışından curl -sI https://www.example.com/admin/
302 + Location: /erisim-bilgisiYöntem 5: L7 TCP Servisleri: TCP Connection Management
- Nasıl çalışır RDP ya da SSH gibi L7 TCP vService ile yayımlanan yönetim servislerinde izinli adreslerden gelmeyen bağlantılar kapatılır.
- Nerede açılırLoad Balancer → Actions → TCP Connection Management
- Gereksinim Yöntem 1'deki izinli adres koşulu
- vService tipi L7 TCP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = TCP Connection Management seçilir. Execution level = On request (varsayılan); Action = Reject (varsayılan); Conditions alanında izinli adres koşulunun olumsuz hâli (!ofis) seçilir (TCP seviyesinde bağlantıyı reddetmek veya sessizce düşürmek mümkün mü (TCP Connection Management)?).
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında L7 TCP vService seçilip Edit tıklanır.
Details → Actions alanında aksiyon seçilir.
Save tıklanır.
Doğrulama
Ofis ağı dışından servise bağlanılır (ör. RDP istemcisi).
Bağlantı TR7 tarafından kapatılırYöntem 6: WEB-CLI
- Nasıl çalışır Yöntem 1'deki iki koşul, Block aksiyonu ve vService bağlantısı WEB-CLI komutlarıyla oluşturulur.
- Nerede açılır TR7 WEB-CLI →
lb condition·lb action·lb service - Gereksinim WEB-CLI erişimi; iki koşulun kimliği (ID)
- vService tipi HTTP
Adım adım yapılandırma
Kalıp | içermediği için komut satırında yazılabilir:
lb condition add criteria path query "^/+admin(/.*)?$" --content_placement regex --caseInsensitive true --name admin-yoluAdresler boşlukla ayrılır:
lb condition add criteria src_ip srcIpType manual src "198.51.100.0/24 198.51.100.77" --name ofisAksiyon koşulları adıyla değil kimliğiyle bağlar; lb condition add başarılı olduğunda çıktı vermez; kimlikler lb condition list çıktısının id sütununda görülür.
Koşul ifadesinde ! olumsuz hâli, and birleştirmeyi gösterir; ifade çift tırnak içinde yazılır. Deny type ve Status code yazılmazsa Standard ve 403 kullanılır:
lb action add type deny name admin-kilidi --cond "<yol-kimliği> and !<ofis-kimliği>"lb service show <vService>--rules.N o sıradaki aksiyonun yerine geçer; yeni aksiyon ilk boş sıraya yazılır.
vService'te iki aksiyon (0 ve 1) varsa yeni aksiyon 2. sıraya yazılır; hiç aksiyon yoksa --rules.0 kullanılır:
lb service update id <vService> --rules.2 admin-kilidiDoğrulama
Ofis ağı dışından curl -sI https://www.example.com/admin/
403 ForbiddenSık Yapılan Hatalar
İzinli adres listesi boşken olumsuz hâli herkesi engeller
Source IP → Manual listesi boş bırakılır ya da yalnızca # ile başlayan açıklama satırlarından oluşursa koşul hiçbir istemciyle eşleşmez; olumsuz hâli (!ofis) bu durumda herkes için sağlanır ve yönetim yolu ofisten de kapanır.
- TR7 CDN ya da proxy arkasındayken Trusted proxy tanımlamamak. Source IP koşulu proxy'nin adresini görür; ya herkes izinli ya da herkes engelli olur. Önce gerçek istemci IP'si çözülür (TR7'nin önünde Cloudflare / Akamai gibi bir CDN var; gerçek istemci IP'sini nasıl alırım (Trusted Proxy)?).
- Exact match kullanmak.
/admin/Exact match/admin/loginisteğini kaçırır; Regex ya da Start kullanılır. - Yolun farklı yazımlarını hesaba katmamak. Path koşulu yolu isteğin gönderildiği hâliyle değerlendirir;
/ADMIN/için Case insensitive,//admin/için kalıptaki^/+gerekir. Start/admin/koşulu bu iki yazımı yakalamaz. - Açıklamayı adresin yanına yazmak. Açıklama yalnızca satır başında
#ile yazılır;198.51.100.0/24 # ofisgibi satır içi açıklama, listedeki sonraki adreslerin dikkate alınmamasına yol açar. - Kuralı tek yönden denemek. Hem izinli hem izinsiz bir adresten deneme yapılır; ofisin internete çıkış adresi (NAT) listede olmalıdır.
Dokümantasyonda nasıl yapılır
İlgili sorular
- Bir koşulu olumsuz ("şu değilse") olarak kullanabilir miyim?
- TR7'nin önünde Cloudflare / Akamai gibi bir CDN var; gerçek istemci IP'sini nasıl alırım (Trusted Proxy)?
- Belirli isteklere backend'e gitmeden doğrudan içerik dönebilir miyim (Show Content)?
- TCP seviyesinde bağlantıyı reddetmek veya sessizce düşürmek mümkün mü (TCP Connection Management)?
