Bearbeiten von „JailServer mit FreeBSD 10.1“

Aus UUGRN

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und speichere dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 127: Zeile 127:
 
# gpart add -t freebsd-zfs -a 1m -s 64G -l cache1 ada1
 
# gpart add -t freebsd-zfs -a 1m -s 64G -l cache1 ada1
 
</pre>
 
</pre>
 
==== GPT-ZFS Bootloader ====
 
Auf die jeweils erste Partition (adaXp1) soll noch der aktuelle Bootloader installiert werden. Je nachdem von welchen Disks der Server vom BIOS her nachher bootet sollte in jedem Fall ein gültiger Bootloader gefunden werden, der in der Lage ist das ZFS auf den verfügbaren GPT-Partitionen zu finden.
 
 
<pre>
 
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
 
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
 
</pre>
 
 
Nach Major-RELEASE Upgrades von FreeBSD, bei denen auch ZFS signifikant erneuert wurde, sollte dieser Vorgang für alle verfügbaren Boot-Devices wiederholt werden, also auch ada2 und ada3 sofern vorhanden.
 
 
Die jeweils zum RELEASE gehörende Version von /boot/gptzfsboot sollte ausgerollt werden. Das gilt insbesondere bei Uprgade von ZFS Version <28 (FreeBSD 7.x, 8.x)!
 
 
/boot/pmbr wird als ''protective MBR'' bezeichnet und erzeugt einen Pseudo-MBR, der verindern soll, dass ein nicht GPT fähiges OS (zB WinXP) die Platte irrtümlich als "Frei" erkennt und anfängt dinge damit zu tun.
 
 
Mehr dazu unter [https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot RootOnZFS/GPTZFSBoot] im FreeBSD-Wiki.
 
  
 
==== GPT-Partitionen auf SSD als ZFS log und cache einbinden  ====
 
==== GPT-Partitionen auf SSD als ZFS log und cache einbinden  ====
Zeile 183: Zeile 167:
 
==== swap-Partitionen von HDD auf SSD umbiegen ====
 
==== swap-Partitionen von HDD auf SSD umbiegen ====
 
Von bsdinstall wurde bereits swap-Speicher auf den Festplatten eingerichtet. Dieser soll entfallen zugunsten von swap-Partitionen auf SSDs.
 
Von bsdinstall wurde bereits swap-Speicher auf den Festplatten eingerichtet. Dieser soll entfallen zugunsten von swap-Partitionen auf SSDs.
Auch wenn die oben angelegten 2x 16GB freebsd-swap üppig erscheinen (ergibt immerhin 32Gb swap), der Platz ist auf den SSDs ohnehin günstig und schnell vorhanden.
+
Auch wenn die oben angelegten 2x 16GB freebsd-swap üppig erscheinen (ergibt immerhin 32Gb swap), der Platz ist auf den SSDs ohnehin günstig vorhanden und darüber hinaus kann (später) auch /tmp als "langsame" RAM-Disk mit swap-Persistenz mit verwendet werden (siehe unten)
  
Abgesehen von klassischem "paging" kann der in Summe nun 32GB große swapspace verwendet werden für
 
* /tmp als swap basierte RAM-Disk (swap backed memory disk, ''md'')
 
* crash dump Partition (''dumpon=AUTO'')
 
  
 +
1. Zunächst prüfen, dass genug RAM frei ist und swap deaktivieren:
  
1. Zunächst prüfen, dass genug RAM frei ist und swap nicht anderweitig genutzt wird, dann swap deaktivieren:
 
 
<pre>
 
<pre>
 
# swapoff -a
 
# swapoff -a
 
</pre>
 
</pre>
  
2. Anschließend in /etc/fstab sinngemäß folgnde Änderungen (hier dargestellt als unified diff) durchführen:
+
2. Anschließend in /etc/fstab sillgemäß folgnde Änderungen (hier dargestellt als unified diff) durchführen:
 
<pre>
 
<pre>
 
--- /etc/fstab.orig    2015-02-18 02:06:47.466768456 +0100
 
--- /etc/fstab.orig    2015-02-18 02:06:47.466768456 +0100
Zeile 211: Zeile 192:
 
  fdesc                  /dev/fd        fdescfs rw 0 0
 
  fdesc                  /dev/fd        fdescfs rw 0 0
 
</pre>
 
</pre>
 
Die '''GPT-Labels''' "ssdswap0" und "ssdswap1" wurden zuvor mittels "gpart add … -t freebsd-swap -l ssdswap0 …" erzeugt. Man könnte hier generell auch /dev/ada0p1 und /dev/ada0p2 verwenden, was aber bei Wegfall von einzelnen Devices oder Neu/Umverkabelung von SATA-Ports zu Problemen führt (andere Numerierung! der ada-Devices).
 
  
 
3. swap nun wieder aktivieren:
 
3. swap nun wieder aktivieren:
Zeile 246: Zeile 225:
 
     enabled and mounts it on mount-point.
 
     enabled and mounts it on mount-point.
 
</pre>
 
</pre>
 
  
 
Generell könnte über diesen Mechanismus auch /tmp-Speicher für die jails angeboten werden, der beim Start eines Jails (vorab) automatisch bereitgestellt wird.
 
Generell könnte über diesen Mechanismus auch /tmp-Speicher für die jails angeboten werden, der beim Start eines Jails (vorab) automatisch bereitgestellt wird.
 
Nach der Änderung der Storages ist ein Neustart vom Server hilfreich, bevor man anfängt viel Arbeit in das Setup zu investieren!
 
Nach der Änderung der Storages ist ein Neustart vom Server hilfreich, bevor man anfängt viel Arbeit in das Setup zu investieren!
  
==== swap space für crash dumps ====
 
Der FreeBSD-Kernel kann im Falle einer Kernelpanic seinen gesamten Speicher oder auszüge daraus für eine spätere Analyse auf ein "dump-device" schreiben (sofern die Kernel-Panic nicht durch das Storage-Subsystem ausgelöst wurde).
 
  
Dies kann eine dedizierte crashdump-Partition sein, üblicherweise wird hier allerdings eine (ausreichend große) swap-Partition verwendet. Nach dem dann folgenden Reboot wird dieser crash-dump vor der Initialisierung von Swap automatisch gefunden und nach /var/crash kopiert, wo er post mortem analysiert werden kann.
 
 
Da der Server 16GB RAM hat sind die (beiden) SWAP-Partitionen ebenfalls 16GB groß, aber nicht aufgrund der "SWAP = 2xRAM"-Regel sondern eben für die crash-dumps.
 
 
;aus rc.conf(5):
 
<pre>
 
    dumpdev    (str) Indicates the device (usually a swap partition) to
 
                which a crash dump should be written in the event of a system
 
                crash.  If the value of this variable is ``AUTO'', the first
 
                suitable swap device listed in /etc/fstab will be used as
 
                dump device.  Otherwise, the value of this variable is passed
 
                as the argument to dumpon(8).  To disable crash dumps, set
 
                this variable to ``NO''.
 
 
    dumpdir    (str) When the system reboots after a crash and a crash dump
 
                is found on the device specified by the dumpdev variable,
 
                savecore(8) will save that crash dump and a copy of the ker-
 
                nel to the directory specified by the dumpdir variable.  The
 
                default value is /var/crash.  Set to ``NO'' to not run
 
                savecore(8) at boot time when dumpdir is set.
 
</pre>
 
  
 
=== Grundkonfiguration des Servers (afterboot)===
 
=== Grundkonfiguration des Servers (afterboot)===
 
==== Namen, IP-Adressen, Domains ====
 
Alle in den folgenden Beispielen verwendeten IP-Adressen und Hostnamen ensprechen einem real existierenden Server, dessen Aufbau hier beschrieben wird.
 
 
{| class=wikitable
 
! Bezeichnung
 
! Wert
 
! Bemerkung
 
|-
 
! Hostname des Servers
 
| srv01.sigsys.de
 
|
 
|-
 
! Domain(s)
 
| sigsys.de und sigsys.lan
 
| analog zu den IP-Netzen
 
|-
 
! IPv4
 
| 164.177.170.96/29
 
| externe IP-Adressen auf em0
 
|-
 
! IPv4
 
| 10.253.2.0/24
 
| interne IP-Adressen auf "lan" (=lo1)
 
|-
 
! IPv6
 
| 2a03:2500:1:8::/64
 
| externe IPv6-Adressen auf em0
 
|-
 
|}
 
 
 
==== Software installieren ====
 
==== Software installieren ====
 
Die Installation eines vorkompilierten Paketes erfolgt einfach mittels "pkg install paketname".  
 
Die Installation eines vorkompilierten Paketes erfolgt einfach mittels "pkg install paketname".  
Zeile 661: Zeile 585:
  
 
Jails werden über das Hostsystem mit der Systemzeit versorgt, daher muss der Daemon nicht auf dem '''lan'''-Interface lauschen. Hier exemplarisch nur die Einstellung dass der Daemon ausschlielich auf '''localhost''' lauscht.
 
Jails werden über das Hostsystem mit der Systemzeit versorgt, daher muss der Daemon nicht auf dem '''lan'''-Interface lauschen. Hier exemplarisch nur die Einstellung dass der Daemon ausschlielich auf '''localhost''' lauscht.
 
== Jails ==
 
=== Grundlagen zu Jails ===
 
* Neu seit FreeBSD 9.x: Konfiguration mittels jail.conf (old-style aber immernoch supported!)
 
* Neue Jails anlegen, ganz einfach!
 
* Jails einzeln Starten/Beenden/Neustarten mittels jail(8) und jail.conf(5)
 
* ZFS und Jails
 
* Automatisch Starten/Beenden von Jails beim Systemboot
 
 
=== ZFS Setup für Jails ===
 
Jedes Jail soll ein eigenes ZFS-Volume verwenden. Das ermöglichst später die automatische Erstellung von Snapshots beim Starten oder Beenden von Jails oder damit dann feingranulare Rollbacks nach fehlgeschlagenen Upgrades innerhalb von Jails, ohne dass benachbarte Jails zwangsweise mit zurückgerollt werden.
 
 
 
=== Jails beim Booten automatisch starten ===
 
Das Script /etc/rc.d/jail wurde seit FreeBSD 4.x bis FreeBSD 9.x kontinuierlich weiter entwickelt. Es basierte darauf, dass alle Parameter für alle Jails in ''jail_* variables'' in '''/etc/rc.conf''' gepackt wurden. Da Jails als solche seit FreeBSD 8.x drastisch an Komplexität zugenommen haben (feingranulare Properties, MultiIP/NoIP/IPv6(only) etc) war es nicht mehr praktikabel alle möglichen Parameter auf diesem Weg (/etc/rc.conf) zu verwalten.
 
 
Das jail(8)-Tool hatte lange Zeit 2 getrennte Syntaxe:
 
 
;historischer Stil (alle Parameter müssen direkt an jail(8) übergeben werden, komplexe Dinge musste das Startscript mit Variablen aus /etc/rc.conf erledigen):
 
<pre>
 
    jail [-hi] [-n jailname] [-J jid_file] [-s securelevel]
 
          [-l -u username | -U username] path hostname [ip[,..]] command ...
 
</pre>
 
 
;aktueller Stil mit Support für /etc/jail.conf, wobei jail(8) einen Großteil der Kompelexität selbst implementiert.
 
<pre>
 
    jail [-dhilqv] [-J jid_file] [-u username] [-U username] [-cmr]
 
          param=value ... [command=command ...]
 
    jail [-dqv] [-f conf_file] [-p limit] [-cmr] [jail]
 
    jail [-qv] [-f conf_file] [-rR] [* | jail ...]
 
    jail [-dhilqv] [-J jid_file] [-u username] [-U username] [-n jailname]
 
          [-s securelevel] [path hostname [ip[,...]] command ...]
 
</pre>
 
 
Beim "old-style" war es praktisch nicht möglich Jails zu verwalten ohne dabei das '''/etc/rc.d/jail-Startscript''' zu verwenden, welches signifikant komplexe Dinge getan hatte und dennoch spürbare Grenzen hatte. Zusätzliche Jailmanagement Tools wie "ezjail" haben mit eigenen Methoden um /etc/rc.d/jail herum das ein Stück weit erträglicher gemacht für den Administrator.
 
 
'''Neuartige Jails''' kann man nun sehr einfach mittels jail(8) verwalten, zB '''jail -c ''jail_name''''' zum Starten (''create'') oder '''jail -r ''jail_name''''' zum Beenden (''remove''), wobei alle mit ''jail_name'' assoziierten Parameter aus /etc/jail.conf kommen.
 
 
Damit konnte die Komplexität des '''/etc/rc.d/jail'''-Startscript drastisch reduziert werden und es ist auch nicht mehr erforderlich dieses Startscript ansich zu nutzen.
 
 
=== Jails aus diesem Beispielsetup ===
 
 
{| class=wikitable
 
! Jail
 
! Namen, Adressen
 
! Bemerkungen
 
|-
 
| sigsys_mail (.2)
 
| mail.sigsys.de, mail.sigsys.lan, 164.177.170.98/32, 2a03:2500:1:8:2::/128, 10.253.2.2/32
 
| MX für eingehende E-Mails, intern SmartHost für alle anderen Systeme
 
|-
 
| sigsys_dns (.3)
 
| dns.sigsys.de, dns.sigsys.lan, 164.177.170.99/32, 2a03:2500:1:8:3::/128, 10.253.2.3/32
 
| Domain-Hosting, Hidden Primary DNS Server
 
|-
 
| Jail sigsys_proxy (.4)
 
| proxy.sigsys.de, proxy.sigsys.lan, 164.177.170.100/32, 2a03:2500:1:8:4::/128, 10.253.2.4/32
 
| Ein- und ausgehender Proxy (apache und squid) für HTTP-Anwendungen und vergleichbare Anwendungen
 
|-
 
| Jail sigsys_shell (.5)
 
| shell.sigsys.de, shell.sigsys.lan, 164.177.170.101/32, 2a03:2500:1:8:5::/128, 10.253.2.5/32
 
| Benutzerzugriffe via SSH, allgemeine/klassische Nutzung als Shell-Server, Jumphost für SSH nach innen ("lan")
 
|-
 
| Jail sigsys_mysql (.64)
 
| mysql.sigsys.lan, 10.253.2.64/32
 
| MySQL-Datenbank
 
|-
 
| Jail sigsys_xmpp (.66)
 
| xmpp.sigsys.de, xmpp.sigsys.lan, 2a03:2500:1:8:66::/128, 10.253.2.66/32
 
| Jabber als "IPv4 hidden Service" via proxy.sigsys.de, extern erreichbarer Service für IPv6
 
|-
 
| Jail sigsys_web04 (.131)
 
| web04.sigsys.lan, 10.253.2.131/32
 
| Einer von mindestens 7 internen Webserver-Jails für verschiedenste Anwendungsfälle (Homepages, Blogs, Wikis, Tools, …), zugreifbar nur via Reverse-Proxy auf proxy.uugrn.{de,lan}
 
|-
 
|}
 
 
  
  
 
[[Kategorie:FreeBSD]]
 
[[Kategorie:FreeBSD]]
 
[[Kategorie:HowTo]]
 
[[Kategorie:HowTo]]

Bitte kopiere keine Inhalte, die nicht Deine eigenen sind!

Du gibst uns hiermit Deine Zusage, dass
  • Du den Text nicht aus Wikipedia kopiert hast
  • Du den Text selbst verfasst hast
  • oder der Text entweder
    • Allgemeingut (public domain) ist
    • oder der Copyright-Inhaber seine Zustimmung gegeben hat.
Wichtig
  • Benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Copyright-Inhabers!
  • Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der 'Diskussion:'-Seite darauf hin.
  • Bitte beachte, dass alle UUGRN-Beiträge automatisch unter der der Creative Commons Lizenz stehen.
  • Falls Du nicht möchtest, dass Deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf "Artikel Speichern".

Bitte beantworte die folgende Frage, um diese Seite speichern zu können (weitere Informationen):

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)