Sind zwei nginx proxy auf derselben Maschine/IP möglich?



  • Hallo, ich habe kurz eine Frage. In docker compose läuft bereits ein nginx reverse proxy und verschiedenen Services, der die certs usw. verwaltet.

    Nun soll noch ein anderer docker compose mailserver hinzukommen, der die Ports 25, 465, 587 und 993 verwenden soll (der reverse proxy verwendete nur 80, 81 und 443, wobei nur 80 und 443 von außen erreichbar sind). Laut netstat sind diese auch schon geöffnet. Der mailserver bringt einen eigenen nginx mit.

    Das Problem ist gerade, dass "Sumbmission" bereits funktioniert (der Mailempfang), aber IMAP4 bzw. dovecot (mit "mail.domainnamecom") funktioniert nur mit einem Mail-Client auf dem Host, aber nicht von außerhalb.

    Liegt das an mir oder ist das Vorhaben schlicht nicht möglich?



  • Ich vermute, es liegt am Thunderbird... (Client)

    Im Nachfolgenden die Konfiguration. Was müsste ich im Thunderbird einstellen, damit ssl imap funktioniert?

    services:
      mailserver:
        image: ghcr.io/docker-mailserver/docker-mailserver:latest
        container_name: mailserver
        # Provide the FQDN of your mail server here (Your DNS MX record should point to this value)
        hostname: mail.mydomain.de
        ports:
          - 25:25
          - 465:465
          - 587:587
          - 993:993
        volumes:
          - ./dms/mail-data/:/var/mail/
          - ./dms/mail-state/:/var/mail-state/
          - ./dms/mail-logs/:/var/log/mail/
          - ./dms/config/:/tmp/docker-mailserver/
          - ./letsencrypt/:/etc/letsencrypt/
          - /etc/localtime:/etc/localtime:ro
        environment:
          - ENABLE_RSPAMD=1
          - ENABLE_CLAMAV=1
          - ENABLE_FAIL2BAN=1
          - SSL_TYPE=letsencrypt
          - POSTFIX_INET_PROTOCOLS=ipv4
          - DOVECOT_INET_PROTOCOLS=ipv4
        cap_add:
          - NET_ADMIN # For Fail2Ban to work
        restart: no
    
    
    $ sudo netstat -tlpn
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      123/docker-proxy 
    tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      123/docker-proxy 
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      123/docker-proxy 
    tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      123/docker-proxy 
    #...
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      123/docker-proxy 
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      123/docker-proxy 
    #...
    


  • Mit Thunderbird geht es nicht, mit RainLoop hingegen schon. Verstehe ich nicht. https://support.mozilla.org/en-US/kb/thunderbird-78-faq#w_how-to-enable-outdated-security-protocols-tls-1-0-and-1-1 hab ich auch ausprobiert, hat aber nix gebracht.



    1. https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
    2. https://superuser.com/questions/620745/thunderbird-ssl-tls-vs-starttls

    Ich habe die zwei Seiten gelesen, aber bin jetzt immer noch nicht schlauer, warum es mit Thunderbird nicht funktioniert.

    Jedenfalls soll implicit TLS wohl am besten sein. 🤷

    Jeder Vorschlag ist hier gerne willkommen.



  • Ich hab die Ursache gefunden ... Das Cert war falsch! Habe mit einem SSL Checker nachgeschaut.

    Und zwar waren in den SANs: nicht beide Domains (mail.mydomain.de UND mydomain.de) eingetragen, sondern nur eine, und das mögen manchen Clients nicht!

    Windows Mail hat mich darauf hingewiesen, aber Thunderbird verweigert dann einfach den Dienst.

    Habe nun beide Domains drin, und zumindest mit einem anderen E-Mail-Client keine Probleme.

    Und zur eigentlichen Frage ... : Ja, zwei Proxys sind möglich auf demselben Host, solange sich beide nicht die gleichen Ports teilen.



  • das ist doch genau das szenario worauf ich dich in dem anderen docker thread schon drauf aufmerksam gemacht habe.....

    wenn du nen container-aware reverse proxy brauchst, nimm traefik, der kann auto-discover. ansonsten benutze einen reverse proxy auf dem host und route deine container mit server blocks.

    du musst auch irgendwann mal lernen das gelesene zu verstehen, sonst drehst dich im kreis.



  • @Cardiac jetzt habe ich schon nginx gelernt, dann müsste ich auch noch traefik lernen 😕



  • @Fragender sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @Cardiac jetzt habe ich schon nginx gelernt, dann müsste ich auch noch traefik lernen 😕

    Du liest wohl echt immer nur die hälfte oder? Cardiac hat nicht nur traefik vorgeschlagen...
    Sondern dass du auf dem Host einen reverse Proxy laufen lässt der dann die anfragen an die container weiterleitet



  • @firefly sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @Fragender sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @Cardiac jetzt habe ich schon nginx gelernt, dann müsste ich auch noch traefik lernen 😕

    Du liest wohl echt immer nur die hälfte oder? Cardiac hat nicht nur traefik vorgeschlagen...
    Sondern dass du auf dem Host einen reverse Proxy laufen lässt der dann die anfragen an die container weiterleitet

    Problem ist halt, dass traefik "von Haus aus" Optionen dafür anbietet, aber nginx nich.



  • ????
    nginx, der wohl etablierteste proxy ist nicht dafuer konzipiert verschiedene upstreams zu proxy'n....
    ja ne, is klar



  • @Fragender sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @firefly sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @Fragender sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @Cardiac jetzt habe ich schon nginx gelernt, dann müsste ich auch noch traefik lernen 😕

    Du liest wohl echt immer nur die hälfte oder? Cardiac hat nicht nur traefik vorgeschlagen...
    Sondern dass du auf dem Host einen reverse Proxy laufen lässt der dann die anfragen an die container weiterleitet

    Problem ist halt, dass traefik "von Haus aus" Optionen dafür anbietet, aber nginx nich.

    Wenn du dich auf "container-aware" bzw. "autodiscover" beziehst dann ja, aber brauchst du das wirklich?
    Und wenn ja, dann musst du halt in den sauren apfel beißen und dich mit traefik auseinander setzen.
    Ich denke dein Problem ist, dass du von dem ganzen system zu wenig Ahnung hast aber scheinbar nicht willig bist dich mit den Informationen, welche dir andere liefern, komplett auseinander zu setzen.

    Soweit ich das verstehe, und cardiac schon gesagt hat, brauchst du auch keine mehrere reverse proxy, da reicht genau einer.
    Der kann entweder auf dem container Host laufen oder auch selbst in einem container.
    Wenn der reverse proxy in einem container läuft, dann werden nur seine Ports aus dem container exportiert. Die ports der dienste in den anderen container werden nicht exportiert.
    Sondern der reverse proxy kommuniziert mit den diensten über das interne container netzwerk.

    Mit nginx kannst du das genau so machen. Nur musst du da dann jedes mal "von hand" die konfiguration anpassen, wenn ein neuer dienst über den Proxy erreichbar sein soll.
    Bei traefik würde das "automatisch" passieren aufgrund der autodiscover funktion (laut dieser Beschreibung https://doc.traefik.io/traefik/getting-started/quick-start/)



  • @Cardiac sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    nginx, der wohl etablierteste proxy ist nicht dafuer konzipiert verschiedene upstreams zu proxy'n

    Ich habe geschrieben "keine Optionen dafür anbietet", und dabei bleibe ich auch.



  • @Fragender sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    @Cardiac sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    nginx, der wohl etablierteste proxy ist nicht dafuer konzipiert verschiedene upstreams zu proxy'n

    Ich habe geschrieben "keine Optionen dafür anbietet", und dabei bleibe ich auch.

    Öhm für was denn genau??? Bis jetzt lese ich von dir nur irgendwelche schwammigen Behauptungen, dass nginx was nicht könnte, ohne das du es genauer beschreibst



  • dann bleib du mal dabei, ist mir zu doof.



  • ne, ihr versteht mich beide falsch. Ich verwende doch den Nginx Proxy Manager, und dessen Oberfläche bietet keine Option dafür an. Ich müsste dafür also eigene Konfigurationsdateien anlegen: https://nginxproxymanager.com/advanced-config/#custom-nginx-configurations und würde damit das Prinzip des Managers quasi umgehen ...

    Wenn traefik das "von Haus aus" kann, ohne manuell in die interne Konfiguration einzugreifen, sollte man immer das nehmen, was es schon gibt ... also nicht gegen DRY, KISS und SOLID verstoßen.



  • @Fragender sagte in Sind zwei nginx proxy auf derselben Maschine/IP möglich?:

    ne, ihr versteht mich beide falsch. Ich verwende doch den Nginx Proxy Manager, und dessen Oberfläche bietet keine Option dafür an. Ich müsste dafür also eigene Konfigurationsdateien anlegen: https://nginxproxymanager.com/advanced-config/#custom-nginx-configurations und würde damit das Prinzip des Managers quasi umgehen ...

    Öhm das ist ein third party tool das nicht von den nginx entwickler betreut wird.
    Alle deine Aussagen klangen so als ob du dich auf nginx direkt beziehst....
    nginx selbst kann das leisten was du benötigst es ist nicht die schuld von nginx wenn das third party tool kein möglichkeit bietet eine passende nginx config anzulegen.



  • ja eben, es ist doch unsauber, manuell in die Konfigs einzugreifen... Wenn traefik das kann, dann nehm' ich es.

    Aber andererseits, don't change a running system. 😁



  • Ich hab umgestellt auf traefik.

    Könntest du einmal schauen, ob das so richtig wäre? Ist nur ein Beispiel.

    version: '3'
    
    services:
      reverse-proxy:
        image: "traefik:v2.10"
        container_name: "traefik"
        command:
          #- "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
          #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
          - "--certificatesresolvers.myresolver.acme.email=email@mail.com"
          - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
        ports:
          #- "80:80"
          - "443:443"
          - "8080:8080"
        volumes:
          - "./letsencrypt:/letsencrypt"
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
      website:
        image: httpd:2.4
        volumes:
          - ./website1/:/usr/local/apache2/htdocs/
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.website.rule=Host(`website.domain.com`)"
          - "traefik.http.services.website.loadbalancer.server.port=80"
          - "traefik.http.routers.website.entrypoints=websecure"
          - "traefik.http.routers.website.tls.certresolver=myresolver"
          - "traefik.http.routers.website.middlewares=website-auth"
          - "traefik.http.middlewares.mychain.chain.middlewares=myratelimit,myauth"
          - "traefik.http.middlewares.myratelimit.ratelimit.average=6"
          - "traefik.http.middlewares.myratelimit.ratelimit.period=1m"
          - "traefik.http.middlewares.myratelimit.ratelimit.burst=1"
          - "traefik.http.middlewares.myauth.basicauth.users=user1:..."
    

    Orientiert hatte ich mich hier dran: https://dev.to/karvounis/advanced-traefik-configuration-tutorial-tls-dashboard-ping-metrics-authentication-and-more-4doh

    Nach mehr als 6 Versuchen auf basicauth sollte abgebrochen werden.

    Kann ich die Bezeichnungen myauth.basicauth und myratelimit und mychain auch für mehrere Services verwenden, oder braucht jeder Service ein eigenes label?

    Danke schon mal.



  • Haha, es hat funktioniert ...

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.whoami.rule=Host(`whoami.my.domain`)"
          - "traefik.http.services.whoami.loadbalancer.server.port=80"
          - "traefik.http.routers.whoami.entrypoints=websecure"
          - "traefik.http.routers.whoami.tls.certresolver=myresolver"
          - "traefik.http.routers.whoami.middlewares=mychain"
          - "traefik.http.middlewares.mychain.chain.middlewares=myratelimit,myauth"
          - "traefik.http.middlewares.myratelimit.ratelimit.average=6"
          - "traefik.http.middlewares.myratelimit.ratelimit.period=1m"
          - "traefik.http.middlewares.myratelimit.ratelimit.burst=50"
          - "traefik.http.middlewares.myauth.basicauth.users=user1:$...,user2:$..."
    
    

    Nun kann ich mychain auch mit anderen Services verwenden ...


Anmelden zum Antworten