[TUTO] NginxProxyManager + docker network + docker + Portainer pour l'exemple
- Modifié
On peut également bloquer toutes les connexions entrantes sauf les ports 80/443
en contournant Docker qu'y s'immisce dans iptables
https://github.com/chaifeng/ufw-docker
/etc/ufw/after.rules
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP
COMMIT
# END UFW AND DOCKER
Cela permet au réseau public d'accéder à tous les ports publiés dont le port conteneur est 80 :
ufw route allow proto tcp from any to any port 80
- Modifié
Bonjour et merci beaucoup pour se tuto très clair, je me pose tout de même une question peut être con mais j'essaie ^^. Vu que le port des containers et supprimer comment fait npm pour savoir sur quel port écouter pour diffuser le container ensuite ? Et nous même comment fait on pour savoir quel port noté dans npm ? Cette technique fonctionne avec n'importe quel container ? Je pense notamment à adguard home qui et plutôt chiant avec les port demandé.
Merci encore, Cordialement
Tu reportes dans NPM le port utilisé normalement par l'application, exemple 9000 pour Portainer :
Pour résumer le tuto :
Tu créée normalement le conteneur de l'application et tu testes via ip:port (ex : 127.0.0.1:9000 pour Portainer)
Tu configures le proxy via NPM (voir capture écran)
Tu recréé le conteneur de l'application en retirant le port et en ajoutant le network (npm-proxy dans l'exemple)
NB : les étapes liées au network sont facultatives lors de l'utilisation de docker-compose, car celui créé un network compose_default
Merci pour l'explication sa paraît logique maintenant ^^
Bonjour,
Je reviens avec une nouvelle question ^^. Comme dit plus haut je me posais des questions pour ce tuto sur adguardhome et pas manqué je sèche. J'ai donc mon container adguardhome sur mon dédié et chez moi mon routeur sous openwrt qui me demande donc comme dns une adresse IP avec ou sans port mais du coup si je ferme mes port + adresse IP cela ne fonctionne plus. Quelqu'un à eu le problème ? Ou pour cette exception il faut laisser les ports ouverts ?
Cordialement
Si tu accédais via IP:port, tu configures ce port dans NPM et tu accèdera à Adguard via adguard.ndd.tld par exemple
(ce sous-domaine doit être préalablement configuré au niveau de la zone DNS)
spider1163 Merci beaucoup pour l'aide. Oui c'est se que j'avais en tête mais pour l'instant mes essais ne sont pas très concluant. Je regarderai plus en détail ce weekend. Merci encore
- Modifié
Bonjour
est ce normal que l'image dedie rutorrent de https://github.com/mondediefr/docker-rutorrent
avec NPM ne fonctionne pas avec un reseaux , je sui obliger de mettre l'ip et le port entie
merci
Pourtant ça marche bien ici sur un rpi4 et une autre machine.
Tu le lance de quelle manière ? cli ou compose ?
- Modifié
je le lance comme cela MattProd
docker run -dt --network npm-proxy --name=rutorrent --restart always -v /home/diesel/docker/rutorrent:/config -v /home/diesel/mnt/torrent:/data/downloads -v /home/diesel/mnt/sourcetorrents/PreSeries:/data/.watch -v /home/diesel/docker/rutorrentseries/session:/data/.session mondedie/rutorrent:latest
dns cloudfare en dns only mai erreur 502
edit : probleme resolu je le lancer en port 8081 au lieu de 8080
- Modifié
Bonjour voulant mettre a jour l'image mondedie/rutorrent je n'arrive plus a acceder a celle ci avec npm
je lance :
docker run -dt --network npm-proxy --name=rutorrent \
-p 45000:45000 -p 8081:8081 --restart always \
-v /home/diesel/docker/rutorrent:/config \
-v /home/diesel/mnt/torrent:/data/downloads \
-v /home/diesel/mnt/sourcetorrents/PreSeries:/data/.watch \
-v /home/diesel/docker/rutorrentseries/session:/data/.session \
mondedie/rutorrent:latest
dans mon npm j'ai :
si je le lance via 8080:8080 il ne se lance pas car crowdsec utilise déjà ce port
et quand je vais sur le seedbox.tld.com de NPM j'ai une erreur 502
obligé de l'ip en entier mettre pour accéder j'avais eu le même soucis mai je ne sais plus comment on la résolu
Hello @Diesel
Alors :
1) si tu met rutorrent derrière NPM tu peux éviter de publier le port de la WebUI, seulement le 45000/tcp.
2) si tu met 8081:8081 on ira nulle part dans le container c'est 8080 donc au pire tu fais un -p8081:8080.
3) si tu lances ton container avec pour nom rutorrent alors dans NPM tu dois appeler http://rutorrent:8080
Donc pour rappel, à moins de vouloir y'a accéder par IPORT si on met un container dans le network NPM / Traefik / Zoraxy etc on a pas besoin de publier le port pour l'accès à la webui. Seulement les ports qui ont besoin de communiquer depuis l'extérieur.
Par exemple : rutorrent on a besoin d'un port 45000/tcp, wireguard 51820/udp etc
Matt
- Modifié
docker run -dt --network npm-proxy --name=seedbox -p 45000:45000 -p 8080:8081 --restart always -v /home/diesel/docker/rutorrent:/config -v /home/diesel/mnt/torrent:/data/downloads -v /home/diesel/mnt/sourcetorrents/PreSeries:/data/.watch -v /home/diesel/docker/rutorrentseries/session:/data/.session mondedie/rutorrent:latest
4af2f6915e3fd762b18fa117a99a0f665ad3c2ab69de27b79a623b3b2a75919b
docker: Error response from daemon: driver failed programming external connectivity on endpoint seedbox (c1385e2f6370410d612598f91db3bffd8f668637fd44797a0e8c1bdb5b5194e4): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use.
vue que crowdsec tourne aussi sur le serveur dedie en 8080....
Diesel
-p8080:8081 -> -p exterieur:intérieur -> donc oui ca va être bloquant... Cependant comme indiqué dans mon message précedant : -p8081:8080 devrait fonctionner.
Je le redis aussi : pas besoin d'exposer le port de la webui si le container est dans le network de NPM:
docker run -dt --name=seedbox \
-p 45000:45000 \
-v /home/diesel/docker/rutorrent:/config \
-v /home/diesel/mnt/torrent:/data/downloads \
-v /home/diesel/mnt/sourcetorrents/PreSeries:/data/.watch \
-v /home/diesel/docker/rutorrentseries/session:/data/.session \
--restart always \
--network npm-proxy \
mondedie/rutorrent:latest
devrait être fonctionnel...
Matt