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.
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
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.
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.
"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.
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
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
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.
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.
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.
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.
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.
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.
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.
Die Installation des Apache-Webservers und PHP5 erfolgt mit:
aptitude install apache2-mpm-prefork libapache2-mod-php5 php-pear
php5-mysql
In der Datei /etc/apache2/apache2.conf wird das Kommentarzeichen
in Zeile 446 entfernt, vor:
AddDefaultCharset ISO-8859-1
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.
Zum Test lege ich die Website "testsite" an:
Im DNS-Server muß ich für die Namensauflösung sorgen.
Dafür bearbeite ich die Datei /etc/bind/db.mickys und
ergänze sie mit dem Eintrag:
testsite A 192.168.2.105
Die reverse-Namensauflösung erfolgt über die Datei /etc/bind/db.192.168.2,
die ich um folgenden Eintrag erweitere:
105.2.168.192.in-addr.arpa. IN PTR testsite.
Damit die Änderungen wirksam werden ist ein Neustart des DNS-Servers erforderlich.
Die Apache-Konfigurationsdatei /etc/apache2/sites-available/default
ergänze ich am Ende der Datei mit dem folgenden Eintrag:
<VirtualHost *>
DocumentRoot /var/www/testsite
ServerName testsite
</VirtualHost>
Für den Funktionstest reicht diese einfache Konfiguration aus.
Jetzt erstelle ich das Verzeichnis /var/www/testsite :
mkdir /var/www/testsite
Das geht noch einfacher mit dem MC.
Im eben erstellten Verzeichnis erstelle ich zwei Test-Dateien:
touch /var/www/testsite/index.html
touch /var/www/testsite/info.php
In die Datei index.html kommt erst mal ein beliebiger Text.
Die Datei info.php wird jetzt noch mit etwas Code gefüllt:
<?php
phpinfo();
?>
Damit die Dateien angezeigt werden können, müssen noch die Dateirechte angepaßt werden:
chmod 0644 /var/www/testsite/*
Nach einem Neustart des Apache-Servers erfolgt der Test, indem ich im
Webbrowser meines PCs die Testsite aufrufe. Die index.html
sollte automatisch angezeigt werden, nachdem in der Browseradressleiste
"testsite" aufgerufen wurde. Mit testsite/info.php
bekomme ich die PHP-Konfiguration zu sehen und damit die Bestätigung,
daß PHP funktioniert.
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/
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.
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.
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.
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.
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
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:
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
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/
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
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
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: ![]()