Karmaşık Güvenlik Duvarı (UFW), Docker kullanırken hiçbir şeyi engellemiyor

24

Bu ilk defa bir Ubuntu Sunucusu (14.04 LTS) kuruyor ve güvenlik duvarını (UFW) yapılandırmakta sorun yaşıyorum.

Yalnızca ssh ve http değerine ihtiyacım var, bu yüzden şunu yapıyorum:

sudo ufw disable

sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp

sudo ufw enable
sudo reboot

Ancak yine de bu makinenin diğer bağlantı noktalarındaki veritabanlarına bağlanabiliyorum . Neyi yanlış yaptığım hakkında bir fikrin var mı?

EDIT : Bu veritabanları Docker kapsayıcısında. Bu ilişkili olabilir mi? ufw yapılandırmamı geçersiz kılıyor mu?

EDIT2 : sudo ufw status verbose çıkışı

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
    
sordu ESala 25.07.2015 12:00

7 cevap

36

Sorun, kapsayıcılarda -p bayrağını kullanıyordu.

Docker'ın, iptables ile gösterilmeyen ufw status doğrudan değişiklik yaptığını görüyoruz.

Olası çözümler:

  1. -p bayrağını kullanmayı durdurun. Bunun yerine docker bağlantısını veya docker ağlarını kullanın.

  2. Konteynırları yerel olarak makinenizin dışına maruz kalmaması için bağlayın:

    docker run -p 127.0.0.1:8080:8080 ...

  3. -p bayrağını kullanmakta ısrar ederseniz, docker'a iptables 'lık devre dışı bırakarak ve yeniden başlatarak /etc/docker/daemon.json değerinize dokunmamasını söyleyin:

    { "iptables" : false }

Seçenek 1 veya 2'yi öneririm. Seçenek 3'ün yan etkilere sahip olduğundan emin olun , kapsayıcılar internete bağlanamayanlar gibi.

    
verilen cevap ESala 25.07.2015 12:50
8

16.04 yeni zorluklar sunuyor. Ufw güvenlik duvarının ardında Running Docker'ı göründüğü gibi tüm adımları yaptım. AMAÇ Docker artı UFW'yi alamadım 16.04 tarihinde çalışmak. Diğer bir deyişle, tüm docker limanları ne yaptığım önemli değil, internete küresel olarak maruz kaldı. Bulana kadar: Docker 1.12+ 'nin IPTABLES / FirewallD ile etkileşime girmemesi nasıl ayarlanır?

/etc/docker/daemon.json dosyasını oluşturmalı ve aşağıdakileri koymam gerekiyordu:

{
    "iptables": false
}

Daha sonra sudo service docker stop yayınladıktan sonra sudo service docker start değerini yayınladım FINALLY docker UFW'deki uygun kuralları takip ediyor.

Ek veriler: Docker UFW'yi geçersiz kılar!

    
verilen cevap Hal Jordan 06.12.2016 22:50
5

Eğer sistemd init sistemini kullanıyorsanız (Ubuntu 15.10 ve sonrası) /etc/docker/daemon.json dosyasını düzenleyin (eğer mevcut değilse oluşturmalısınız), iptables tuşunun yapılandırılmış olduğundan emin olun:

{   "iptables" : false }

DÜZENLEME : Bu, içerideki kapsayıcılardan internete olan bağlantınızı kaybetmenize neden olabilir

UFW'nin etkin olması durumunda, içerideki kapsayıcılardan internete erişebildiğinizi doğrulayın. değilse - DEFAULT_FORWARD_POLICY değerini ACCEPT olarak /etc/default/ufw olarak tanımlamanız ve burada açıklanan hileyi uygulamanız gerekir: İşte

    
verilen cevap orshachar 05.10.2016 14:11
4

/etc/docker/daemon.json ile içerik kullanımı

{
  "iptables": false
}

bir çözüm gibi görünebilir, ancak yalnızca bir sonraki yeniden başlatmaya kadar çalışır . Bundan sonra kaplarınızdan hiçbirinin İnternet'e erişimi olmadığını fark edebilirsiniz, böylece herhangi bir web sitesine ping yapamazsınız. İstenmeyen davranış olabilir.

Aynı kural, bir kabın belirli IP'ye bağlanması için de geçerlidir. Bunu yapmak istemeyebilirsin. Nihai seçenek, bir kapsayıcı oluşturmak ve ne olursa olsun UFW'nin arkasında olmaktır ve bu kapsayıcıyı nasıl oluşturursunuz, böylece bir çözüm var:

/etc/docker/daemon.json dosyasını oluşturduktan sonra şunları yapın:

sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
ufw reload

Dolayısıyla, kabul etmek için UFW’de varsayılan ileriye dönük politikayı ayarlayın ve kullanın:

iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

Eğer docker-compose kullanmak üzereyseniz, yukarıdaki IP adresindeki komutlar, docker-compose up ile çalıştırılırken ağ docker-compose'un oluşturduğu IP ile değiştirilmelidir.

Problemi ve çözümü daha kapsamlı olarak tanımladım bu makalede

Umarım yardımcı olur!

    
verilen cevap mkubaczyk 08.09.2017 21:47
1

Docker'ı çalıştırırken ve bağlantı noktası eşlemesini yaparken hızlı bir çözümdür. Her zaman yapabilirsin

docker run ...-p 127.0.0.1:<ext pot>:<internal port> ...
Docker'ınızın dışarıdan erişilmesini önlemek için

.     

verilen cevap kimy82 16.08.2017 16:01
0

Kapsayıcıyı başlattığınızda --network = host'u kullanın; bu nedenle, docker bağlantı noktasını varsayılan köprü ağı yerine yalıtılmış ana makine ağına eşler. Köprülü ağları engellemek için hiçbir yasal yol göremiyorum. Alternatif olarak, izolasyonlu özel kullanıcı tanımlı ağı kullanabilirsiniz.

    
verilen cevap thecoder 11.03.2017 22:10
0
  1. Docker konsolunuza giriş yapın:

      

    sudo docker exec -i -t docker_image_name / bin / bash

  2. Ve ardından docker konsolunuzun içinde:

    sudo apt-get update
    sudo apt-get install ufw
    sudo ufw allow 22
    
  3. Ufak kurallarınızı ekleyin ve ufw'yi etkinleştirin

      

    sudo ufw etkin

    • Docker resminizin --cap-add = NET_ADMIN
    • ile başlatılması gerekiyor.

"NET_ADMIN" Docker seçeneğini etkinleştirmek için:

1. Kapsayıcıyı Temizle:

docker senin kaptanı durdur; 2. Kapsayıcı kimliğini al:

docker senin kaptanı incelemek; 3. hostconfig.json'u değiştirin (varsayılan docker yolu: / var / lib / docker, sizinkini değiştirebilirsiniz)

vim /var/lib/docker/containers/containerid/hostconfig.json

4. "CapAdd" sözcüğünü arayın ve null ["NET_ADMIN"] olarak değiştirin;

...., "VolumesFrom": null, "CapAdd": [ "NET_ADMIN"], "CapDrop": null, .... 5. Ana makinede yeniden başlatıcıyı çalıştır;

hizmet docker'ı yeniden başlat; 6.Yenenizi doldurun;

docker senin kaptanı başlat;

    
verilen cevap Stefan 03.04.2018 15:03

Etiketlerdeki diğer soruları oku