Docker kapsayıcısının ağ erişimini kısıtlama


14

Yalnızca SFTP Docker kapsayıcısı oluşturma sürecindeyim, yalnızca kendi chrooteditör Ortamında dosya yüklemek ve yönetmek için birden fazla kişi tarafından kullanılacak .

Kağıt üzerinde oldukça güvenli: Her bashgiriş formunu devre dışı bırakacağım ve içinde başka bir işlem yapmayacağım. Ancak biraz daha sertleştirmek istiyorum:

SFTP sunucusu olma amacı dışında, bu kapsayıcıya Internet'ten erişmesini engellemek istiyorum.

Her şeyi netleştirmek için: Dış dünyanın konteynere erişmesini nasıl önleyeceğimi biliyorum - Gelen iptableskuralları ayarlayabilirim ve docker çalıştırma komutumda yalnızca SFTP bağlantı noktasını açığa çıkarabilirim.

Ancak ben konteyner içinde koştu zaman aşağıdaki örnek (örnek olarak) başarısız yapmak istiyorum :

curl google.com

Amacım saldırıya uğramış bir konteynerin yapabileceği hasar miktarını azaltmaktır (spam e-posta göndermek için kullanılamamak vb.).


Bu tür şeyler için yardımcı olabilecek birkaç bekleyen özellik isteği var. # 6743 kapsayıcı başlamadan önce ana bilgisayarda iptables kuralları oluşturmanıza izin verir ve # 6982 kapsayıcı başlatıldığında iptables kuralları eklemenize izin verir.
Patrick

Docker size bir kabın ağ arayüzleri üzerinde tam kontrol sağlar; bkz . Docker bir kapsayıcıyı nasıl ağlar . Örneğin, --net=nonebayrağın ayarlanması docker runtüm harici ağ bağdaştırıcılarını devre dışı bırakarak kendi trafik kurallarınızı eklemenizi ve özelleştirmenizi sağlar.
sffc

Yanıtlar:


4

Saldırıları önlemeye yardımcı olmak için docker örneğinizin içine bazı giriş kuralları koymak yine de mantıklıdır, ancak docker görüntüsünün bağlandığı yukarı akış yönlendiricisinden giden (İnternet) erişimi sınırlamanız gerekecektir. Bunun nedeni, örneğin içindeki güvenlik duvarı kuralları ile giden erişimi engellemeye çalışırsanız, örneğin güvenliği ihlal edilirse, bu kurallar saldırgan tarafından kaldırılabilir. Örneğin yönlendiricisi üzerinden çıkışı engelleyerek, bir uzlaşma durumunda bile giden erişimi engellersiniz - saldırganın da yönlendiriciyi tehlikeye atması gerekir.


Tamam, bu yüzden filtrelemenin kabın sahibi için tasarlandığını açıklayan bazı yorumlar aldıktan sonra, neyin gerçekleştirilmeye çalışıldığı biraz daha net. Bu durumda, ana bilgisayarda, buna benzer bazı kurallar eklersiniz:

iptables -A FORWARD -s lo.cal.sub.net -d con.tai.ner.ip -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -d lo.cal.sub.net -j ACCEPT
iptables -A FORWARD -s ! lo.cal.sub.net -d con.tai.ner.ip -p tcp --dport sftp -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -d ! lo.cal.sub.net -p tcp --sport sftp -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -m state --state related,established -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -j DROP

İlk iki kural, ana bilgisayar ile kapsayıcı arasındaki erişim içindir. Üçüncü kural (kabaca), ana bilgisayarın SFTP'ye yönelen alt ağı olmayan her şeyin bizim tarafımızdan iyi olduğunu söylüyor; dördüncüsü, temelde üçüncüye ikiz olan giden kuraldır; beşinci kural bir tümünü yakalama yöntemidir (kullanılan diğer ilgili bağlantı noktaları varsa), gerekli olmamasına rağmen, muhtemelen kaldırabilirsiniz; son kural, ana bilgisayar alt ağından başka bir şeye erişimi engelleyen sihirdir. İlk birkaç kuralda erişim verildiğinden, önceki kurallardan hiçbiri geçerli olmadığı sürece hiçbir zaman tetiklenmez, bu durumda "ne istediğinizi umursamıyoruz, onayladığınız hiçbir şeyle eşleşmediniz, buradan gidemezsiniz ". Dışarıdan gelen trafik 3. ve 4. kurallar tarafından karşılanacaktır.


Kapsayıcı içeriğine mutlak bir güven duymadan bunu konteyner içinde gerçekleştirmenin bir yolu olmadığı göz önüne alındığında ilginç bir aşağı oy .
Avery Payne

Docker kapsayıcısının yukarı akış yönlendiricisi (varsayılan en çok desteklenen yapılandırmayı varsayarak) üzerinde çalıştığı ana bilgisayardır ve diğer docker işlevlerini bozmadan tek bir kabın o ana bilgisayardaki (kapsayıcı içinde değil) İnternet erişimini devre dışı bırakmanın bir yolunu arıyoruz. .
Tarnay Kálmán

(iç çeker) 6 saat uyurken gerçekten cevaplarımı yeniden yazmamalıyım. Verilen cevabı değiştirdim.
Avery Payne

Docker (varsayılan en çok desteklenen yapılandırmayı varsayarak), ana bilgisayar üzerindeki kapsayıcı bağlantı noktalarını kullanıcı alanı tcp proxy'si aracılığıyla yayınlar, bu nedenle yönlendirme zincirinin sftp hizmetiyle ilgili kurallar için bile ilgili olup olmadığından emin değilim.
Tarnay Kálmán

Sanırım bir test ortamı kurmam ve Docker'ı çıkarmam ve nelerin dahil olduğunu görmem gerekecek. Kuralların öne doğru girdiye taşınmasını önerdiğiniz anlaşılıyor.
Avery Payne

1

Bu gerçekten docker'a özgü bir sorun değil. Bunu çözmenin birkaç yolu vardır.

  1. iptablesGelen bağlantılara ve ilgili / yerleşik trafiğe izin vermek için durum kurallarını kullanın, ardından her şeyi engelleyin.

  2. Bir kabuk çalıştıramayan ProFTPD gibi yalnızca bir sftp hizmeti kullanın .

Genel olarak, kullanıcılarınızın bir kabuk almasına ve kapsayıcıdan program çalıştırmasına izin vermiyorsanız, bunun için endişelenmenize gerek yoktur.


1.) Docker, varsayılan olarak kendi başına bazı kurallar belirler ve bunlara eklemek, halihazırda bir yakalama-allish kuralı olduğu için hiçbir şey yapmaz ve dikkatli olmazsa, önceki işlevsellik (bağlantılar gibi) bozulur, o kadar da önemsiz değil. 2.) Soruya cevap vermez. OP zaten böyle ayarladı. Ayrıca, kullanım durumum farklı.
Tarnay Kálmán

0

Bu sadece hızlı bir beyin fırtınası ve henüz test etmedim. Üretime almadan önce laboratuarda veterinerlik yapmak isteyeceksiniz.

SSH dışı (SFTP) ve Web bağlantı noktalarında giden trafiği önlemek için, Hedef dışında, docker kapsayıcıları tarafından kullanılan segmentten kullanılan segmentten kaynaklı DROP veya REJECT trafiğine IPTABLES veya başka bir Katman4 güvenlik duvarı üzerinden ilke uygulamak isteyebilirsiniz. Bağlantı noktası TCP22'dir.

Web üzerinde onaylanmayacak yerlere gitme sorununu çözmek için, docker0 arabirimini dinleyen ve kullanan kalamar veya mavi kaplama gibi bir filtreleme / önbellek proxy örneği kurmayı deneyebilirsiniz. ev sahibinin internete çıkmak için defalt yolu. Oradan, birçok kriteri temel alan politika uygulayabilir ve statik içeriği önbelleğe alarak ağ kullanımını kaydedebilirsiniz. Sen (Benim tepki olarak bu tarif için şeffaf proxy kullanımını zorlamak için ana makinede NAT (Sanırım IPTABLES ve Masquerade Linux bu sağlamak) kullanmak isteyebilirsiniz Ben yalnızca HTTP ama emin değilim ne vekil istiyoruz HTTPS trafiği ile yapın ). Bunun, öncelikle şirketinizin politikalarına uygun olarak web'e girmek için bir nedeni vardır.

SSH'nin doğası gereği (SFTP'nin dayandığı), kapların yalnızca sizin sağladığınız anahtar çiftlerini kullanabileceği bir politika uygulamadığınız sürece dosya taşıma için trafiğin kesişmesini sağlayamazsınız. Bu sizin için iyidir, çünkü size " Aktarılan dosyalar üzerinde görünürlük veya kontrolüm yoktu"müşterilerinizden biri yasa dışı bir şey aktarıyorsa (IP ihlali gibi veya bir sınıflandırma etiketi taşıyan bilgileri genişletmek için hizmetinizi kullanıyorsa veya CP'de ticaret yapıyorsa), müşterilerinizin yaptığı bir şey için mahkemeye çıkarıldığınızda savunma ( Sık aktarılan, değiştirilmemiş dosyaları önbelleğe alamadığınız ve müşterilerinizle sözleşmeye yazdığınız herhangi bir politikanın teknik yollarla uygulanamayacağı için bu sizin için kötüdür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.