Sunucuya erişimi kısıtlayın ve uygulamanızın önüne bir WAF koyun
İlk dağıtımdan itibaren
erpc worker, SSH'ye yalnızca sizin adresinizden izin verir ve gelen diğer tüm bağlantıları düşürür. Bir [waf] tablosu, API'nizin önüne filtreleyen bir proxy koyar.Bu sayfada bir ön sürüm olan ERPC CLI
v0.1.0-rc.4 anlatılır.Güvenlik duvarı
Bir dağıtım, uygulama ilk kez başlamadan önce sunucunun güvenlik duvarını ayarlar:
- SSH yalnızca
firewall.ssh_allowadreslerinden ve dağıtımın geldiği adresten; - gelen diğer tüm bağlantılar düşürülür,
firewall.app_allowadreslerindenrun.portbağlantı noktasına gelenler hariç; WAF'ın arkasındaki bir uygulamada bunun yerine WAF'ın bağlantı noktası, ve bu da yalnızca sunucudaki WAF,[waf]tablosunun şimdi oluşturduğu kuralları zaten çalıştırıyorsa (aşağıda).
Her değişiklik 120 saniyelik bir geri alma zamanlayıcısı altında çalışır ve yalnızca yeni bir bağlantı içeri girebildiğinde kalıcı olur; böylece hatalı bir değişiklik sizi dışarıda bırakamaz.
Ancak allowlist, oluşturulduğu adresten daha uzun yaşar: ev adresiniz değişirse, içeri geri dönmenin yolu bir ERPC sunucusu için ERPC desteği, kendi sunucunuz için ise sağlayıcının konsoludur. Bir ev adresine güvenmeden önce, sunucuya erişebileceğiniz ikinci bir adresi (bir ofis, bir VPN çıkışı)
firewall.ssh_allow içinde tutun.Adresiniz değişirse, yöneticilerinizin kullandığı tüm sabit adresleri ekleyin:
bash
Uygulamanızın önüne bir WAF koyun
erpc.toml dosyasına tek bir tablo ekleyin:toml
Ardından
erpc worker deploy, sunucuda kendine ait bir systemd biriminde (erpc-waf-<app>-<env>) bir HTTP ters proxy çalıştırır: proxy, anahtarı, gizli değeri ve worker'a ait hiçbir şeyi olmayan, 1 GiB bellekle sınırlandırılmış, ayrıcalıksız bir dinamik kullanıcı olarak çalışır. waf.port üzerinde dinler, her isteği uygulamadan önce okur, kurallarında adı geçeni reddeder ve geri kalanını 127.0.0.1:<run.port> üzerindeki uygulamaya iletir.-
Uygulama loopback üzerinde kalır. Kendi bağlantı noktası dışarıdan asla açılmaz.
erpc worker apive sağlık kontrolü, WAF'ı atlayarak uygulamaya loopback üzerinden ulaşır. -
Kimin bağlanabileceğini yine güvenlik duvarının listesi belirler; WAF'ın bağlantı noktası, bu listenin herkese izin verebileceği tek yerdir:shListede kimse yoksa WAF dinler ama kimse içeri alınmaz ve dağıtım bunu söyler.
-
Bağlantı noktası, WAF onu dinlemeye başladığında açılır, asla daha önce değil. WAF'ı ayağa kalkmayan bir dağıtım başarısız olur ve nedenini söyler; uygulama ise çalışmaya devam eder.
-
[waf]tablosunu değiştirdiğinizde, bir dağıtım yeni kuralları yerine koyana kadar bağlantı noktası yeni hiç kimseye açılmaz. -
[waf]tablosunuerpc.tomldosyasından çıkarıp dağıtım yapmak, WAF'ı sunucudan kaldırır.
WAF ayarları
Yalnızca
port zorunludur. Tüm anahtarlar, varsayılan değerleriyle:toml
rate, max_connections_per_address, ban ve new_connections, false ile kapatılır (ban = false); dışarıda bırakılan bir anahtar varsayılan değerini alır. erpc worker check, herhangi bir dağıtımdan önce [waf] tablosunun ne yapacağını ve nesinin yanlış olduğunu söyler.WAF'ın ayar gerektirmeden yaptıkları
- Belirsizlik içermeyen tek bir HTTP/1 isteği olarak okunamayan bir istek 400 alır; normal biçimde olmayan bir yol da öyle.
- Protokol değiştirme isteği (
Upgrade) 501 alır. - Her reddetme yasaklama sayacına eklenir ve her reddetme kendi bağlantısını sonlandırır.
- Adres derken bir IPv4 adresi ya da bir IPv6
/64kastedilir. - WAF, istemcinin proxy'ye olan bağlantısına ait başlıkları (
Connectionve onun adını verdiği başlıklar,Keep-Alive,Proxy-Authenticate,Proxy-Authorization,Proxy-Connection,TE,Trailer),Expectbaşlığını, adında alt çizgi bulunan başlıkları ve istemcinin kendiForwarded,X-Real-IPveX-Forwarded-Protobaşlıklarını iletmez.X-Real-IPbaşlığını bağlantının geldiği adrese ayarlar ve bu adresiX-Forwarded-Forbaşlığının sonuna ekler;X-Forwarded-Forbaşlığının yalnızca son girdisi proxy'nin kendi beyanıdır.
WAF'ın ne yaptığını görme
İletilen bir istek log satırı bırakmaz ve hiçbir başlık ya da gövde asla loglanmaz; engellenen bir isteğin sorgusu ise 200 baytın yettiği kadarıyla loglanır. Bir istemcinin gönderdiği şey terminalinize yazamaz: WAF, journal'ını yazdırılabilir ASCII olarak yazar.
WAF'ın yapmadıkları
- TLS yok. Kendi bağlantı noktasında düz HTTP/1.1 konuşur.
- HTTP/2 yok: ona 400 ile yanıt verir.
- WebSocket yok, başka herhangi bir
Upgradeda yok: 501. - Gövdelerin içine bakmaz. Bir gövde ölçülür, asla okunmaz. Tarama isteği listesi kısadır ve bir gürültü filtresidir, bir güvence değildir: uygulama girdisini yine de kendisi denetler.
- Kimlik doğrulama yok. Uygulamayı kimin çağırabileceğine uygulamanın kendisi ve güvenlik duvarının listesi karar verir.
- Bir adres bir istemcidir. Tek bir NAT, proxy veya CDN arkasındaki istemciler aynı hız sınırını ve aynı yasaklamayı paylaşır; çok sayıda adresi olan bir istemcinin de adresi kadar hız sınırı olur.
- Yasaklamalar ve sayımlar WAF yeniden başladığında unutulur.
- En fazla 8192 adresi hatırlar ve aynı anda en fazla 1024 bağlantı tutar.
- Yalnızca IPv4 üzerinde dinler, bu yüzden
app_allowiçindeki bir IPv6 girdisi henüz hiçbir yere ulaşmaz. - Bir yol, çözüldüğü baytlar olarak karşılaştırılır. Yolları daha gevşek okuyan bir uygulamaya (büyük/küçük harfi yok sayan,
;parametrelerini kabul eden, iki kez çözen)deny_pathskapsamının dışında kalan bir adla ulaşılabilir.allow_pathstarafında böyle bir açık yoktur: listelenmeyen iletilmez. - Yavaş okuyan bir istemciye sonuna kadar hizmet verilir. Bir yanıtı ne kadar yavaş olursa olsun almaya devam eden bir istemciye sonuna kadar hizmet verilir.
- Bir istek seli büyük bir yüklemeyi kesebilir. WAF tek bir iş parçacığında çalışır, bu yüzden bir sel büyük bir yüklemeyi 408 ile kesebilir. Büyük gövdeler alan bir uygulama
body_timeout_secsdeğerinimax_body_bytesile birlikte yükseltir.
Worker kılavuzu,
app_allow üzerindeki bir değişikliğin ne zaman bir sonraki dağıtıma kadar bekletildiği de dahil olmak üzere her kuralı içerir.





