Dritte Anfängerfrage: Namensgebung von jails, apache mit vhosts, a-records und cname

mr44er

moderater Moderator
Teammitglied
Soweit ich mich jetzt in der vergangenen Woche eingelesen habe, mag ich mal in die Runde fragen, ob ich das richtig verstanden habe...erbitte quasi um Bestätigung und dann hat sich doch noch die ein oder andere Frage ergeben, die ich nicht ergooglen konnte. Man korrigiere mich bitte bitte, sobald ich Grütze schreibe. ;)
https wird natürlich noch gemacht, mir gehts erstmal um die Basics.

Ich habe mir zum ersten Mal eine reine de-domain bei netcup gegönnt (war ein unglaublicher Angebots-Schnapp). Der Einfachheit halber schreibe ich sie hier als 'meinedomain.de'. Weiterhin habe ich mir zwecks besserem Merkens angewöhnt (bei ipfire abgeguckt), die öffentliche IP als rot zu bezeichnen und das interne netz mitsamt IPs als grün zu betiteln. Der Vollständigkeit halber habe ich in der Vergangenheit eine DMZ als orange angesehen und das nicht ohne Firmware-Hack änderbare Netz meines (reinen) Modems als gelb. Find ich gerade in der pf.conf sehr hilfreich, die interfaces und netze so zu benennen.

Ich fange beim a-record an. Host: * | Type: A | Destination: meine rote/öffentliche IP -> Verstehe ich erstmal so, dass irgendeine in den Browser getippte subdomain (abc.meinedomain.de, 005.meinedomain oder jb007.meinedomain.de, ganz egal) 'angenommen' wird und zu meiner roten IP weitergeleitet wird. Nun vorausgesetzt der Browser ist nicht aus dem letzten Jahrhundert und pf ist entsprechend port 80 auf den apache/die apachejail konfiguriert und im apache ist ein entsprechender vhost (abc.meinedomain.de, 005.meinedomain oder jb007.meinedomain.de) definiert, wird der darin definierte content ausgeliefert.

Wenn ich nun nur 'meinedomain.de' eingebe, greift dann (Host: * | Type: A | Destination: meine rote/öffentliche IP) oder greift da (Host: @ | Type: A | Destination: meine rote/öffentliche IP) ? Wenn letzteres, ist das der kürzeste Weg hinsichtlich unnötiger Weiterleitung+Latenz, wenn http://www.meinedomain.de und http://meinedomain.de zum gleichen Ziel führen sollen, ohne dass das als duplicate-content angesehen wird?

Host: www | Type: CNAME | Destination: @ -> Verstehe ich so, dass das für alte Browser funktioniert, die das mit den subdomain-wildcards/apache-vhosts nicht verstehen? Ich verstehe es auch so, dass ich diesen www-cname löschen könnte, da es mit der wildcard im a-record ja schon abgedeckt wäre, wenn ich es rein im apache mit chosts steuere, in Kauf nehmend, dass ich ältere Browser aussperre. Wird das '@' dann mit 'meinedomain.de' ersetzt oder mit meiner IP? Meine was gelesen zu haben, dass ein CNAME niemals eine IP sein darf.

Jetzt mal zu der Namensgebung einer jail, da konnte ich nichts finden, was meine Fragen beantwortet. Sollte ich eine jail nun www.meinedomain.de oder meinedomain.de nennen? Was setze ich in der rc.conf der jail als Hostnamen? hostname="www.meinedomain.de" oder hostname="meinedomain.de"? Spielt das überhaupt eine Rolle? Wenn ja, für was? Logging? Für den MTA? Überschreibt eins sogar das andere? Die Frage tauchte auf, weil ich mir von der Konsole aus mails an meine gmail-Addy schickte und das als root@jeweiligerjailname zugestellt wurde.

Wenn ich jetzt den apache in der jail konfiguriere, was muss wie wo hin?

httpd.conf
Code:
Listen ipderjail:80   #Das ist die IP der jail, die ich auf dem Host dafür zugewiesen habe und nur darauf soll der apache lauschen. Für mein empfinden der Weg für maximale Flexibilität und Sicherheit, damit ich über pf natten kann, ports umbiegen kann, falls ich mehrere jails oder mehrere instanzen mit apache laufen lassen will uswusf.

ServerName www.example.com:80   #Hier bin ich unsicher, was ich hier eingeben sollte, wenn ich auf einem apache sowieso mehrere vhosts laufen lasse. 'www.meinedomain.de:80' oder 'meinedomain.de:80'? Worauf bezieht sich der Port? Auf den listenport in der jail oder auf den port von außen, wenn ich z.B. mit pf von :80 intern auf :1234 nach außen biege?
Wo kommt das überhaupt zum Tragen? Ich vermute ja, dass der apache darauf reagiert, wenn genau diese subdomain eingegeben wird. Lesen das php-Scripte auch aus z.B. bei nem Installationswizard?
Angenommen ich setze den ServerName nicht und die Autoerkennung klappt (steht ja im Infotext bei), wird der jailname ausgelesen oder der hostname in rc.conf?

Kann es sein, dass auf meine genannte httpd.conf-Einstellung verzichtet werden kann, wenn man nur mit extra/httpd-vhosts.conf arbeitet?

Folgende Beispielkonfiguration httpd-vhosts.conf
Code:
<VirtualHost ipderjail:80>   #muss das die gleiche IP sein, wie jene wenn ich in der httpd.conf ipderjail:80 festgelegt habe oder ist das ein komplett eigenständiger vhost dieser apache-instanz?
        ServerName www.odenwaldversicherung.de #Wieder die Frage, ob das die subdomain ist, auf der die apache reagiert, wenn diese in den Browser getippt wird?
        DocumentRoot /usr/local/www/meine_seiten/www.meinedomain.de
          <Directory /usr/local/www/meine_seiten/www.meinedomain.de>
            Require all granted
          </Directory>

                Alias /phpmyadmin "/usr/local/www/phpMyAdmin/"
                        <Directory "/usr/local/www/phpMyAdmin/">
                        Require all granted
                        </Directory>
</VirtualHost>

Ich hoffe, mir kann jemand ein wenig Licht ins Dunkle bringen... :D
 
Moin,

ich gehe jetzt mal auf das ganze DNS-Gedönse nicht ein. Ich benenne die Jails immer nach deren Jobs. Ich habe hier zB "www", "sql", "imap". Ich sehe auch keinen Grund, meine Jail "meinedomain.de" zu nennen. Wenn du "nocheinedomain.de" hast, müsstest du entweder damit leben, dass deine Jail falsch heißt oder wärst gezwungen für die Domain eine eigene Jail für den Webserver zu erstellen. Das halte ich für keinen sicherheitsbringenden Faktor (auch wenn theoretisch einer da sein könnte).

Hrmpf... Jetzt gehe ich doch kurz auf das DNS-Gedönse ein: Ich vermute du hast nur eine externe IP. Damit legst du diese auf den FreeBSD-Host direkt und nicht auf eine Jail, oder? Ich finde es inkonsequent, wenn nun der FreeBSD-Host "meinedomain.de" mit einer internen IP auflöst und der Rest der Welt mit deiner externen IP. Noch dazu ist es imho unschön, dass du zB die /etc/resolv.conf deiner sql-Jail ebenfalls so konfigurieren musst, dass "meinedomain.de" mit der internen IP aufgelöst wird. Du willst ja schließlich den SQL-Server so konfigurieren, dass er über die interne IP arbeitet und zusätzlich nur Anfragen von "meinedomain.de" zulässt, was aber mit der externen IP aufgelöst würde.

HTH
 
Also, erstmal allgemein: Wildcard-Subdomains gibt es so lange wie es das DNS gibt. Wenn ein Browser die nicht versteht, ist er einfach defekt. Davon abgesehen, dass die Browser idealerweise auch nur gethostbyname() des Betriebssystems aufrufen. Relativ neu ist aber SNI, was es erlaubt mehrere unterschiedliche per SSL erreichbare Domains unter einer IP-Adresse zu hosten. Aber - und das ist ein großes Aber - es gibt keinen sinnvollen Grund auf ältere Browser Rücksicht zu nehmen. Browser sind hochkomplexe Programme, die sich aus gutem Grund (Stichwort Sicherheit) schnell fortentwickeln. Selbst länger unterstützte Versionen wie z.B. Firefox ESR bewesgen sich einem sehr überschaubaren Rahmen. Wer keinen aktuellen Browser einsetzt, hat eine ganze Reihe Probleme und verdient schlicht nicht, dass auf ihn Rücksicht genommen wird.

Zu den IP-Adressen: Bei IPv4-Adressen ist das Problem, dass sie so ziemlich am Ende sind und man daher meisten nur noch eine Adresse bekommt. Wenn überhaupt. Trotzdem werden wir so schnell wohl nicht von IPv4 wegkommen, auch wenn es quälend langsam mit IPv6 brauchbare Formen annimmt. Der klassische Weg ist, die einzige öffentliche IPv4-Adresse auf den Host zu legen, die Jails in privates Netz wie zum Beispiel 10.1.0.0/16 und die gewünschten Ports per Firewall - ob pf, ipf oder ipfw ist erstmal Geschmackssache - durchreichen. Dabei dient die öffentliche IPv4-Adresse nur der externen Kommunikation, intern läuft alles über die das private Netz. Der Ansatz hat aber einige Nachteile.
  • Wenn ein öffentlich erreichbarer Port in mehreren Jails genutzt werden soll, geht das erstmal nicht. Dann benötigt man einen Reverse Proxy. Für HTTP ist so einer in komplexeren Setups oft sowieso zu empfehlen, aber für zum Beispiel SMTP oder IMAP wird das schnell eklig. Eine befriedigende Lösung für das Problem gibt es nicht.
  • Internes und externes DNS haben unterschiedliche Weltansichten. Extern löst 'smtp.beispieldomain.de' auf deine öffentliche Adresse auf, intern auf die private Adresse des SMTP-Jails. Das kann man durch ein Split Horizon DNS (unterschiedliche Nameserver je nachdem woher die Anfrage kommt) lösen, durch Host-Dateien oder durch die Verwendung von IP-Adressen.
Mit IPv6 hat man es einfacher. Da bekommt einfach alles eine öffentliche Adresse und der Paketfilter filtert durch, was öffentlich erreichbar sein soll und was nicht. Fertig. Außerdem ist es durchaus möglich Jails komplett ohne IP-Adresse zu betreiben. Man kann ein Verzeichnis per nullfs in alle Jails mounten, die Dienste legen ihre jeweiligen Sockets hinein und kommunizieren über die. Ich persönlich fand das immer etwas ungenial, aber technisch gesehen spricht nichts dagegen.

Man kann Jails übrigens auch verschachteln, also ein Jail kann wiederum mehrere Kinder-Jail beinhalten. Das geht sogar über unbegrenzte Ebenen. Ich nutze das zum Beispiel für php-fpm. Im Mutterjail läuft nginx, der je nach VHost und Anwendung auf jeweils einen anderen, in einem Kind-Jail laufenden php-fpm Server zurückgreift. So kann ich recht schmerzfrei verschiedene PHP-Versionen parallel anbieten. Was oft notwendig ist, da PHP öfter inkompatible Brüche der Sprache vornimmt, als ich meine Unterhosen tausche.

Wie man Jails benennt, ist einem völlig selbst überlassen. Man sollte es nur konsistent machen.
 
Wenn du "nocheinedomain.de" hast, müsstest du entweder damit leben, dass deine Jail falsch heißt oder wärst gezwungen für die Domain eine eigene Jail für den Webserver zu erstellen.
Guter Einwand, hatte ich nicht bedacht. Eben auch, wenn ich die Domain komplett ändern mag.

Wie man Jails benennt, ist einem völlig selbst überlassen. Man sollte es nur konsistent machen.
Ok, ich dachte nur, dass das irgendwie später (nicht ohne Schmerzen änderbar) Einfluss auf die Dienste nimmt.

Ich vermute du hast nur eine externe IP.
Jein...ich habe eine externe ipv4, nur die benutze ich im Moment. Ich hab noch entweder eine oder zwei ipv6, müsst ich mal nachgucken. Ich hatte das erst mal mit ipv6 auf die Seite gelegt, um die Komplexität etwas zu verringern.

Bei IPv4-Adressen ist das Problem, dass sie so ziemlich am Ende sind und man daher meisten nur noch eine Adresse bekommt. Wenn überhaupt.
Ja, ist bekannt. Daher bleibe ich auf dem Anschluss sitzen, so lange es geht. Trotz Privatanschluss finde ich aber, dass viel geboten wird und Extraleistungen wie feste IP oder fastpath kosteten nur einmalig was und in den AGBs steht nichts drin, dass mir Server betreiben verboten wäre.

Ich finde es inkonsequent, wenn nun der FreeBSD-Host "meinedomain.de" mit einer internen IP auflöst und der Rest der Welt mit deiner externen IP. Noch dazu ist es imho unschön, dass du zB die /etc/resolv.conf deiner sql-Jail ebenfalls so konfigurieren musst, dass "meinedomain.de" mit der internen IP aufgelöst wird. Du willst ja schließlich den SQL-Server so konfigurieren, dass er über die interne IP arbeitet und zusätzlich nur Anfragen von "meinedomain.de" zulässt, was aber mit der externen IP aufgelöst würde.
Das hab ich jetzt 5x gelesen und nicht am Stück verstanden...mag aber auch daran liegen, dass ich erst seit kurzem wach bin. ;)

Bei SMTP und IMAP bin ich noch nicht, das hab ich nach hinten verschoben. ;)

Außerdem ist es durchaus möglich Jails komplett ohne IP-Adresse zu betreiben. Man kann ein Verzeichnis per nullfs in alle Jails mounten, die Dienste legen ihre jeweiligen Sockets hinein und kommunizieren über die. Ich persönlich fand das immer etwas ungenial, aber technisch gesehen spricht nichts dagegen.
Hab ich gelesen, soll früher den geringsten overhead produziert haben, mittlerweile sind beide Optionen gleich schnell. Ob das stimmt, kann ich mangels Erfahrung und Test nicht sagen.

Man kann Jails übrigens auch verschachteln, also ein Jail kann wiederum mehrere Kinder-Jail beinhalten. Das geht sogar über unbegrenzte Ebenen.
Stimmt, da war ja was. Zum aktuellen Stand meine ich aber, dass mir php72 genügt, ich will ja kein hosting anbieten. :D
 
Das hab ich jetzt 5x gelesen und nicht am Stück verstanden...mag aber auch daran liegen, dass ich erst seit kurzem wach bin. ;)
Ich würde eher darauf tippen, dass es an meiner umständlichen Ausdrucksweise liegt. Mit anderen Worten: Du hast 2 Jails. www und sql. Du möchtest aus Sicherheitsgründen, dass der SQL-Server nur auf einer internen IP lauscht. Die SQL-Jail löst www.meinedomain.de (nach meinem Verständnis wolltest du so den hostname der www-Jail setzen) standardmäßig wohl mit der externen IP auf. Deshalb bräuchtest du entweder einen eigenen DNS (/etc/resolv.conf) oder du konfigurierst /etc/hosts so, dass die SQL-Jail "www.meinedomain.de" mit der internen IP auflöst. Ich finde das unschön, irgendwann stolperst du da drüber.
 
Jetzt hab ichs...und nein, ich wollt wissen, welche vergebenen Namen wo greifen. Ich bin drüber gestolpert, weil ich in ersten Tests meine jail 'japache' genannt habe und dann eine mail 'wordpress@japache' im gmail ankam. Da hats mich eben arg gewundert, dass die jail ihren Namen als hostnamen einfach mal so nimmt, wenn hostname in rc.conf nicht vergeben war. Dh. ich hatte 5 Anlaufstellen und wusste eben nicht, was genau wie greift. jailname, hostname in rc.conf, ServerName in httpd.conf, Servername oder ServerAlias in httpd-vhosts :ugly:
Mittlerweile denke ich, dass jailname greift, wenn in rc.conf nichts ist und die Mail geht an sendmail und hat mit Apachevariablen gar nichts zu tun.

Gestern abend (darum wurde es auch spät :D) hab ich lo1 geklont, darauf private ips erstellt und dieses Netz sollte ein eigenständiges sein, vom Rest abgeschottet.
dass der SQL-Server nur auf einer internen IP lauscht.
Genau das wollt ich erreichen. www hat ne interne IP, sql ebenfalls eine aus dem gleichen extra-netz.
Dann mittels pf eben einstellen, was wohin soll und darf.
 
Da hats mich eben arg gewundert, dass die jail ihren Namen als hostnamen einfach mal so nimmt, wenn hostname in rc.conf nicht vergeben war.
Auf dem Host wirst du vermutlich eine jail.conf verwenden, in der du
Code:
host.hostname = "japache";
gesetzt hat. Der Hostname wird also vom Host gesetzt, nicht von der Jail selbst. ;)
 
Hast recht...da ich ezjail nutze, findet sich die config jeweils in /usr/local/etc/ezjail/jailname auf dem host. (erste Zeile) :)

Wenn ein öffentlich erreichbarer Port in mehreren Jails genutzt werden soll, geht das erstmal nicht. Dann benötigt man einen Reverse Proxy. Für HTTP ist so einer in komplexeren Setups oft sowieso zu empfehlen, aber für zum Beispiel SMTP oder IMAP wird das schnell eklig. Eine befriedigende Lösung für das Problem gibt es nicht.
Irgendwie vergessen, das zu kommentieren. Ja, ist auch bekannt. Ich kann an der externen IP nur einen Port belegen. Also nicht 2x Port 80, bei großer Not den zweiten auf Port 81 usw., aber dann muss im Browser der Port angegeben werden. Das nutz ich vllt. für den reinen Privatzugriff, falls mir das so und so nicht ausreichen sollte. ;)
Wie ichs sehe, brauch ichs gar nicht so komplex und akut brauch ich auch nicht mehr domains. Dh. doch, dass ich mit einer IP hinkomme und jeder Dienst einen Port 'verbraucht'?
Ich hab vor: 1x Homepage auf 1x Domain, SMTP, POP3 bzw. lieber IMAP. Mehr wäre Luxus...
 
Wie ichs sehe, brauch ichs gar nicht so komplex und akut brauch ich auch nicht mehr domains. Dh. doch, dass ich mit einer IP hinkomme und jeder Dienst einen Port 'verbraucht'?
Ich hab vor: 1x Homepage auf 1x Domain, SMTP, POP3 bzw. lieber IMAP. Mehr wäre Luxus...
Ja, da solltest du problemlos ohne Proxies hinkommen können.
 
Ich hab jetzt a weng rumgespielt und Erkenntnisse erlangt - wohlbemerkt nutze ich ausschließlich ezjail.

Wenn ich mit ezjail eine jail anlege, wird dieser jailname automatisch der Hostname in der jail. Der in der jail in rc.conf gesetzte Hostname wird dadurch mißachtet bzw. das was in der jeweiligen jail.conf steht, hat Vorrang.

Und bei einem 'ezjail-admin list' wird explizit Hostname angezeigt und kein jailname. Bevor ich mich jetzt quäle und in der conf rumpopel, dann bin ich der Meinung, dass ich doch eher komplett einheitlich bleibe.

'ezjail-admin config -n neuername altername' funktioniert tadellos, hab die config verglichen, damit kein Murks passiert. Man muss die jail dann nur logischerweise neu starten.
Sollte ich wirklich mal die Domain wechseln, kann ich die jail umbennen. Zur Not ne neue hinsetzen, ist ja fix weggeschmatzt, wenn mans 3x gemacht hat.

Routing und so mach ich direkt über IP, hat sich irgendwie eingebürgert. Da vermurks ich irgendwie weniger als mit Hostnamen.

Achso....Frage zur Anlaufstelle:
Zweiten Apache + Https + eigens gedengeltes Zertifikat könnte ich auf Port 444 lauschen lassen, vermute ich. Wie ist das, wenn ich jetzt dafür auch so ein hübsches Lets encrypt-Zertifikat haben mag? Geht nur mit besagtem Reverse-Proxy, vermute ich u.a. auch schon deshalb, weil Lets encrypt initial auf Port 80 guckt, oder?
 
Mit IPv6 hat man es einfacher. Da bekommt einfach alles eine öffentliche Adresse und der Paketfilter filtert durch, was öffentlich erreichbar sein soll und was nicht. Fertig.
Ich hab noch entweder eine oder zwei ipv6, müsst ich mal nachgucken.

Ich hab mal nachgeschaut, mich ein wenig damit beschäftigt und rumgespielt. Ich hab tatsächlich zusätzlich zur festen ipv4 noch 2 (feste, yeehaw! :D) ipv6-Netze. Das ist einmal ein /64er und ein /62er. Im /64er hab ich mal ein paar IPs gesetzt, pingbar, routbar, alles sahnig. Hat irgendwer eine Idee, warum ich auch ein /62er-Netz bekommen habe? Ich mein....genug IPs sinds ja schon im /64er. :confused:
 
Das /64 ist als transfernetz zum /62 gedacht. Du möchtest ja vielleicht verschiedene Netze für verschiedene Zwecke nutzen. Kleiner als /64 sollte ein v6 Netz nicht sein, außer man hat einen guten Grund dazu.
 
Zurück
Oben