Docker'da WebSocket bağlantı noktalarını güvence altına almak, WebSocket iletişiminin gizliliğini, bütünlüğünü ve kullanılabilirliğini korumak için ağ güvenliği, şifreleme, kimlik doğrulama, yetkilendirme ve konteyner yapılandırmasını kapsayan birkaç en iyi uygulama katmanını içerir. Aşağıda, Docker'daki WebSocket bağlantı noktalarını güvence altına almak için en iyi uygulamaların ayrıntılı bir açıklaması verilmiştir:
Güvenli WebSocket Protokolü (WSS) kullanın
Her zaman TLS (taşıma katmanı güvenliği) üzerinde çalışan güvenli WebSocket protokolünü (WSS: //) kullanın. Bu, istemci ve sunucu arasında iletilen verileri şifreler, dinleme ve ortadaki insan (MITM) saldırılarını önler. Şifreleme, WebSocket bağlantıları üzerinden gönderilen mesajların gizliliğini ve bütünlüğünü sağlar. Web siteleri için HTTPS gibi, WSS ayrıca katı taşıma güvenliği ve karışık içerik engelleme gibi tarayıcı tabanlı güvenlik özelliklerinin kullanılmasına, genel iletişim güvenliğini artırmaya da izin verir. Şifrelenmemiş WS: // Protokolü kullanmaktan kaçının, tamamen şifrelemenin gerekli olmadığı güvenilir bir ortamda çalışmadığınız sürece.
Kimlik Doğrulama ve Yetkilendirme
WebSocket bağlantıları, HTTP gibi oturum tabanlı kimlik doğrulama mekanizmalarını yerel olarak desteklemediğinden, kendi kimlik doğrulama sisteminizi uygulamak önemlidir. Yaygın yaklaşımlar, ilk HTTP yükseltme el sıkışma sırasında JWT (JSON Web jetonları) veya çerezleri kullanan jeton tabanlı kimlik doğrulamasını içerir. Kimlik doğrulama, yalnızca yetkili müşterilerin bağlantılar kurmasını sağlamak için WebSocket el sıkışma aşamasına bağlanmalıdır.
Yetkilendirme, bağlantı kuruluş aşamasında sadece bir kez değil, hareket başına veya eylem başına uygulanmalıdır. Bu, açık bir WebSocket'e eriştikten sonra yetkisiz kullanıcılar için yüksek ayrıcalıkları önler.
Çalıntı veya tekrarlanan jetonlara karşı güvenliği artırmak için, kısa ömürlü, kapsamlı jetonlar kullanmayı veya özellikle WebSocket bağlantıları için bir kerelik jetonlar kullanmayı düşünün. Bu jetonların sona ermesi ve tehlikeye girmesi durumunda riski azaltır.
Ağ İzolasyonu ve Docker Networking En İyi Uygulamalar
Konteyner bağlantı noktalarını doğrudan genel ağa maruz bırakmaktan kaçının. Bunun yerine, diğer hizmetlerden izole etmek ve harici erişimi kısıtlamak için WebSocket hizmetlerini özel Docker Köprüsü ağlarına barındıran kapları yerleştirin.
Farklı konteyner grupları için ayrı Docker Network köprüleri oluşturun. Örneğin, bir köprü ağı, ana bilgisayardan WebSocket hizmet kapsayıcısına gelen trafiği yönlendirebilir ve WebSocket kapsayıcısı ile veritabanları gibi diğer arka uç hizmetleri arasında güvenli iletişim için farklı bir özel dahili ağ kullanılabilir.
Docker'ın varsayılan `Docker0 'ağ köprüsünü kullanmaktan kaçının, çünkü tüm kapları varsayılan olarak bağlar ve potansiyel olarak Docker ana bilgisayarındaki istenmeyen yanal harekete izin verir.
Konteyner düzenleme için Docker Swarm veya Kubernetes kullanırken şifreleme etkin (`` --opt şifreli `) kaplama ağlarını kullanın. Bu tür ağlar, küme içindeki WebSocket iletişimleri de dahil olmak üzere düğümler arası trafiği şifreler, verileri ağ katmanındaki müdahaleden korur.
Proxy ve yük dengeleme
WebSocket bağlantı noktalarını doğrudan internete maruz bırakmayın. WebSocket trafiğini yönlendirmek için Nginx, Traefik veya Haproxy gibi ters bir proxy kullanın. Proxy, aşağıdakiler dahil olmak üzere birçok fayda sağlar:
- Merkezi TLS sonlandırması, böylece WebSocket örnekleriniz TLS sertifikalarını doğrudan yönetmek zorunda değildir.
- Bağlantıları arka uç WebSocket hizmetlerine iletmeden önce kimlik doğrulama kontrolleri.
- Yük dengeleme veya yönlendirme kurallarına dayalı trafik yönlendirme.
- Basitleştirilmiş güvenlik duvarı yapılandırması Yalnızca proxy portları harici olarak maruz kaldığından.
- Güvenlik başlıkları ve politikaları üzerinde daha iyi kontrol.
Proxying, limanların doğrudan maruz kalması, saldırı yüzeyini artırmanın yanı sıra ağ ve güvenlik duvarı kurallarını karmaşıklaştırabileceğinden de riskleri azaltır.
Giriş Doğrulama ve Sanitasyon
WebSocket bağlantıları el sıkışmasından sonra keyfi mesajlara izin verdiğinden, gelen tüm verileri titizlikle doğrulamak ve sterilize etmek önemlidir. Gelen tüm müşteri verilerine güvenilmeyen olarak değerlendirin. Yükün beklenen normlara uygun olduğundan emin olmak ve enjeksiyon saldırılarını önlemek için JSON gibi yapılandırılmış veri formatları için şema doğrulama gerçekleştirin.
Sunucu tarafı doğrulama, enjeksiyona, hatalı biçimlendirilmiş verilere ve iş mantığı hatalarından yararlanma girişimlerine karşı korur. Benzer şekilde, istemci tarafı doğrulama, sunucudan alınan verilerin işlenmesi güvenli olmasını ve manipüle edilmiş veya bozuk verilerden korunmasını sağlar.
Hız sınırlama ve kısma
WebSocket bağlantılarında ve WebSocket hizmetinin kötüye kullanılması veya kötüye kullanımına karşı savunmak için WebSocket bağlantılarında ve mesajlarda oran sınırlaması uygulayın. Limit the number of connections per IP address and control message send rates to prevent flooding that may consume excessive resources or degrade service quality.
Güvenli Konteyner Yapılandırması
- Kök ayrıcalıklarına sahip kapları çalıştırmayın. Kapların kök dışı kullanıcılar kullanarak çalıştığı en az ayrı bir prensip kullanın.
- WebSocket kaplarının içine Docker Daemon soketini (`/var/run/docker.sock`) monte etmekten kaçının, çünkü bu tehlikeli olan ana bilgisayara etkili bir şekilde kök erişim sağlar.
- Konteyner özelliklerini yalnızca WebSocket hizmeti için gerekli olanla sınırlayın.
- Saldırı yüzeyini azaltmak için resmi, minimal ve düzenli olarak güncellenen Docker taban görüntülerini kullanın.
Sır Yönetimi
Konteyner görüntüleri veya kaynak kodundaki API tuşları, jetonlar veya sertifikalar gibi sert kodlama sırlarından kaçının. Çalışma zamanında kimlik bilgilerini güvenli bir şekilde enjekte etmek için Docker sırlarını, ortam değişkenlerini veya güvenli tonoz çözümlerini kullanın. Sırları düzenli olarak döndürün.
Günlük ve İzleme
El sıkışma denemeleri, kimlik doğrulama başarısı/başarısızlığı, mesaj hataları ve olağandışı etkinlik dahil olmak üzere WebSocket bağlantıları için ayrıntılı günlüğü etkinleştirin. İzleme günlükleri, denenen saldırıların belirlenmesine veya erken kötüye kullanmaya yardımcı olur.
Şüpheli aktivite, başarısız kimlik doğrulama girişimleri veya bir saldırıyı işaret edebilecek trafikte sivri uçlar için merkezi günlüğü ve gerçek zamanlı uyarıyı uygulayın.
Düzenli güncellemeler ve güvenlik testi
Bilinen güvenlik açıklarını yamalamak için Docker motoru, konteyner görüntüleri, Websocket kütüphaneleri ve ters proxy'ler dahil olmak üzere tüm bileşenleri güncel tutun.
Otomatik güvenlik açığı tarayıcıları (örneğin, güveç, geğirme süiti) ve manuel penetrasyon testi gibi araçlar kullanarak WebSocket uç noktalarına özgü düzenli güvenlik testi yapın. Anormal veya sömürülebilir sunucu davranışını tespit etmek için Fuzz testi mesajları önerilir.
Çapraz Origin ve Origin Kontrolü
Bağlantıların güvenilir alanlardan kaynaklanmasını sağlamak için WebSocket el sıkışma sırasında katı orijin başlık kontrollerini uygulayın. Bu, kötü amaçlı web sitelerinin açık WebSocket bağlantılarını kötüye kullanmaya çalıştığı saha arası WebSocket Hacking'e (CSWSH) karşı savunmaya yardımcı olur.
Oturum Yönetimi
Güvenli oturum yönetimi uygulayın. Oturum kaçırma riskini en aza indirmek için WebSocket kimlik doğrulama jetonları için jeton sona erme ve yenileme mekanizmaları kullanın. Oturum açma işleminde veya bir hareketsizlik döneminden sonra jetonları geçersiz kılın.
Portların gereksiz maruziyetinden kaçının
Sadece konteyner ana bilgisayarlarında gerekli minimum bağlantı noktalarını açığa çıkarın. Güvenli bir proxy'nin arkasında Docker'ın `` -p` seçeneğini kullanarak doğrudan WebSocket bağlantı noktalarını yayınlamaktan kaçının.
WebSocket hizmetlerinin yalnızca dahili olarak iletişim kurması için Docker dahili veya özel ağları kullanarak bağlantı noktasına maruz kalmayı sınırlayın.
Özet
Docker'da WebSocket bağlantı noktalarını güvence altına almak çok katmanlı bir yaklaşım gerektirir:
- Şifreli iletişim için WSS (TLS üzerinden WebSocket) kullanın.
- WebSocket el sıkışma sırasında kullanıcıları jeton tabanlı yöntemlerle doğrulayın.
- Kimlik doğrulamasından sonra her bir işlem veya mesaja izin verin.
- Şifreleme etkinken Docker Network Isolation ve Custom Bridge veya Overlay ağlarını kullanın.
- Portları doğrudan maruz bırakmak yerine güvenli bir ters proxy aracılığıyla trafiği proxy.
- Enjeksiyon saldırılarını önlemek için tüm girdileri doğrulayın ve sterilize edin.
- DOS saldırılarını azaltmak için oranı sınırlama uygulayın.
- Minimum ayrıcalıklar ve sır yönetimi dahil olmak üzere Docker Container Güvenliği en iyi uygulamalarını takip edin.
- Şüpheli davranışlar için websocket etkinliğini izleyin ve kaydedin.
- Bileşenleri düzenli olarak güncelleyin ve güvenlik testi yapın.
- Kaçırmayı önlemek için menşe kontrollerini zorlayın.
- Oturum jetonlarını son kullanma ve yenilenme ile güvenli bir şekilde yönetin.