Grundschulserver: Unterschied zwischen den Versionen
Lukas (Diskussion | Beiträge) K IServ |
Lukas (Diskussion | Beiträge) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 5: | Zeile 5: | ||
__TOC__ | __TOC__ | ||
== Grundsystem == | == Grundsystem == | ||
Als Grundsystem haben wir uns für [http://www.ubuntu.com/download/server Ubuntu Server] 12.04 LTS entschieden, da Long-Time-Support-Distributionen (=Lang-Zeit-Unterstützte-Distributionen; kurz: LTS) lange mit Sicherheits-Patches versehen werden und man so nicht alle 6 Monate einen kompletten Versions-Sprung vornehmen muss. Das System läuft auf einem normalen Dell-Rechner, der mit einer zusätzlichen Netzwerkkarte ausgestattet wurde. Bei der Installation wurde gleich der SSH-Server und der DNS-Server mit installiert, damit man den Server auch aus der Ferne warten kann. Die Frage, ob Aktualisierungen automatisch installiert werden sollen, beantworten wir mit "Nur Sicherheitsaktualisierungen automatisch installieren". Dann müssen wir uns zwar selber um die Aktualisierung kümmern, haben aber mehr Kontrolle darüber was und vor allem wann es installiert wird | Als Grundsystem haben wir uns für [http://www.ubuntu.com/download/server Ubuntu Server] 12.04 LTS entschieden, da Long-Time-Support-Distributionen (=Lang-Zeit-Unterstützte-Distributionen; kurz: LTS) lange mit Sicherheits-Patches versehen werden und man so nicht alle 6 Monate einen kompletten Versions-Sprung vornehmen muss. Das System läuft auf einem normalen Dell-Rechner, der mit einer zusätzlichen Netzwerkkarte ausgestattet wurde. Bei der Installation wurde gleich der SSH-Server und der DNS-Server mit installiert, damit man den Server auch aus der Ferne warten kann. Die Frage, ob Aktualisierungen automatisch installiert werden sollen, beantworten wir mit "Nur Sicherheitsaktualisierungen automatisch installieren". Dann müssen wir uns zwar selber um die Aktualisierung kümmern, haben aber mehr Kontrolle darüber was und vor allem wann es installiert wird. | ||
== Aufgaben == | == Aufgaben == | ||
Zeile 215: | Zeile 215: | ||
== UpDate Oktober == | == UpDate Oktober == | ||
Wir haben den Server nochmal neu aufgesetzt. Diesmal auf | Wir haben den Server nochmal neu aufgesetzt. Diesmal auf einem neueren, schnelleren Server. Mit der obenstehenden Anleitung hat das alles wunderbar geklappt. | ||
[[Kategorie:MER]] | [[Kategorie:MER]] |
Aktuelle Version vom 2. Mai 2017, 09:33 Uhr
Im folgenden Artikel wird beschrieben, wie ein Netz in einer Grundschule beispielhaft eingerichtet werden kann. Die Beispielschule in Hamburg besteht aus 11 Gebäuden, die im Zuge einer Vollvernetzung von Dataport vollvernetzt wurden und jetzt über ein 100MBit-Netz verfügen.
Diese Anleitung stellt eine grundlegende und sehr kostengünstige Möglichkeit zum Betrieb eines Schulservers dar. Eine sehr gute Alternative ist der Schulserver IServ, der über die hier genannten Möglichkeiten hinaus explizit für Schulen entwickelt wurde und dementsprechend viele auf Schule zugeschnittene Möglichkeiten bietet. Auch wir haben den Server nun durch IServ ersetzt.
Grundsystem
Als Grundsystem haben wir uns für Ubuntu Server 12.04 LTS entschieden, da Long-Time-Support-Distributionen (=Lang-Zeit-Unterstützte-Distributionen; kurz: LTS) lange mit Sicherheits-Patches versehen werden und man so nicht alle 6 Monate einen kompletten Versions-Sprung vornehmen muss. Das System läuft auf einem normalen Dell-Rechner, der mit einer zusätzlichen Netzwerkkarte ausgestattet wurde. Bei der Installation wurde gleich der SSH-Server und der DNS-Server mit installiert, damit man den Server auch aus der Ferne warten kann. Die Frage, ob Aktualisierungen automatisch installiert werden sollen, beantworten wir mit "Nur Sicherheitsaktualisierungen automatisch installieren". Dann müssen wir uns zwar selber um die Aktualisierung kümmern, haben aber mehr Kontrolle darüber was und vor allem wann es installiert wird.
Aufgaben
Der Server soll die folgenden Aufgaben erledigen:
- File-Server (Auf den Schulcomputern laufen mehrere Programme, die aus dem Netz starten und somit zentral auf einem Server laufen sollen)
- DHCP-Server (Der Server versorgt das interne Netz mit IP-Adressen, die teils fest vergeben sind)
- DNS-Server/Gateway (Der Server dient als Gateway für das interne Netz über den Router nach draußen [siehe dazu mehr unter Netzaufbau])
Netzaufbau
Der Cisco-Router fungiert als Gateway zum Internet (über das FHH-WAN von Dataport). An ihm hing früher das gesamte Netz über mehrere Switches (er war einfach mit einer Dose am Switch aufgelegt). Dieser Stecker steckt jetzt im Server. Zwischen den beiden ist ein 10.0.2.0er-Netz aufgespannt (vergeben vom Dataport-Router). Dieses liegt an eth0 am Server auf. Der Server selbst hängt mit der anderen Karte (eth1) im internen Netz am Switch. Dahinter dann die Clients:
INTERNET <- Cisco-Router (10.0.2.1) <-eth0/10.0.2.104- Tux-Server -172.16.1.1/eth1-> INTRANET (172.16.0.0/255.255.0.0)
Einrichtung
Nach der Installation haben wir folgende Dienste installiert:
- apache2 mit php5 und den entsprechenden Modulen
- openssh (schon bei der Installtion)
- samba (File-Server)
- dnsmasq (kleiner, aber feiner DHCP- und DNS-Server)
- bind9 (DNS-Server)
- squid3 (Proxy-Server)
Die Pakete wurde ganz einfach über den Befehl
root@tux:~# apt-get install apache2 php5 openssh-server samba samba-common dnsmasq bind9 squid3
installiert.
Apache
Die Einrichtung von Apache ist kinderleicht. Man installiert die Pakete und kann den Server prinzipiell sofort benutzen. Da der Standard-DocumentRoot-Pfad (/var/www/) uns nicht in die Quere kam, haben wir das auch so gelassen.
openSSH
Nachdem der Server installiert wurde, kann man ihn auch sofort einsetzen. Man muss nur darauf, dass der Firewall-Port auf Port 22 offen ist, sonst bleibt man beim Anmeldeversuch über SSH an der Firewall hängen. Aber auch das wurde automatisch erledigt. Somit ist an dieser Stelle auch keine weitere Konfiguration notwendig. Wenn man möchte, kann man der Sicherheit halber noch dem root die direkte Anmeldung per SSH verbieten. Dazu ändert man in der Datei /etc/sshd/sshd_config den Befehl
PermitRootLogin yes
einfach auf
PermitRootLogin no
Nun kann sich der root-Benutzer nicht mehr direkt anmelden. Authentifizierte Benutzer können sich dann mit dem Befehl
peter@tux:~# su Passwort: (hier dann das root-Kennwort eingeben)
Root-Rechte verschaffen.
Samba
Die Konfiguration des Samba-Servers ist dagegen schon etwas komplexer, aber wenn man sich eingearbeitet hat, ist das auch kein Problem. Zuerst kopieren wir die Standard-Konfiguration (/etc/samba/smb.conf) zur Sicherheit. Das machen wir mit dem folgenden Befehl:
root@tux:~# cp /etc/samba/smb.conf /etc/samba/smb.conf.org
Damit können wir uns nun einen Fehler erlauben, ohne, dass die Konfiguration völlig verloren geht. Die Datei /etc/samba/smb.conf bearbeiten wir nun mit unserem Lieblingseditor (meiner ist vim):
root@tux:~# vi /etc/samba/smb.conf
Die Datei besteht standardmäßig zu 90% aus Dokumentation. Wenn einem das zu viel ist, kann man die Datei auch vor dem Öffnen löschen (bitte unbedingt vorher sichern!; s.o.):
root@tux:~# rm /etc/samba/smb.conf
und dann erst zum Schreiben öffnen. Das hat den Vorteil, dass man dann wirklich nur das sieht, was man auch sehen möchte. Für Anfänger empfiehlt sich allerdings, die Standard-Konfiguration einfach zu verändern. Interessant für uns sind die Variablen unter [global]:
[global]
Hier wird die Arbeitsgruppe (in Windows-Netzen standardmäßig WORKGROUP oder (wie in unserem Fall) ARBEITSGRUPPE) eingetragen:
workgroup = ARBEITSGRUPPE
Die folgende Variable legt die Beschreibung des Server fest. Der Platzhalter %h wird automatisch durch den Server-Namen ersetzt:
server string = Samba server at %h (Ubuntu, Samba)
Sofern kein anderer Windows-Domänen-Controller oder WINS-Server im Netz läuft, setzen wir die folgende Variable auf yes:
wins support = yes
Ab hier können wir erstmal alles auf der Standard-Einstellung lassen:
; wins server = w.x.y.z dns proxy = no ; name resolve order = lmhosts host wins bcast
Wenn der Server nur aus einem (oder mehreren) Netzen oder einer(/einigen) bestimmten Netzwerkschnittstellen erreichbar sein soll, kann die folgende aktiviert und entsprechend angepasst werden. (Hier werden zum Beispiel nur Verbindungen aus dem Netz 172.16.0.1 - 172.16.255.255 und/oder auf der Netzwerkschnittstelle eth1 angenommen). Falls der Server aus allen Netzen/auf allen Interfaces erreichbar sein soll, kann man das hier mit einem ; auskommentieren.
interfaces = 172.16.0.0/16 eth1
Jetzt kommen wir zum Logging. Hier konfiguriert man, wo Samba loggen soll und ob zusätzlich (oder überhaupt) in der /var/log/syslog geloggt werden soll: Pfad zu den späteren Log-Files:
log file = /var/log/samba/log.%m
Wie groß die Log-File werden darf:
max log size = 1000
Soll nur in der Syslog geloggt werden (dann würden die oberen beiden Einstellungen überflüssig sein):
syslog only = no
Wenn in der Syslog geloggt werden soll, muss das hier höher als 0 gesetzt werden:
syslog = 0
Was Samba machen soll, falls ein schwerwiegender Fehler passiert (kann auch so bleiben)
panic action = /usr/share/samba/panic-action %d
Die in der smb.conf folgenden Einstellungen können alle so bleiben. Es geht dort um Benutzer- und Domainanmeldung. Das ist für uns erstmal nebensächlich. Der interessanteste Teil findet sich am Ende der Datei. Hier werden die Freigaben konfiguriert. Da wir einige Programme laufen haben, erstellen wir auch einige Freigaben. Die standardmäßig eingestellten Freigaben können wir fast alle (bis auf die Homes-Freigabe, welche wir nur auskommentieren) löschen oder, falls notwendig, nur auskommentieren. Die Freigaben werden dann nach dem folgenden Prinzip untereinander eingetragen: Freigabe-Name (ohne Leerzeichen; alles klein):
[public]
Lange Beschreibung der Freigabe:
comment = Oeffentliches Verzeichnis
Pfad zum Ordner (nicht vergessen, diesen zu erstellen!)
path = /home/samba/public
Dürfen Gäste darauf zugreifen?
guest ok = yes
Ist die Freigabe bei der Freigabe-Abfrage des Servers sichtbar? (Ansonsten kann nur per \\tux\public darauf zugegriffen werden).
browseable = yes
Dürfen die Benutzer schreiben?
writeable = yes
Falls writeable auf no steht, kann man hier eintragen, welche Benutzer schreiben dürfen. Ganzen Gruppen kann man per @GRUPPENNAME den Schreibzugriff gestatten:
write list = lukas,admin,@support
Falls guest ok auf no steht, kann man hier eintragen, welche Benutzer das Verzeichnis betreten dürfen:
valid users = lukas,admin,@support
Hier werden die Datei- und Verzeichnisrechte festgelegt, die beim Anlegen einer Datei/eines Verzeichnisses standardmäßig gesetzt werden:
create mode = 0664 directory mode = 0775
Hier wird angegeben, welchem Benutzer/Gruppe die angelegten Dateien/Verzeichnisse gehören werden.
force user = samba force group = support
Dann siehts so aus:
[public] comment = Oeffentliches Verzeichnis path = /home/samba/public guest ok = yes browseable = yes writeable = yes write list = lukas,admin,@support valid users = lukas,admin,@support create mode = 0664 directory mode = 0775 force user = samba force group = support
Für die Programme wurden dann jeweils die Verzeichnisse erstellt:
root@tux:/home/samba/# mkdir public root@tux:/home/samba/# mkdir lernwerkstatt root@tux:/home/samba/# mkdir budenberg root@tux:/home/samba/# mkdir gut1
Wenn man alles richtig gemacht hat, sollte der folgende Befehl zum Testen der Konfiguration keine Fehler ausspucken:
root@tux:/home/samba/# testparm
Danach kann man den Samba-Server neu starten und alles sollte laufen:
root@tux:/home/samba/# service smbd restart
Probleme
Der Zugriff auf die Verzeichnisse klappte erst nicht. Es wurde mit der Fehlermeldung "Zugriff verweigert" abgebrochen. Das lag daran, dass die Verzeichnisse extra angelegten Benutzern (budenberg, gut1, lws) gehörten. Nach langem Ausprobieren haben wir dann alle Verzeichnisse dem Benutzer samba und der Gruppe samba übergeben:
root@tux:/home/samba/# chown -R *
Danach lief alles wieder sauber und zufriedenstellend.
dnsmasq
DHCP
dnsmasq ist ein DNS-Forwarder und DHCP-Server. Der Server ist mit zwei Netzwerkkarten in verschiedenen Netzen angebunden (Siehe Netzaufbau weiter oben). Im einen Netz hängt der Cisco-Router mit DNS und DHCP-Server. Auf der anderen Karte hängt der Server im internen Netz, wo er als DNS/DHCP-Server laufen muss. Die Konfiguration von dnsmasq mag anfangs etwas kompliziert klingen, ist aber kinderleicht, wenn man sich eingearbeitet hat. Sie liegt in /etc/dnsmasq.conf. Zuerst dumpen wir die Datei sicherheitshalber wieder, damit wir danach eine neue erstellen können. Hier lohnt es sich die Datei zu verschieben, da die Datei recht umfangreich ist und die benötigte Konfiguration prinzipiell nur drei Zeilen lang ist:
root@tux:/etc# mv dnsmasq.conf dnsmasq.conf.org
Danach öffnen wir die (dann neue) Datei dnsmasq.conf:
root@tux:/etc# vi dnsmasq.conf
Hier tragen wir nun die folgenden drei Zeilen ein: Das Interface, auf dem der DHCP-Server aktiv sein soll:
interface=eth1
Das Interface, auf dem der DHCP-Server nicht aktiv sein soll:
no-dhcp-interface=eth0
Und schließlich den dynamischen IP-Bereich (mit Lease-Time):
dhcp-range=172.16.10.10,172.16.10.254,255.255.0.0,12h
Darunter kann man dann auf noch feste IPs vergeben. Die Befehle werden folgendermaßen aufgebaut:
dhcp-host=<MAC-Adresse>,<Rechnername>,<IP-Adresse>,infinite
oder
dhcp-host=<MAC-Adresse>,<IP-Adresse>,infinite
oder
dhcp-host=<Rechnername>,<IP-Adresse>,infinite
"infinite" ist hier die Lease-Time. Da feste IPs "nie" oder besser sehr lange nicht wieder freigegeben werden müssen, kann man sie auf "für immer" (begrenzt auf 16 Jahre) setzen. Für unser Netz haben wir das folgende Muster gewählt. Hier bekommt jedes Gebäude ein eigenes Subnetz und die beiden Computerräume, die Verwaltung und die DHCP-Clients ebenfalls. Die Netze sind dank Subnetzmaske 255.255.0.0 untereinander routbar:
Haus A -> 172.16.1.* Haus B -> 172.16.2.* Haus C -> 172.16.3.* Haus D -> 172.16.4.* Haus E -> 172.16.5.* Haus F -> 172.16.6.* Haus G -> 172.16.7.* Haus Verwaltung -> 172.16.8.* DHCP -> 172.16.10.* Computerraum 1 -> 172.16.12.* Computerraum 2 -> 172.16.14.*
DNS/Gateway
Damit das interne Netz nun auch ins Netz kommt (und anders herum auch die Daten aus dem Internet wieder zurück ins lokale Netz), müssen wir die Datenpakete maskieren, dazu muss man folgende Befehle ausführen. Die Einstellungen dazu tragen wir in die Datei /etc/network/interfaces ein. Die Datei sichern wir vorher:
root@tux:/etc/network/# cp interfaces /root/
Danach können wir sie öffnen:
root@tux:/etc/network/# vi interfaces
Nun ergänzen wir die feste IP-Adresse auf eth1, damit der Server auf immer unter einer Adresse erreichbar ist (Achtung: Das Interface lo wird unbedingt benötigt, also nicht löschen!):
# externes Netz auto eth0 iface eth0 inet dhcp # internes Netz auto eth1 iface eth1 inet static address 172.16.1.1 netmask 255.255.0.0 broadcast 172.16.255.255
Nun kommen wir zur Konfiguration der Firewall. Die Einstellungen ebenfalls - unterhalb der IP-Konfiguration - in der /etc/network/interfaces eingetragen werden, damit sie, falls notwendig, bei jedem Start neu gesetzt werden: Die folgende Anleitung stammt leicht verändert aus dem ubuntuusers-Wiki/Router:
up /sbin/iptables -F up /sbin/iptables -X up /sbin/iptables -t nat -F
# Forwarding für alle verwendeten Schnittstellen im lokalen Netz aktivieren up /sbin/iptables -A FORWARD -o eth0 -i eth1 -s 172.16.0.0/16 -m conntrack --ctstate NEW -j ACCEPT up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE up /sbin/sysctl -w net.ipv4.ip_forward=1
# dnsmasq neu starten up /etc/init.d/dnsmasq restart
Damit ist das Netz prinzipiell betriebsbereit, allerdings müssen wir noch die Netzwerkinterfaces neustarten:
root@tux:~# /etc/init.d/networking restart
Allerdings stoßen wir hier auf einen Fehler, a lá
RTNETLINK answers: File exists failed to bring up eth1
Das lässt sich einfach mit einem kompletten Server-Neustart lösen. Allerdings müssen wir vorher noch eine Sache ergänzen. In der Datei /etc/bind9/named.conf.options muss unter "forwarders" noch die IP des Cisco-Routers eingetragen werden. Dazu öffnen wir sie und geben folgendes ein bzw. ergänzen es:
forwarders { 10.0.2.1 8.8.8.8 }
Das sorgt dafür, dass die DNS-Anfragen, die unser Server nicht lokal routen kann an den Router weitergegeben werden. Falls dieser sie ebenfalls nicht beantworten kann oder gerade zu viel zu tun hat, macht das der Google-Server (IP: 8.8.8.8) für uns.
Neustart!
Jetzt können wir einen kompletten Neustart machen:
root@tux:~# shutdown -r now
Danach sollte alles ordnungsgemäß funktionieren.
UpDate Oktober
Wir haben den Server nochmal neu aufgesetzt. Diesmal auf einem neueren, schnelleren Server. Mit der obenstehenden Anleitung hat das alles wunderbar geklappt.