C’est la première fois que je configure un serveur Ubuntu (14.04 LTS) et j’ai des problèmes pour configurer le pare-feu (UFW).
J'ai seulement besoin ssh
et http
, alors je fais ceci:
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
Mais je peux toujours me connecter à des bases de données sur d'autres ports de cette machine . Une idée de ce que je fais mal?
EDIT : ces bases de données sont sur des conteneurs Docker. Cela pourrait-il être lié? est-ce que cela remplace ma configuration ufw?
EDIT2 : sortie desudo ufw status verbose
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)
ufw status
8083
et8086
. J'ai ajouté leufw status verbose
résultat dans la question. Merci.Réponses:
Le problème consistait à utiliser le
-p
drapeau sur les conteneurs.Il se trouve que Docker apporte des modifications directement sur votre ordinateur
iptables
, qui ne sont pas affichées avecufw status
.Les solutions possibles sont:
Arrêtez d'utiliser le
-p
drapeau. Utilisez plutôt une liaison ou des réseaux avec un menu fixe .Liez les conteneurs localement afin qu'ils ne soient pas exposés en dehors de votre machine:
docker run -p 127.0.0.1:8080:8080 ...
Si vous insistez pour utiliser le
-p
drapeau, dites à docker de ne pas le toucheriptables
en le désactivant/etc/docker/daemon.json
et en le redémarrant:{ "iptables" : false }
Je recommande les options 1 ou 2. Attention, l'option 3 a des effets secondaires , comme l'impossibilité pour les conteneurs de se connecter à Internet.
la source
-p
autant que possible. Par exemple, dans le cas d'un proxy inverse, je ne mappe aucun port pour les conteneurs de travail, puis mets nginx dans son propre conteneur avec-p 80:80
et--link
vers les autres. De cette façon, il ne peut y avoir d’affrontements de ports et le seul point d’accès est nginx./etc/default/docker
est un fichier de configuration utilisé par la configuration upstart. Si vous êtes passé de upstart à systemd, ce fichier ne sera pas utilisé.16.04 présente de nouveaux défis. J'ai exécuté toutes les étapes comme indiqué. Running Docker derrière le pare-feu ufw MAIS je ne pouvais PAS faire en sorte que docker plus UFW fonctionne le 16.04. En d'autres termes, peu importe ce que j'ai fait, tous les ports de docker sont devenus globalement exposés à Internet. Jusqu'à ce que j'ai trouvé ceci: Comment configurer Docker 1.12+ pour qu'il n'interfère pas avec IPTABLES / FirewallD
Je devais créer le fichier
/etc/docker/daemon.json
et mettre ce qui suit dans:Je me suis alors émis
sudo service docker stop
alorssudo service docker start
ENFIN docker est tout simplement en suivant les règles appropriées dans UFW.Données supplémentaires: Docker annule UFW!
la source
Si vous utilisez le système init de systemd (Ubuntu 15.10 et versions ultérieures) et modifiez-le
/etc/docker/daemon.json
(vous devrez peut-être le créer s'il n'existe pas), assurez-vous qu'il a laiptables
clé configurée:EDIT : cela pourrait vous faire perdre la connexion à Internet à partir de conteneurs internes
Si vous avez activé UFW, vérifiez que vous pouvez accéder à Internet à partir de conteneurs. sinon - vous devez définir
DEFAULT_FORWARD_POLICY
commeACCEPT
sur/etc/default/ufw
et appliquer l'astuce décrite ici: https://stackoverflow.com/a/17498195/507564la source
Une solution rapide consiste à exécuter Docker et à mapper les ports. Tu peux toujours faire
pour empêcher l'accès à votre Docker de l'extérieur.
la source
Utilisation du
/etc/docker/daemon.json
contenuCela peut sembler être une solution, mais cela ne fonctionne que jusqu'au prochain redémarrage . Après cela, vous remarquerez peut-être qu'aucun de vos conteneurs n'a accès à Internet. Vous ne pouvez par exemple pas envoyer de requête ping à un site Web. Ce peut être un comportement indésirable.
La même chose s'applique à la liaison d'un conteneur à une adresse IP spécifique. Vous ne pouvez pas vouloir faire ça. L'option ultime consiste à créer un conteneur et à le placer derrière UFW, peu importe ce qui se passe et comment vous créez ce conteneur. Il existe donc une solution:
Après avoir créé le
/etc/docker/daemon.json
fichier, appelez:vous devez donc configurer la politique de transfert par défaut dans UFW pour accepter et utiliser:
Si vous êtes sur le point d'utiliser Docker-Compose, la commande IP de ci-dessus doit être remplacée par l'IP du réseau créé par Docker-Compose lors de son exécution
docker-compose up
.J'ai décrit le problème et la solution de manière plus complète dans cet article
J'espère que ça aide!
la source
Dans mon cas, j'ai fini par modifier iptables pour permettre l'accès à Docker uniquement à partir d'adresses IP spécifiques.
Selon la réponse de ESala :
Exemple d'enregistrements ajoutés à iptables par Docker
Routage vers la chaîne 'DOCKER':
Envoi de paquets de la chaîne 'DOCKER' au conteneur:
Vous pouvez modifier iptables pour autoriser l'accès à la chaîne DOCKER uniquement à partir de l'adresse IP source spécifiée (par exemple
1.1.1.1
):Vous voudrez peut-être utiliser
iptables-save > /tmp/iptables.conf
etiptables-restore < /tmp/iptables.conf
vider, éditer et restaurer les règles iptables.la source
Utilisez --network = host lorsque vous démarrez un conteneur afin que docker mappe le port sur un réseau uniquement hôte isolé au lieu du réseau de pont par défaut. Je ne vois aucun moyen légal de bloquer un réseau ponté. Vous pouvez également utiliser un réseau personnalisé défini par l'utilisateur avec isolation.
la source
Connectez-vous à votre console de docker:
Et ensuite dans votre console de docker:
Ajoutez vos règles ufw et activez ufw
Pour activer l'option "NET_ADMIN" de Docker:
1.Stop Container:
docker arrêter votre conteneur; Identifiant du conteneur 2.Get:
docker inspecter votre conteneur; 3. Modifiez hostconfig.json (chemin d'accès au menu fixe par défaut: / var / lib / docker, vous pouvez modifier le vôtre).
4.Recherchez "CapAdd" et modifiez null en ["NET_ADMIN"];
...., "VolumesFrom": null, "CapAdd": ["NET_ADMIN"], "CapDrop": null, .... 5.Redémarrez le menu fixe dans la machine hôte;
redémarrage du docker de service; 6.Démarrez yourconatiner;
docker démarrer votre conteneur;
la source
J'avais l'habitude
docker-compose
de démarrer plusieurs conteneurs et le problème était qu'un port était exposé au monde ignorant les règles ufw.Le correctif pour rendre le port disponible uniquement à mes conteneurs Docker était ce changement dans mon
docker-compose.yml
fichier:pour ça:
Maintenant, les autres conteneurs Docker peuvent toujours utiliser le port, mais je ne peux pas y accéder de l'extérieur.
la source