Einen Linux-Home-Server mit Debian GNU/Linux 5.0 "Lenny" installieren

Letztes Update: 03. April 2010

Wozu im Notebook-Zeitalter einen zusätzlichen Linux-Home-Server installieren?
Desktop-Computer und Notebooks sind anfällig für Computerschädlinge, Diebstahl, Systemabstürze usw. Ein Linux-Server ist wesentlich zuverlässiger, vorausgesetzt man bastelt nicht ständig dran herum.

Da es immer wieder zeitraubend ist, bei jeder Linux-Installation alles neu zu recherchieren, habe ich hier die Arbeitsschritte protokolliert, die zur Installation meines Linux-Heim-Servers notwendig waren.

Diese Dokumentation hatte ich ursprünglich für Debian 4.0 (Etch) geschrieben. Inzwischen musste ich wegen eines Defektes (Mainboard) die Hardware wechseln. Das nahm ich als Anlass für eine Neuinstallation mit Debian Lenny und passte die Dokumentation an.

Inhalt

  1. Vorüberlegungen
  2. Installation Grundsystem
  3. Zeitserver - NTP installieren
  4. DHCP-Server Installation und Konfiguration
  5. DNS-Server Installation und Konfiguration
  6. Dynamisches Aktualisieren des DNS-Servers durch den DHCP-Server
  7. Dateiserver Samba installieren und konfigurieren
  8. Druckserver CUPS einrichten
  9. SMTP-Server Postfix installieren
  10. MySQL-Server installieren
  11. Webserver Apache2 mit PHP5 installieren
  12. Email-Server Installieren und Konfigurieren
  13. Virenscanner installieren
  14. SSH-Server installieren
  15. Administration über Web-Frontend: Webmin installieren
  16. Datensicherung
  1. Vorüberlegungen

    Was soll das System können?

    Dateiserver - sichere und zuverlässige Dateiablage für persönliche und gemeinsame Dokumente
    Druckserver - Den PCs im Heimnetz den vorhandenen Drucker zur Verfügung stellen.
    Zeitserver - Den Windows - Clients als gemeinsame Zeitbasis dienen.
    Webserver und Datenbankserver - Entwicklungsserver für Websites und meine Wissensdatenbank
    DNS Server - Namensauflösung im Heimnetz
    DHCP Server - IP Adreßvergabe im Heimnetz und Übermittlung des DNS Servers und Standardgateways an die Client-PCs
    Email Server - Zentrale und sichere Speicherung aller Emails mit Zugriff über IMAP

    Welche Hardware verwende ich?

    Mainboard: Intel Q35
    CPU: Intel Celeron 430
    RAM: 1 GB DDR2
    Festplatte: 1TB SATA2, Western Digital Modell: WD10EADS
    Festplatte: 500 GB IDE, Seagate, für Backup
    Netzteil: bequiet! Pure Power 300Watt

    Mit der unten beschriebenen Konfiguration beträgt die Leistungsaufnahme im Leerlauf 43 Watt.

  2. Installation Grundsystem

    Ich verwende die zur Zeit aktuelle Version von Debian GNU/Linux 5.0 (Lenny) Die CD (es reicht die 1. CD) habe ich mir von http://www.debian.org/ geladen. Es gibt bei Debian keine spezielle Server-Distribution.

    Zur Installation ist von der CD zu starten und die Startoption "expert" zu wählen.

    Angaben und Auswahlpunkte während der Installation:

    Menüpunkt / Abfrage Auswahl / Angaben
    Choose language German
    Wählen Sie ein Land oder Gebiet Deutschland
    Sprache wählen (für locale Parameter) de_DE-UTF-8
    andere Locales de_DE und de_DE@euro
    Art der Tastatur PC-Tastatur (AT- oder PS/2-Stecker)
    Wählen Sie das Tastaturlayout für die Tastatur aus: Deutsch
    Diese Module laden: <weiter>
    PC-Card-Dienste starten? <nein> Ich habe kein PCMCIA am Server
    Zu ladende Installationskomponenten: <weiter>
    Netzwerk automatisch mit DHCP einrichten? Ein Server sollte eine feste Adresse haben. Deshalb <nein>
    IP-Adresse: 192.168.2.105
    Netzmaske: 255.255.255.0
    Gateway: 192.168.2.1 (Das ist mein DSL Router.)
    Adresse des DNS-Servers: 192.168.2.1
    Sind diese Informationen richtig? <Ja>
    Rechnername: debian (Ich übernehme den Vorschlag.)
    Domainnahme: mickys.xx
    Partitionsmethode: Ich habe manuell eine 100 GB Partition für /root und den Rest für "daten" angelegt.
    Basierend auf Ihrem Land ist die Zeitzone Europe/Berlin. <weiter>
    Ist die Systemzeit auf UTC gesetzt? <nein>
    Shadow Passwörter benutzen? <Ja>
    root das Anmelden erlauben? <Ja>
    Soll ein normales Benutzerkonto erstellt werden? <nein> (Das mache ich später.)
    Zu installierender Kernel: Die angebotene Auswahl ist meistens richtig und kann übernommen werden.
    Einen Netzwerkspiegel verwenden? <Ja> (Man sollte dafür eine DSL Flatrate haben!)
    Protokoll für den Datei-Download: http
    Land des Debian-Archiv-Spiegelservers: Deutschland
    Debian-Archiv-Spiegelserver: ftp.de.debian.org
    HTTP-Proxy-Daten: <weiter> (Ich habe keinen Proxy und lasse das Feld leer.)
    >>Non-free<<-Software verwenden? <Ja> (Das ist Ansichtssache ;-))
    An der Paketverwendungserfassung teilnehmen? <Ja> (Auch das ist Ansichtssache.)
    Welche Software soll installiert werden? Alle Sternchen mit der Leertaste entfernen außer "Standardsystem" dann <weiter>
    Den GRUB-Bootloader in den Master Boot Record installieren? <Ja>
    GRUB-Passwort: leer lassen

    Danach kommt nur noch der Hinweis, daß das System neu gestartet wird.

    Damit sollte das Grundsystem laufen.

    Die Verwaltung des Systems soll auf der Linux-Konsole und über Webfrontend erfolgen. Damit es nicht all zu puristisch wird installiere ich mir gleich am Anfang den Midnight Commander:

    aptitude install mc

    Jetzt ist Zeit für ein erstes System-Upgrade:

    apt-get update && apt-get dist-upgrade

    Noch ein Hinweis bezüglich der nachfolgenden Installationen: Wenn die Installation nicht gerade am gleichen Tag erfolgt, ist es angebracht vor- und nachher ein apt-get update && apt-get dist-upgrade durchzuführen.

  3. NTP installieren

    Der Server soll den Windows-Clients als Zeitserver dienen. Außerdem will ich schwer nachvollziehbare Fehler durch falsche Uhrzeit vermeiden. Deshalb installiere ich gleich am Anfang den Zeitserver.

    aptitude install ntp

    Anschließend bearbeite ich die Serverliste in der Konfigurationsdatei /etc/ntp.conf (mit dem Editor des MC).
    Die Server - Liste erweitere ich mit deutschen Pool-Servern und dem Zeitserver meines Internetproviders:

    server 0.de.pool.ntp.org iburst
    server 1.de.pool.ntp.org iburst
    server 2.de.pool.ntp.org iburst
    server 3.de.pool.ntp.org iburst
    server ntp1.t-online.de iburst

    Notwendig ist es aber nicht, die Serverliste zu bearbeiten. Der Zeitdienst funktioniert auch ohne zusätzliche Einträge ausreichend genau.

    Um ein wenig Sicherheit gegen unbefugten Zugriff zu bekommen ändere ich in der Datei /etc/ntp.conf die Zeile:

    restrict 192.168.2.0 mask 255.255.255.0 nomodiy notrap

    Anschließend mit /etc/init.d/ntp restart NTP neu starten, damit die Änderungen wirksam werden. Das Ergebnis sieht man mit: "ntpq -p"

    Den Zeitserver muß man den Clients noch mitteilen. Interessante Artikel zum Thema findet man hier:
    http://www.heise.de/netze/Zeit-Abgleich--/artikel/91588/0
    http://www.heise.de/netze/Zeitdienst--/artikel/91609

  4. DHCP-Server Installation und Konfiguration

    Die Installation erfolgt mit:

    aptitude install dhcp3-server

    Danach ist die Konfigurationsdatei /etc/dhcp3/dhcpd.conf zu bearbeiten.

    Die Vorlage für die Konfiguration ist relativ weit unten zu finden. Ich habe die Datei so angepaßt, daß effektiv folgendes drin steht:

    authoritative;

    #A slightly different configuration for an internal subnet.
    subnet 192.168.2.0 netmask 255.255.255.0 {
      range 192.168.2.150 192.168.2.160;
      option domain-name-servers 192.168.2.1;
      option time-servers 192.168.2.105;
      option domain-name "mickys.xx";
      option routers 192.168.2.1;
      option broadcast-address 192.168.2.255;
      default-lease-time 3600;
      max-lease-time 86400;
    }

    Danach wird der DHCP-Server neu gestartet mit: /etc/init.d/dhcp3-server restart

  5. DNS-Server Installation und Konfiguration

    Die Installation erfolgt mit:

    aptitude install bind9 dnsutils

    Läßt man die Konfigurationsdatei /etc/bind/named.conf.options unbearbeitet, werden in dieser Standardeinstellung die DNS-Root-Server befragt. Das funktioniert problemlos, widerspricht aber dem hierarchische Aufbau des DNS. Die DNS-Server des ISP kann man zwar als Forwarder eintragen, ich habe aber festgestellt, dass diese nicht unbedingt die Schnellsten und Zuverlässigsten sein müssen. Die deutschen ISPs haben in letzter Zeit auch die Unsitte, unsere Politiker bei der Internetzensur zu unterstützen. Aus den genannten Gründen habe ich unterschiedliche DNS-Server als Forwarder mit dem Programm dig getestet und in die Datei eingetragen. Eine Liste möglicher Server findest man z.B. hier: http://www.stanar.de/

    Die Datei /etc/bind/named.conf.options habe ich wie folgt angepaßt:

    options {
    directory "/var/cache/bind";
    forward first;
    forwarders {
    87.118.100.175; 89.238.64.148; 8.8.8.8;
    };
    allow-query {localhost; localnets;};
    allow-transfer {none;};
    auth-nxdomain no; # conform to RFC1035
    listen-on-v6 { any; };
    };

    Die Datei /etc/bind/named.conf.local habe ich wie folgt angepaßt:

    zone "mickys.xx" {
    type master;
    file "/etc/bind/db.mickys";
    };
    zone "2.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.2";
    };

    Anlegen der Zonendateien - ich nehme die Datei db.empty als Kopiervorlage:

    cp /etc/bind/db.empty /etc/bind/db.mickys
    cp /etc/bind/db.empty /etc/bind/db.192.168.2

    Anpassen der Zonendateien:

    /etc/bind/db.mickys

    $TTL 86400 ; 1 day
    @ IN SOA debian.mickys.xx. root.localhost. (
    200801131 ; serial
    604800 ; refresh
    86400 ; retry
    2419200 ; expire
    86400 ; minimum
    )
    NS debian.mickys.xx.
    $ORIGIN mickys.xx.
    debian A 192.168.2.105
    localhost A 127.0.0.1
    loopback CNAME localhost

    /etc/bind/db.192.168.2

    $TTL 86400
    @ IN SOA debian.mickys.xx. root.debian.mickys.xx. (
    200801131
    604800
    86400
    2419200
    86400 )
    2.168.192.in-addr.arpa. IN NS debian.mickys.xx.
    105.2.168.192.in-addr.arpa. IN PTR debian.mickys.xx.

    Wichtig ist, bei jeder Änderung der Zonendateien, die "serial" hochzuzählen. Bind übernimmt sonst die Änderungen nicht, bringt aber auch keine Fehlermeldungen

    Die Datei /etc/resolv.conf legt die Suchreihenfolge fest und sieht bei mir so aus:

    order bind,hosts
    search mickys.xx
    nameserver 192.168.2.105

    In der Datei /etc/network/interfaces steht die Konfiguration der Netzwerkschnittstelle. Hier ist noch der DNS-Server-Eintrag zu ändern:

    auto lo
    iface lo inet loopback
    allow-hotplug eth0

    iface eth0 inet static
       address 192.168.2.105
       netmask 255.255.255.0
       network 192.168.2.0
       broadcast 192.168.2.255
       gateway 192.168.2.1
       dns-nameservers 192.168.2.105
       dns-search mickys.xx

    Damit ist die Konfiguration eines statischen DNS-Servers beendet.

  6. Dynamisches Aktualisieren des DNS-Servers durch den DHCP-Server

    Zuerst muß der rndc-key kopiert werden.

    cp /etc/bind/rndc.key /etc/rndc.conf

    Danach wird die Datei /etc/rndc.conf bearbeitet, sodass sie folgendes Aussehen hat (Der Key ist auf jedem System ein Anderer.):

    key "rndc-key" {
    algorithm hmac-md5;
    secret "6muLuyiqdEpRldTFtVLtAA==";
    };
    options {
    default-server localhost;
    default-key "rndc-key";
    };

    Nun binde ich den Schlüssel in die Datei /etc/bind/named.conf ein. Meine Datei hat danach folgendes Aussehen:

    include "/etc/bind/rndc.key";
    controls {
    inet 127.0.0.1 allow {localhost; } keys {rndc-key; };
    };
    include "/etc/bind/named.conf.options";
    zone "." {
    type hint;
    file "/etc/bind/db.root";
    };
    zone "localhost" {
    type master;
    file "/etc/bind/db.local";
    allow-update { key "rndc-key"; };
    };
    zone "127.in-addr.arpa" {
    type master;
    file "/etc/bind/db.127";
    allow-update { key "rndc-key"; };
    };
    zone "0.in-addr.arpa" {
    type master;
    file "/etc/bind/db.0";
    allow-update { key "rndc-key"; };
    };
    zone "255.in-addr.arpa" {
    type master;
    file "/etc/bind/db.255";
    allow-update { key "rndc-key"; };
    };
    include "/etc/bind/named.conf.local";

    Auch die Datei /etc/bind/named.conf.local ist anzupassen, die bei mir folgendes Aussehen hat:

    zone "mickys.xx" {
    type master;
    file "/etc/bind/db.mickys";
    allow-update { key "rndc-key"; };
    };
    zone "2.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.2";
    allow-update { key "rndc-key"; };
    };

    Weil der DHCP-Server den DNS-Server anfragen muß, ist auch die Datei /etc/dhcp3/dhcpd.conf anzupassen. Sie hat bei mir folgendes Aussehen:

    ddns-updates on;
    ddns-update-style interim;
    ddns-domainname "mickys.xx.";
    ignore client-updates;
    include "/etc/bind/rndc.key";
    authoritative;
    log-facility local7;
    zone mickys.xx. {
    primary 127.0.0.1 ;
    key rndc-key ;
    }
    zone 2.168.192.in-addr.arpa. {
    primary 127.0.0.1 ;
    key rndc-key ;
    }
    subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.150 192.168.2.160;
    option domain-name-servers 192.168.2.105;
    option time-servers 192.168.2.105;
    option domain-name "mickys.xx";
    option routers 192.168.2.1;
    option broadcast-address 192.168.2.255;
    default-lease-time 3600;
    max-lease-time 86400;
    }

    Für das Verzeichnis /etc/bind sind dann noch die Rechte anzupassen:

    chmod g+w /etc/bind

    Jetzt noch den DNS- und den DHCP-Server neu starten und alles sollte funktionieren:

    /etc/init.d/dhcp3-server restart
    /etc/init.d/bind9 restart

    Fehlermeldungen findet man in der Datei /var/log/syslog. Wenn alles funktioniert, werden nach einer Weile im Verzeichnis /etc/bind automatisch Journaldateien angelegt, bei mir die db.mickys.jnl und die db.192.168.2.jnl. Nach Bearbeiten der Zonendateien ist die Journaldatei zu löschen. Bind bringt sonst Fehlermeldungen, die im syslog zu finden sind. Die Journaldatei wird automatisch wieder angelegt.

    Besser ist es, statt den ganzen DNS-Server neu zu starten, nur die neue Konfiguration einzulesen. Das erreicht man mit:

    rndc reload

    Damit ist die Konfiguration von DNS und DHCP abgeschlossen.

  7. Dateiserver Samba installieren und konfigurieren

    Quellen, die ich verwendet habe:
    http://wiki.ubuntuusers.de/Samba_Server
    http://wiki.ubuntuusers.de/Samba_PDC
    http://gertranssmb3.berlios.de/output/
    c't 8/95 "c't-Debian-Server: Samba und CUPS"

    Die Installation erfolgt mit:

    aptitude install samba

    Arbeitsgruppen-/Domain-Name festlegen: bei mir mickys.xx

    Bei mir soll es eine gemeinsame Gruppe "mickys" geben, die auf eine gemeinsame Dateiablage, bzw. Freigabe zugreifen soll.

    Die Gruppe lege ich an mit

    groupadd mickys

    Jetzt lege ich die Benutzer an:

    adduser andreas

    Der Gruppe mickys den User andreas hinzufügen:

    addgroup andreas mickys

    Verzeichnis und Freigabe anlegen:

    Ich lege das Verzeichnis /home/public für die gemeinsame Freigabe an. Das geht am einfachsten mit dem Midnight Commander. Oder mit:

    mkdir /home/public

    Der Gruppe mickys das Verzeichnis übereignen:

    chgrp mickys /home/public

    Rechte auf dem Verzeichnis ändern:

    chmod 770 /home/public
    chmod g+sw /home/public

    Samba Konfigurationsdatei /etc/samba/smb.conf anpassen

    Im Abschnitt [homes] muß

    "writable = yes"

    gesetzt werden. Sonst kann auf das persönliche Verzeichnis nicht geschrieben werden.

    Neue Freigabe einrichten durch hinzufügen des folgenden Abschnitts z.B. am Ende der Datei:

    [Public]
    comment = gemeinsame Ablage für Mickys
    writeable = yes
    path = /home/public
    valid users = @ mickys
    force directory mode = 660
    force create mode = 660

    Um das DVD-Laufwerk frei zugeben, sind nur ein paar Kommentarzeichen zu entfernen:

    [cdrom]
    comment = Samba server's CD-ROM
    writable = no
    locking = no
    path = /cdrom
    public = yes
    preexec = /bin/mount /cdrom
    postexec = /bin/umount /cdrom

    Wer seine Samba-Freigaben in der Windows-Netzwerkumgebung "sehen will", kann noch folgende Einträge vornehmen:

    os level = 100
    preferred master = yes
    domain master = yes
    local master = yes

    Notwendig ist das nicht, beschleunigt aber das Browsing. Ich habe diese Einträge weg gelassen und mir statt dessen die Samba-Freigaben als Netzlaufwerke verbunden.

    Damit ist die Konfiguration von Samba erst einmal erledigt. Die Datei kann gespeichert und geschlossen werden.

    Testen ob die Konfigurationsdatei in Ordnung ist mit:

    testparm -v

    Samba Benutzerpasswörter vergeben (Auf der Linuxconsole):

    smbpasswd -a andreas

    Samba neu starten:

    /etc/init.d/samba restart

    Zum Test kann man jetzt in der Adreßzeile des Windows-Dateiexplorers \\debian eingeben. Es sollten die Freigaben zu sehen sein.

    Samba als Domaincontroller

    Ob man in einem Heimnetz einen Domänencontroller installiert ist Ansichtssache. Eigentlich muß es nicht sein.

    Die Datei /etc/samba/smb.conf ist zu editieren:

    security = user
    ;invalid users = root
    logon path =
    os level = 100
    preferred master = yes
    domain master = yes
    local master = yes
    domain logons = yes

    [netlogon]
    comment = Network Logon Service
    path = /home/samba/netlogon
    guest ok = yes
    writable = no
    share modes = no

    Der User root muß sich anmelden können, um PCs in die Domäne aufzunehmen.
    Hinter "logon path =" gebe ich keinen Pfad an, weil mein Notebook keine servergespeicherten Benutzerprofile haben soll.

    Danach gehts auf der Konsole weiter:

    smbpasswd -a root
    useradd -s /bin/false nb$
    smbpasswd -a -m nb$
    mkdir -p /home/samba/netlogon

    Erläuterung:
    Dem Benutzer root wird ein Samba-Passwort vergeben.
    Das Maschinenkonto für mein Notebook "nb" wird angelegt.
    Das Maschinenkonto "nb" wird für Samba aktiviert und bekommt ein Passwort.
    Das Netlogon-Verzeichnis wird angelegt.

    Nun kann das Notebook "nb" der Domäne hinzugefügt werden. Unter Win.XP Prof. über die Eigenschaften des Arbeitsplatzes -> Computername -> ändern. Das klappte übrigens auch über WLAN.

  8. Druckserver CUPS einrichten

    Die Installation erfolgt mit:

    aptitude install cupsys cupsys-bsd cups-driver-gutenprint foomatic-filters

    CUPS-Konfigurationsdatei /etc/cups/cupsd.conf bearbeiten:

    Listen localhost:631
    muß geändert werden in
    Listen 192.168.2.105:631
    <Location />
    # ergänzen mit folgender Zeile:
    Allow 192.168.2.0/24
    </Location>
    <Location /admin>
    # ergänzen mit folgender Zeile:
    Allow 192.168.2.0/24
    </Location>
    <Location /admin/conf>
    # ergänzen mit folgender Zeile:
    Allow 192.168.2.0/24
    </Location>

    Nach dem Speichern der Datei muß diese neu geladen werden:

    /etc/init.d/cups reload

    Jetzt kann ich in Firefox die CUPS Seite aufrufen mit: http://192.168.2.105:631

    Bei früheren Debian-Releases gab es an dieser stelle ein Problem. Wenn eine Fehlermeldung kommen sollte, dann in der Browseradresszeile die Adresse anpassen:

    https://debian:631/admin/

    Das angezeigte Zertifikat akzeptiere ich natürlich.

    Unter "Neue Drucker gefunden" wird bereits mein Drucker angezeigt. Ich wähle "Diesen Drucker hinzufügen". In der nachfolgenden Druckerliste wird mein Drucker nicht mehr zur Auswahl angeboten. Da ich keinen kompatiblen, sondern den richtigen Druckertreiber möchte, habe ich mir aus dem Internet die passende PPD Datei geladen und füge diese hinzu. Im folgenden Konfigurationsmenü habe ich noch das Papierformat auf A4 eingestellt. Damit ist der Drucker auf der Serverseite eingerichtet.

    Jetzt ist wieder die Samba Konfigurationsdatei /etc/samba/smb.conf anzupassen.

    Es ist das Kommentarzeichen zu entfernen vor:

    printing = cups

    Nach einem

    /etc/init.d/samba restart

    steht der Drucker im Netz zur Verfügung.

    Wenn beim Verbinden mit dem Drucker die Meldung kommt, man hätte keinen Zugriff mangels erforderlicher Rechte, dann sind damit die Windows-Rechte gemeint, die nicht ausreichen einen neuen Drucker einzurichten. Dem kann man mit temporären Admin-Rechten abhelfen. Ggf. ist dann noch der Druckertreiber, durch Angabe des Installationspfades, zu installieren.

    Nach Einrichtung des Druckers ist der Zugang zum CUPS-Webinterface nicht mehr erforderlich. Aus Gründen der Sicherheit habe ich deshalb den Eintrag

    Listen localhost:631

    wieder hergestellt.

    Wenn man von Windows aus auf einen, über Samba freigegebenen Drucker drucken will, ist dabei eine Authentifizierung erforderlich. Hat man vorher mindestens ein Netzlaufwerk verbunden, ist die Authentifizierung schon erfolgt und somit kein Problem.

    Drucken geht aber auch ohne Samba, über das Internet Printing Protocol (ipp). Dazu ist bei der Druckereinrichtung unter Windows die URL anzugeben. Bei mir:

    https://debian:631/printers/Brother

    Bei meinem Linux-Client habe ich die Adresse so eingegeben:

    ipp://debian:631/printers/Brother

    Nach einer Authentifizierung fragt Cups an dieser Stelle nicht.

  9. Postfix installieren

    Standardmäßig installiert Debian den Mailserver Exim. Ich mag dieses Programm nicht sonderlich und ersetze es deshalb durch Postfix. Das erledige ich vor der Installation von MySQL, weil sonst bei dessen Installation diverse exim-Pakete mit installiert würden.

    aptitude install postfix

    Bei der Installation werden ein paar Fragen gestellt, die ich wie folgt beantwortet habe:

    Postfix Configuration
    Allgemeine Art der Konfiguration
    "Internet mit Smarthost"
    Wie lautet der E-Mail-Name Ihres Systems?
    Vorschlag mit ENTER bestätigt.
    Ihr SMTP Relay-Server: Vorschlag mit ENTER bestätigt.

    Die weitere Konfiguration erfolgt später, wenn es um die Konfiguration des Mailservers geht.

  10. MySQL-Server installieren

    aptitude install mysql-server-5.0 mysql-client-5.0
    /usr/bin/mysqladmin -u root password geheim

    DerMySQL-Server ist in der Standardkonfiguration nur von localhost erreichbar, also z.B. für lokale Webanwendungen.

  11. Apache2 mit PHP5 installieren

    Installation

    Die Installation des Apache-Webservers und PHP5 erfolgt mit:

    aptitude install apache2-mpm-prefork libapache2-mod-php5 php-pear php5-mysql

    DefaultCharset festlegen, damit z.B. Umlaute richtig dargestellt werden:

    In der Datei /etc/apache2/apache2.conf wird das Kommentarzeichen in Zeile 446 entfernt, vor:

    AddDefaultCharset ISO-8859-1

    Server Side Includes aktivieren:

    Damit SSI funktioniert muß man lediglich einen symbolischen Link setzen:

    cd /etc/apache2/mods-enabled
    ln -s ../mods-available/include.load include.load

    Die Datei, die als SSI-Datei ausgeführt werden soll, also die index.shtml, muß das Recht als ausführbare Datei erhalten (chmod +x index.shtml).

    Damit die index.shtml auch als index-Datei ausgeführt wird, ist die Datei /etc/apache2/mods-available/dir.conf mit "index.shtml" zu ergänzen.

    Eine Website anlegen:

    Zum Test lege ich die Website "testsite" an:

  12. Email-Server Installieren und Konfigurieren

    Die Howtos folgender Quellen waren mir sehr hilfreich:
    http://wiki.ubuntuusers.de/Postfix
    http://www.howtoforge.de/howto/das-perfekte-setup-debian-etch-40/5/
    c't 8/2004 "Transportsicherung"
    http://holl.co.at/howto-email/

    Postfix konfigurieren

    In der Datei /etc/aliases stehen die Alias-Namen und deren Zuweisung:

    postmaster: andreas
    root: andreas

    Die Änderungen an dieser Datei werden wirksam, nachdem man sie mit

    newaliases

    in die Datenbank geschrieben und mit

    postfix reload

    in Postfix neu eigelesen hat.

    Die Postfix-Konfigurationsdatei /etc/postfix/main.cf ändere ich, sodass folgendes drin steht:

    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    append_dot_mydomain = no

    # Authentifizierung beim ISP
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl/smtp_auth
    smtp_sasl_security_options = noanonymous
    # Verschlüsselte Übertragung zum ISP:
    smtp_tls_security_level = encrypt
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    smtp_tsl_CApath=/etc/ssl/certs

    myhostname = debian.mickys.xx
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = debian.mickys.xx, localhost.mickys.xx, localhost, linux-home-server.de, $mydomain
    relayhost = Name_des_smtp-Servers_des_Providers
    mynetworks = 127.0.0.0/8, 192.168.2.0/24
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all

    Mein Internet-Service-Provider verlangt eine Absenderauthentifizierung für das Versenden von Emails. Dafür ist SASL zuständig, das wie folgt installiert wird:

    aptitude install libsasl2-modules

    Als nächstes wird die Datei /etc/postfix/sasl/smtp_auth angelegt:

    touch /etc/postfix/sasl/smtp_auth

    Der Dateiinhalt ist sinngemäß:

    SMTP-Server Benutzername:Paßwort
    z.B.:
    mailout.example.com Benutzername:Geheim

    Der Dateiinhalt muß jetzt noch in eine Datenbankdatei geschrieben werden. Das geschieht mit:

    postmap /etc/postfix/sasl/smtp_auth

    Dadurch sollte die folgende Datei angelegt werden: /etc/postfix/sasl/smtp_auth.db

    Nach einem Neustart von Postfix (/etc/init.d/postfix restart) funktioniert der Emailversand.

    Emails mit fetchmail abholen

    Die Installation erfolgt mit:

    aptitude install fetchmail

    Die Konfigurationsdatei erzeuge ich mit:

    touch /etc/fetchmailrc

    und editiere diese Datei wie folgt (POP3-Server, Benutzername und das Paßwort sind natürlich zu ersetzen.):

    set daemon 300
    set syslog
    poll POP3-Server with proto POP3 auth password
    user "Benutzername" there with password "geheim" is andreas here options sslproto '' fetchall

    Wenn man seine Emails über eine verschlüsselte Verbindung abholen will, vorausgesetzt, der Provider unterstützt das, sollte folgendes in der Konfigurationsdatei stehen:

    set daemon 300
    set syslog
    poll POP3-Server with proto POP3 auth password
    user "Benutzername" there with password "geheim" is andreas here options ssl fetchall

    Damit fetchmail als Dienst arbeitet und automatisch beim Systemstart gestartet wird, ist die Datei /etc/default/fetchmail anzupassen:

    START_DAEMON=yes

    Mit /etc/init.d/fetchmail start sollte alles laufen.

    SASL-Authentifizierung der smtp-Clients gegenüber Postfix

    Um ein offenes Relais zu vermeiden, also mein Postfix-Server Emails von jedem beliebigen Client Mails annimmt, benötige ich eine Absenderauthentifizierung. Die gewählte Methode "PAM" authentifiziert gegen die Benutzerdatenbank des Linux-Systems.

    Zuerst ist die Installation eines weiteren Pakets erforderlich:

    aptitude install sasl2-bin

    Danach gibt es die Konfigurationsdatei /etc/default/saslauthd, die wie folgt anzupassen ist:

    START=yes
    MECHANISMS="pam"
    MECH_OPTIONS=""
    THREADS=5
    OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

    Das unter Options genannte Verzeichnis muß auch existieren und wird deshalb angelegt:

    mkdir -p /var/spool/postfix/var/run/saslauthd

    Ich weiß nicht ob das noch aktuell ist, aber ich habe noch folgende Datei erstellt:

    touch /etc/postfix/sasl/smtpd.conf

    mit folgendem Inhalt:

    pwcheck_method: saslauthd
    mech_list: plain login

    Die Datei /etc/postfix/main.cf wurde wie folgt angepaßt:

    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    append_dot_mydomain = no

    # Authentifizierung beim ISP
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl/smtp_auth
    smtp_sasl_security_options = noanonymous

    # Verschlüsselte Übertragung zum ISP:
    smtp_tls_security_level = encrypt
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    smtp_tsl_CApath=/etc/ssl/certs

    # Authentifizierung der smtp-Clients beim Postfix-Server
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain =
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_maps, reject_unauth_destination, permit_auth_destination

    myhostname = debian.mickys.xx
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = debian.mickys.xx, localhost.mickys.xx, localhost, linux-home-server.de, $mydomain
    relayhost = SMTP-Server beim ISP
    mynetworks = 127.0.0.0/8, 192.168.2.0/24
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    sender_canonical_maps = hash:/etc/postfix/sender_canonical
    home_mailbox = mails/

    Nach einem

    /etc/init.d/saslauthd restart
    /etc/init.d/postfix restart

    funktionierte bei mir die sasl-Authentifizierung meines Mail-Clients gegenüber dem Postfix-Server.

    IMAP-Server mit Dovecot

    Die Installation des Dovecot-IMAP-Servers erfolgt mit:

    aptitude install dovecot-imapd

    Danach findet man die Konfigurationsdatei /etc/dovecot/dovecot.conf, die bei mir folgenden Inhalt bekam:

    base_dir = /var/run/dovecot/
    protocols = imap imaps
    listen = *
    disable_plaintext_auth = yes
    log_timestamp = "%Y-%m-%d %H:%M:%S "
    ssl_cert_file = /etc/ssl/certs/dovecot.pem
    ssl_key_file = /etc/ssl/private/dovecot.pem
    login_dir = /var/run/dovecot/login
    login_user = dovecot
    mail_location = maildir:%h/mails
    protocol imap {
    }
    auth default {
    mechanisms = plain
    passdb pam {
    }
    userdb passwd {
    }
    user = root
    }
    dict {
    }
    plugin {
    }

    Rechte anpassen:

    chmod 0750 /var/run/dovecot

    Dovecot startet man neu mit /etc/init.d/dovecot restart.

    TLS Verschlüsselung zwischen Postfix und den SMTP-Clients

    Bis jetzt habe ich eine verschlüsselte Verbindung zwischen IMAP-Clients und IMAP-Server Dovecot. Versende ich Emails vom SMTP-Client (z.B. einem Windows XP-PC) zum Debian-Postfix-Server, werden Benutzername und Kennwort unverschlüsselt übertragen. Das wird jetzt geändert.

    Ich begebe mich in das Verzeichnis /etc/ssl/private.
    Als nächstes wird der private Schlüssel smtpd.key erzeugt:

    openssl genrsa -out smtpd.key 2048

    Den CSR (Certificate Signing Request) erstellen:

    openssl req -new -key smtpd.key -out smtpd.csr

    Hierbei wird man nach den Zertifizierungsinformationen gefragt, die man alle, bis auf den "Common Name", ohne Eingabe mit Enter bestätigen kann. Der "Common Name" ist der FQDN des eigenen Postfix-Servers, bei mir debian.mickys.xx.

    Das Zertifikat erstellen:

    openssl x509 -req -days 4312 -in smtpd.csr -out smtpd.crt -signkey smtpd.key

    Nun ist Postfix für die Verwendung von TLS zu konfigurieren. Die Datei /etc/postfix/main.cf habe ich wie folgt geändert:

    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    append_dot_mydomain = no

    # TLS parameters
    smtpd_tls_cert_file=/etc/ssl/private/smtpd.crt
    smtpd_tls_key_file=/etc/ssl/private/smtpd.key
    smtpd_use_tls = yes
    smtpd_enforce_tls = no
    smtpd_tls_auth_only = yes
    smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache

    # Authentifizierung beim ISP
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl/smtp_auth
    smtp_sasl_security_options = noanonymous
    # Verschlüsselte Übertragung zum ISP:
    smtp_tls_security_level = encrypt
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    smtp_tsl_CApath=/etc/ssl/certs

    # Authentifizierung der smtp-Clients beim Postfix-Server
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain =
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_maps, reject_unauth_destination, permit_auth_destination
    myhostname = debian.mickys.xx
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = debian.mickys.xx, localhost.mickys.xx, localhost, linux-home-server.de, $mydomain
    relayhost = SMTP-Server beim ISP
    mynetworks = 127.0.0.0/8, 192.168.2.0/24
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    sender_canonical_maps = hash:/etc/postfix/sender_canonical
    home_mailbox = mails/

    Nach den Änderungen an den Konfigurationsdateien sind Postfix und fetchmail neu zu starten.

    An dieser Stelle sollte eigentlich alles Funktionieren - tut es aber nicht, weshalb ich bei der Neuinstallation fast verzweifelte. Deshalb hier den Workaround:

    auf der Konsole:
    dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
    adduser postfix sasl
    /etc/init.d/sasauthd restart
    /etc/init.d/postfix restart

    Und hier sind noch die Quellen:
    http://forum.ovh.de/showthread.php?t=5897
    http://zockertown.de/s9y/index.php?/archives/1277-Server-Upgrade-von-Debian-Etch-zu-Lenny-kein-Mailversand-mehr.html

  13. Virenscanner installieren

    Nachdem ich mich einige Zeit mit den Fehlalarmen von clamav herumgeärgert hatte, installierte ich mir Antivir von Avira.
    Eine gute Installationsanleitung findet man hier: http://wiki.ubuntu-forum.de/index.php/AntiVir.
    Noch ein paar Links und Infos:

  14. SSH-Server für die Remoteadministration installieren

    Für die Fernwartung des Servers installiere ich mir einen OpenSSH-Server. Tastatur und Maus sind damit nicht mehr notwendig, können aber bei Bedarf über USB angeschlossen werden.
    Die Installation erfolgt mit:

    aptitude install openssh-server

    Das war's schon. Ab sofort kann ich mich von Windows aus mit dem Programm "Putty" zum Server verbinden.
    Von meinem Linux-PC aus geht das mit Boardmitteln auf der Konsole:

    rlogin -l andreas debian
    oder
    ssh -l andreas debian

    Um die Sicherheit etwas zu erhöhen, habe ich noch die folgende Konfigurationsdatei bearbeitet:

    /etc/ssh/sshd_config

    Die Anmeldung mit dem User "root" ist ein generelles Risiko. Deshalb verbiete ich ihm den Fernzugriff und schränke die zugelassenen User auf "andreas" ein. Ausserdem lasse nur eine gleichzeitige Verbindung zu:

    PertmitRootLogin no
    AllowUsers andreas
    MaxStartups 1

    Das Programm "denyhosts" durchsucht in regelmässigen Abständen die Logdatei /var/log/auth.log um Einbruchsversuche aufzuspüren. Die so ermittelten Hosts trägt es in die Datei /etc/host.deny ein. Ich hab es bei den Standardeinstellungen belassen. Die Installation erfolgt mit:

    aptitude install denyhosts

    Für meinen Linux-Heim-Server, der nicht direkt am Internet angeschlossen ist, reichen diese Sicherheitsmaßnahmen aus.

    Hier noch etwas Literatur:
    http://wiki.ubuntuusers.de/Baustelle/DenyHosts
    http://wiki.ubuntuusers.de/SSH
    http://wiki.debianforum.de/SSH_absichern
    http://wiki.ubuntuusers.de/Baustelle/DenyHosts
    http://www.heise.de/security/artikel/DenyHosts-271028.html

  15. Administration über Web-Frontend: Webmin installieren

    Die Installation ist auf der Webmin-Website gut beschrieben.

    Zuerst installiert man sich den Sicherheits-Schlüssel:

    wget http://www.webmin.com/jcameron-key.asc
    apt-key add jcameron-key.asc

    Danach wird die Datei /etc/apt/sources.list mit folgender Zeile erweitert:

    deb http://download.webmin.com/download/repository sarge contrib

    Als Letztes gibt man auf der Konsole folgendes ein:

    apt-get update
    apt-get install webmin

    Der Aufruf von Webmin erfolgt im Webbrowser mit: https://debian:10000/

  16. Die Datensicherung

    Ich habe lange nach einer Lösung gesucht, bis ich in einer alten Ausgabe der c't (7/2006, S. 212) auf das Programm "dirvish" kam.
    Dirvish benutzt rsync um Verzeichnisse zu synchronisieren. Bei bereits vorhandenen Dateien werden diese nicht erneut kopiert, sondern Hardlinks angelegt. Das hat den Vorteil, dass das Backup schnell und platzsparend erfolgt. Die mysql-Datenbank wird mit dem Programm "mysqldump" gesichert.
    Als Backup-Medium verwende ich eine, mit Reiserfs formatierte, 500 GB - Festplatte, die ich zusätzlich in den PC eingebaut habe. Die Backup-Platte wird beim Systemstart ro gemountet und über hdparm nach 5 Minuten Inaktivität abgeschaltet. Der Zeitdienst "anacron" startet einmal täglich das Programm. Das Dateisystem Reiserfs nutze ich, weil es mit kleinen Dateien, wie z.B. Hardlinks, sehr platzsparend umgeht.

    Die Installation erfolgt mit:

    aptitude install dirvish

    Die globale Konfiguration von Dirvish befindet sich in /etc/dirvish/master.conf.

    # /etc/dirvish/master.conf

    bank:
       /srv/backup

    xdev: 1

    index: gzip

    image-default: %Y%m%d-%H%M

    # checksum: 1

    summary: long

    exclude:
       lost+found/
       core
       
    Runall:
       home
       daten
       etc
       webserver

    expire-default: +7 days

    expire-rule:
    #  MIN  HR  DOM  MON  DOW  STRFTIME_FMT
        *   *    *    *    *    +7 days
        *   *    *    *    7    +1 month
        *   *    1    *    *    +1 year

    Das globale Backupverzeichnis, die sogenannte "Bank", ist /srv/backup.
    Darin werden die "Vaults" (Tresore) angelegt, die unter "Runall" aufgeführt sind.
    "expire" bestimmt den Zeitplan, nachdem ein Backup verfällt.

    Meine Backupstrategie:
    Die täglichen Backups werden 1 Woche aufgehoben.
    Die Sicherung an jedem letzten Tag der Woche wird einen Monat aufgehoben.
    Das Backup von jedem 1. des Monats wird 1 Jahr aufgehoben.

    Im Dateisystem habe ich die folgenden Verzeichnisse (Tresore) angelegt:

    /srv/backup/daten
    /srv/backup/etc
    /srv/backup/home
    /srv/backup/webserver

    In jedem dieser Tresore muss nun ein Verzeichnis /dirvish angelegt werden und darin eine Datei default.conf. Für den Tresor "etc" sieht bei mir so aus:

    # /srv/backup/etc/dirvish/default.conf
    client: debian
    tree: /etc
    exclude:
       *.bak
       *~
       *.tmp
       *.TMP
       *.temp
       *.jnl

    "client" ist der Hostname des Servers
    "tree" ist das zu sichernde Verzeichnis
    "exclude" schließt Dateien aus der Sicherung aus.

    Nun erfolgt die Erstinitialisierung, die gleichzeitig ein Vollbackup ist, auf der Konsole:

    dirvish --init -vault daten
    dirvish --init -vault etc
    dirvish --init -vault home
    dirvish --init -vault webserver

    Um das Backup zu automatisieren wird jetzt "anacron" installiert:

    aptitude install anacron

    Debian hat bereits die Datei /etc/cron.d/dirvish angelegt. Da mein Server nur zu unregelmäßigen Zeiten läuft, macht ein regelmäßiger Zeitplan keinen Sinn. Die Datei habe ich deshalb entfernt.

    Das Backupscript /etc/dirvish/dirvish-cronjob
    habe ich nach /etc/cron.daily/dirvish-cronjob kopiert.
    Damit wird die Datensicherung einmal täglich ausgeführt. Vorher muss das Script aber noch angepaßt werden. Am Anfang wird die Festplatte rw gemountet und am Schluß wieder ro gemountet. Außerdem rufe ich damit das Backupscript zur Datenbanksicherung auf.

    #! /bin/sh
    # /etc/cron.daily/dirvish-cronjob
    # daily cron job for the dirvish package
    #
    if [ ! -x /usr/sbin/dirvish-expire ]; then exit 0; fi
    if [ ! -s /etc/dirvish/master.conf ]; then exit 0; fi

    mount -o remount,rw /dev/sdb1 /srv/backup

    ....

    # umount /srv/backup || rc=$?

    # Datenbank-Backup:
    /usr/local/bin/mysql-backup.sh

    mount -o remount,ro /dev/sdb1 /srv/backup || rc=$?
    exit $rc

    Sichern der mysql-Datenbank

    Die Sicherung der mysql-Datenbank wird von der Datei /usr/local/bin/mysql-backup.sh ausgeführt. Das Script habe ich aus der c't (7/2006, S. 212) und für mich angepasst. Angelegt wird die Datei mit:

    touch /usr/local/bin/mysql-backup.sh
    chmod +x /usr/local/bin/mysql-backup.sh

    Das Sicherungsverzeichnis muss angelegt werden:

    mkdir /srv/backup/database

    Und hier der Code des Backupscripts:

    # mysql-backup.sh
    BACKUP_DIR=${1:-/srv/backup/database} # Directory fuer Backups
    EXPIRETIME=7 # Wie viele Tage aufheben
    DATE=`date "+%Y%m%d"`
    # Sicherstellen, dass Dir. existiert
    if [ ! -d $BACKUP_DIR ]; then
    mkdir -p $BACKUP_DIR
    chown 0700 $BACKUP_DIR
    fi
    # Neue Backups erstellen
    for i in /var/lib/mysql/*/; do
    dbname=`basename "$i"`
    mysqldump --user=root --password=xxxx "$dbname" | gzip > $BACKUP_DIR/$dbname.$DATE.gz
    done
    # Alte Backups loeschen
    find $BACKUP_DIR -mtime +${EXPIRETIME} -exec rm {} \;

    Das Backup-Script ist danach ausführbar zu machen:

    chmod +x /usr/local/bin/mysql-backup.sh

    Abschalten der Backup-Platte

    Damit die Festplatte bei Inaktivität abgeschaltet wird, installiere ich das Programm "hdparm":

    aptitude install hdparm

    Die Datei /etc/rc.local passe ich wie folgt an:

    #!/bin/sh -e
    hdparm -S 60 /dev/sdb
    exit 0

    Weitere Informationen zum Backup mit Dirvish und mysqldump findet man z.B. unter den folgenden Links:
    http://www.dirvish.org/
    http://www.backenhoernchen.de/dokuwiki/computer/howtos/backup_howto
    http://wiki.ipfire.org/de/addons/dirvish/start
    http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html
    http://wiki.debianforum.de/SQLDatenbankBackup

Zum Impressum gehts hier entlang: Impressum

Meinungen, Kritiken und Fehlermeldungen bitte an: bild