Projekte

Der erste eigene Linux Home Server war 10 Monate im produktiven Einsatz

In den Weihnachtsferien 2007 sollte der erste eigene Family Linux Homeserver online gehen. Meine Ansprüche an diesen waren hoch:

  • Kostenloses und zuverlässiges Betriebssystem (Debian Etch 4.0)
  • Zentraler Zugriff auf Daten (Samba SMB/CIFS Shares)
    • Öffentlich lesbarer Ordner mit Handbüchern, Treibern, VM Templates, Software und eBooks
    • Öffentlich lese/schreibbarer Ordner für Dateiaustausch
    • Passwortgeschützer Ordner für Private Dateien
  • Knowledge Center für Dokumentationen und Troubleshooting (Mediawiki mit Graphviz extension)
  • Datenbank für Tests und als Backendsystem für Mediawiki (MySQL)
  • Fernzugriff(OpenSSH)
  • Versionskontrolle für Configs, Scripte, Makros usw… (Subversion SVN)
  • Webserver mit WebDAV (Apache2)
  • Administrierbarkeit auch über WebGUIs (Webmin, SWAT, phpmyadmin)
  • VPN Verbindungen End2Side(=“Roadwarrior”) und Side2Side (OpenVPN)
  • Zeitgesteuertes booten des Systems (BIOS Power On) –> Ziel: Stromkosten einsparen. Wenn alle schlafen soll der Server nicht unnötig laufen
  • Zeitgesteuerte Backups und Shutdowns (crontab)
  • RAID 1 Funktionialität (mdadm)
  • Externe Erreichbarkeit über DynDNS Adresse

Zuerst habe ich aus einem alten AMD Athlon 700 und einem AMD K6-2 die besten verwertbaren Komponenten ausgewählt. Das BIOS habe ich auf die neueste Version gepacht. Interessanterweise war es zuvor AWARD, danach AMI.

Um den Server “On-Demand” einzuschalten sollte neben einer Zeitgesteuerten Funktion die Möglichkeit bestehen ihn per WOL zu starten. Ohne BIOS Update war das nicht möglich. Einen vorkonfektionierten WOL Stecker zwischen NIC und Hauptplatine hatte ich nicht. Also habe ich mit Lötkolben und einigen überresten einen funktionsfähigen Stecker zusammengelötet.

Installation

Als Distribution habe ich mich für Debian 4.0 entschieden. Die Installation verlief recht mühselig aber lehrreich.

  • Problem #1
  • Von 320 GB sah ich nur 66 GB
    • Lösung
    • Ein Computer von 1999-2000 konnte per LBA max 66 GB Adressieren. Mehr war damals nicht üblich. Mehr brauchte der PC aber auch gar nicht wissen, weil zu einem späteren Zeitpunkt der Kernel die notwendige Adressierung bereitstellt.
  • Problem #2
  • GRUB meldete sich nach der ersten Installation mit “Error 17”
    • Lösung
    • /boot wird als eigene Partition auf die Anfangssektoren geschrieben, in der sich die ersten 1024 Cylinder der Festplatte befinden müssen

Fertiges RAID 1 Layout mit mdadm

   .                                                    ----->  /boot  ----+
   .                                                   /                   |
   +------------------+              320 GB HDD - - - - ----->    /    ----|----+
   |                  |                |               \                   |>>>>|>>>>>>>>>>>>>>>>>>>> /dev/md0 
   |  Primary - - - - | - Slave - - - Master            ----->  swap   ----|----|---+
   |                  |                                                    |    |   |
   |                  |                                                    |    |>>>|>>>>>>>>>>>>>>>> /dev/md1
   |  Secondary - - - | - Slave - - - Master             ---->  /boot -----+    |   |
   |                  |                |               /                        |   |
   +------------------+              320 GB HDD - - - - ----->    /   ----------+   |>>>>>>>>>>>>>>>> /dev/md2
   .                                                   \                            |
   .                                                     ---->  swap  --------------+

Leider kam das Gehäuse erst später an. Um keine Zeit zu verlieren habe ich übergangsweise alle Komponenten im Standardgehäuse gelassen und beide Platten notweise in einen auschraubbaren Plattengefägig untergebracht. Um die Vibrationen zu minimieren habe ich ein dickes Linuxbuch zum beschweren verwendet. Das Buch lag ein bischen quer um die Lüftungslöcher nicht zu blockieren. Hinter den Festplatten befand sich ein Lüfter um die Platten zu kühlen. Die Servereinrichtung konnte beginnen

Grundlegende Einrichtung

ddclient

  apt-get install ddclient
  vi /etc/ddclient.conf
  # Configuration file for ddclient generated by debconf
  #
  # /etc/ddclient.conf
  pid=/var/run/ddclient.pid
  use=web
  protocol=dyndns2
  server=members.dyndns.org
  login=<LOGINNAME>
  password='<PASSWORD>'
  <DYNDNSADRESSE>

Webmin

In Verzeichniss /tmp wechseln.

cd /tmp

Neueste Version von Webmin mit wget herunterladen.

wget http://downloads.sourceforge.net/project/webadmin/webmin/1.490/webmin_1.490_all.deb?use_mirror=surfnet

.deb package installieren

dpkg -i webmin_1.490_all.deb

Test im Webbrowser

https://IP:10000

Beim nächsten Neustart wird /tmp automatisch geleert. Das .deb Package benötige ich jetzt nicht mehr.

Apache 2

Läuft bereits ein Apache Server?

    ps ax | grep httpd

Im Webbrowser localhost eingeben

Den Webserver starten

    # /etc/init.d/httpd start
    Starting httpd:                                  [  OK  ]

Um die Webdienste anzubieten installiert Apache den Dämon “httpd” (Hypertext Transport Protocol Dämon)

= Konfiguration Traditionell= Traditionell sind drei Dateien beteiligt

httpd.conf

* Die Wichtigste Konfigurationsdatei * Einstellung für HTTP-Protokoll und Betrieb des Servers * Wird zuerst bearbeitet

srm.conf

* Beantwortung der Client Anfragen * MIME-Typen * Formatierung der Ausgabe * Ablageort der HTTP Dokumente und CGI Scripte ?? * Wird als zweites bearbeitet

access.conf

* Zugrifsskontrolle * Angebotene Informationen über den Server * Wird als letztes bearbeitet

= Konfiguration Gebräuchlich =

httpd.conf

Wo ist die httpd.conf ? find / -name httpd.conf -print

= Servername ändern = Wir ändern den ServerName von #ServerName new.host.name in ServerName www.gandalf.de

SSL

Ordner erstellen

  mkdir /etc/apache2/ssl

OpenSSL installieren

  apt-get install openssl

Zertifikat erstellen. Es erscheint ein Wizzard

  openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem

Berechtigung Ändern

  chmod 600 /etc/apache2/ssl/apache.pem

In Datei '/etc/apache2/httpd.conf' folgendes hineinschreiben

   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/apache.pem

In Datei '/etc/apache2/ports.conf' den listening Port umändern. Wenn mehrere drinstehen kann es schwierigkeiten geben.

   Listen 443

Module aktivieren

   a2enmod ssl
   a2ensite ssl

apache2 neustarten

   /etc/init.d/apache2 restart

Test https://IP

WebDAV

WebDAV Modul aktivieren

   sudo a2enmod dav_fs

webserver neu starten

   /etc/init.d/apache2 force-reload

Verzeichniss erstellen

   mkdir /var/webdav

die Besitzrechte auf diesen Ordner müssen dem Webserver übergeben werden

   chown www-data:www-data /var/webdav

Der Ordner /var/wedav soll mit SSL über https://localhost/meinwebdavordner mit dem benutzernamen “hubert” erreichbar sein

In der Datei /etc/apache2/sites-available/default innerhalb des VirtualServer-Bereichs folgende Zeilen hinzufügen

Alias /webdav ”/var/meinwebdavordner/”

  <Directory "/var/meinwebdavordner/">
      DAV on
      Options +Indexes
      AllowOverride AuthConfig
      AuthType Basic
      AuthName "WebDAV Verzeichnis"
      AuthUserFile /var/webdav-users.passwd
      Require user hubert
  </Directory>

Benuterrecht erstellen

   htpasswd -c /var/webdav-users.passwd hubert

MySQL

phpmyadmin

Mediawiki

Graphviz Extension

Samba

SWAT

OpenVPN

Zertifikatserstellung mit easy RSA

OpenVPN bietet mit EasyRSA eine Scriptsammlung um eine dateibasierte, minimale Zertifizierungsstelle zu generieren. Diese Scriptsammlung liegt dem OpenVPN Source Package sowie den meisten RPMs bei.

Standardmäßig wird das easyRSA Verzeichniss unter folgendem Pfad installiert

   /usr/share/doc/openvpn/examples/easy-rsa

Dieses Verzeichniss kopierte ich zur besseren Übersicht nach /etc/openvpn/easy-rsa

   cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/easy-rsa

Danach editierte ich die Datei vars um Variablen für die Zertifikatserstellung zu setzen. Hier kann man irgendwas eintragen. Die Felder dürfen nicht leer sein.

   vi /etc/openvpn/easy-rsa/vars
   KEY_COUNTRY=DE
   KEY_PROVINCE=Bezirk
   KEY_CITY=Berlin
   KEY_ORG=IT-Abteilung
   KEY_MAIL=holgi@domain.de

Die Werte sind nun alle gesetzt. Jetzt können die Scripte ausgeführt werden

  cd /etc/openvpn/easy-rsa/
  . ./vars
  ./clean-all
  ./build-ca

* Der einzige Wert welcher jetzt noch explizit gesetzt werden muss ist der “Common Name”. Der Common Name muss einzigartig sein und darf in keinem anderen Zertifikat vorkommen. * Nach dem ausführen von build-ca beginnt die Erstellung des/der Certificate Authority (CA) Zertifikats und des dazugehörigen Schlüssels. * Als Common Name des Root-CA Zertifikat würde ich “OpenVPN-CA” wählen.

Zertifikat und Schlüssel für den Server

   ./build-key-server server

* Als Common Name würde ich “Vpn-Server” wählen * Nach Ausführung muss man noch 2x mit [y] (Ja) bestätigen.

Zertifikat und Schlüssel für den Client

* vars sourcen

   . ./vars
   ./build-key client1

Soll der Client Key mit einem Passwort geschütztzt werden, muss ein anderes Script verwendet werden:

   ./build-key-pass client1

* Als Common Name würde ich client1 wählen und alle weiteren Zertifikate in der Zahl inkrementell erhöhen (client2 client3 client4 ….). Die verwendeten Zertifikate sollten meiner Meinung nach in einer Liste oder DB verwaltet werden. * Wieder bestätigen mit 2x [y] (Ja)

Diffie Hellman Parameter

Der Diffie Hellman Parameter wird für den OpenVPN Server erstellt und verbleibt auf diesem

  ./build-dh

Alle angelegten Dateien sind jetzt unter folgendem Pfad zu finden

   /etc/openvpn/easy-rsa/keys

Dort drin gibt es auch eine index.txt Datei in der alle Zertifikate aufgelistet sind

   V       180705012923Z           01      unknown /C=DE/ST=Bayern/O=gandalf-IT/OU=private/CN=Vpn-Server/emailAddress=my@email.de
   V       180705013231Z           02      unknown /C=DE/ST=Bayern/O=gandalf-IT/OU=private/CN=client1/emailAddress=my@email.de
   V       180705014209Z           03      unknown /C=DE/ST=Bayern/O=gandalf-IT/OU=privat/CN=client2/emailAddress=my@email.de

Das Routing aktivieren:

  echo 1 > /proc/sys/net/ipv4/ip_forward

iptables Regel:

  iptables -A FORWARD -i tun+ -j ACCEPT

Topologie

      
         IPcop                                                           Router              Gandalf Server
   +-----------------------+                                         +------------+       +-------------------+
 --|eth0 Green             |                                         |            |       |                   |
   |               eth1 Red|-----------------Internet----------------|IF3      IF0|-------|eth0               |
   |                       |                                         +------------+       |                   |
   |                       |                                                              |                   |
   |                       |                                                              |                   |
   |                   tun0|-10.1.0.2--------------------------------------------10.1.0.1-|tun0               |
   +-----------------------+                                         +----------------------------------------+          
   |  192.168.0.0          |                                         |                  192.168.1.0           |
   +-----------------------+                                         +----------------------------------------+
IPcop Router Gandalf
IP MASK GW IP MASK GW IP MASK GW
10.1.0.1 255.255.255.255 0.0.0.0 192.168.1.0 255.255.255.0 10.1.0.2 255.255.255.255 0.0.0.0
192.168.0.0 255.255.255.0 0.0.0.0 192.168.0.0 255.255.255.0 192.168.1.250 192.168.1.0 255.255.255.0 0.0.0.0
192.168.1.0 255.255.255.0 10.1.0.1 192.168.0.0 255.255.255.0 10.1.0.2

Zertifikate erstellen

Configs erzeugen

sommerserver_1_codename_gandalf.txt · Last modified: 2012/01/25 21:31 by petersommer
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki