Einrichten eines neu installierten Debian Root Server
Da ich öfters gefragt werde was ich genau mache wenn ich einen neuen Root Server (bei Managed Servern nimmt man das was man bekommt und passt es den Möglichkeiten entsprechend an) zum einrichten bekomme, dachte ich mir ich schreib es einfach mal auf. Es gibt natürlich unterschiedliche Anforderung, weshalb ich mich hier auf das Basis System beschränke. Bei diesem System ist mir als erstes die Sicherheit des Servers wichtig und bis heute wurde noch keiner meiner Server ungewollt übernommen. *auf Holz klopf*
Da ich immer wissen will was genau auf dem Server läuft installiere ich als erstes ein komplett leeres System und da ich ein Debian "Fan" bin ist es derzeit ein 64Bit Debian Lenny minimal. Bei Hetzner ist das mit Hilfe des Rescue Systems sehr einfach. Bei anderen Serveranbietern schätze ich den Aufwand ab und lebe dann vielleicht doch mit dem vom Hoster installierten System.
Da ich aber auch ein absoluter Hetzner Fan bin, kommen die meisten neuen Server aus einem ihrer Rechenzentren. Eine Anleitung wie man ein neues Image installiert findet ihr hier.
Ich beziehe mich also auf einen Hetzner Root Server mit Debian 64Bit Lenny minimal.
Nachdem das System steht log ich mich per root ein und ändere als erstes das root Passwort! Natürlich nimmt man hier nicht seinen Vornamen oder ähnliches. Ich generiere mir immer ein mindestens 20 Zeichen Passwort mit allen möglichen Zeichen.
$ passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Damit ich auch als root sehe mit wem ich gerade eingeloggt bin passe ich die root .bashrc an. Des weiteren passe ich noch die default umask an, lasse mir ein paar Farben ausgeben und passe den 'll' Alias an.
$ nano /root/.bashrc
#export PS1='\h:\w\$' umask 027 export LS_OPTIONS='--color=auto' eval "`dircolors`" alias ll='ls $LS_OPTIONS -ahl'
Einmal reloggen und man sieht alles.
Beim aktuellen Debian image steht hier schon der Hetzner Mirror, aber wenn nicht trage ich ihn ein. Man kann sich einfach auf der Debian Seite einen anderen Mirror raus suchen und diesen benutzen.
$ nano /etc/apt/sources.list
Nun wird erstmal das System geupdatet. Das ganze mache ich nicht mehr mit apt-get, sondern mit aptitude. Warum das besser ist und warum man beide nicht mixen sollte steht hier.
$ aptitude update && aptitude safe-upgrade
Nach dem Update die Zeit Synchronisieren. Damit man sich nicht mehr darum kümmern muss installiere ich ntp. Wer möchte kann seine Lieblingsserver nach der Installation in die ntp.conf eintragen.
$ aptitude install ntp $ nano /etc/ntp.conf
server ptbtime1.ptb.de version 3 server ptbtime2.ptb.de version 3 server ntps1-0.cs.tu-berlin.de version 3 server ntps1-0.uni-erlangen.de version 3 server ntp0.fau.de version 3
$ /etc/init.d/ntp restart Stopping NTP server: ntpd. Starting NTP server: ntpd. $ hwclock --systohc #Hardware Uhr updaten
Ich deinstalliere an dieser Stelle immer noch ntpdate, da es derzeit einen Bug gibt der das automatische Starten von ntpd beim Reboot stört und ich es eh nicht brauche/benutze.
$ aptitude remove ntpdate
Jetzt noch ein paar kleine Tools die man öfter mal braucht.
$ aptitude install bzip2 wget lsof mc sudo #ein paar Tools installieren $ update-rc.d -f inetd remove #inetd entfernen $ /etc/init.d/inetd stop #inetd abschalten $ lsof -i #Verbindungen checken
Man sieht noch IPv6 Einträge. Da ich derzeit keinen Nutzen dafür habe, schalte ich IPv6 ab. (2.6 Kernel Debian)
$ nano /etc/modprobe.d/aliases
Von
alias net-pf-10 ipv6
in
alias net-pf-10 off alias ipv6 off
Ich Blackliste das Module auch noch in
$ nano /etc/modprobe.d/blacklist
Ans ende der Datei:
blacklist ipv6
Nach einem Neustart sollte lsof -i nur noch IPv4 Vermerke beinhalten. Eine Anleitung zum abschalten von IPv6 für Debian Squeeze gibt es hier. Außerdem sollte man nur noch sshd und vielleicht ntpd commands sehen (mehr ist ja noch nicht auf dem Server). In etwa so:
root@server:~# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME sshd 3062 root 3u IPv4 6764 TCP *:ssh (LISTEN) ntpd 3089 ntp 16u IPv4 6805 UDP *:ntp ntpd 3089 ntp 17u IPv4 6809 UDP localhost:ntp ntpd 3089 ntp 18u IPv4 6810 UDP srv.bla:ntp sshd 3157 root 3r IPv4 6997 TCP srv.bla:ssh->srv.blub:1976 (ESTABLISHED)
Als nächstes ist die Absicherung des sshd's dran. Dazu lege ich einen neuen System User an. Der Name sollte schon nicht zu einfach zu erraten sein um möglichen Brutforceangreifern schon bei der Namenswahl die Suppe zu versalzen.
$ adduser hz-myuser-1 $ cd /etc/ssh/ $ nano sshd_config
Hier habe ich immer schon eine eigene kommentierte Config die ich nur minimal anpassen muss. Vielleicht poste ich diese und die Erklärungen ein anderes mal. Wichtig sind die folgenden Punkte:
Protocol 2 #nur SSH2 erlauben Port 28564 #kontrovers da security by obscurity, ich mach es trotzdem. PermitRootLogin no #das heißt das man sich nicht mehr direkt mit root anmelden kann! AllowUsers hz-myuser-1 #nur mit diesem User kann man sich per SSH einloggen.
Nach dem speichern den ssh Demon neu starten.
$ /etc/init.d/ssh restart Restarting OpenBSD Secure Shell server: sshd.
Jetzt das Fenster offen lassen und mit einem neuen Putty Fenster versuchen sich mit dem neuen User auf dem Server einzuloggen. Wenn es hier Probleme gibt kann man diese noch fixen. Sollte es keine Probleme geben kann man im neuen Fenster per su auf root wechseln und das alte Fenster schließen.
Nun wäre eigentlich die Konfiguration der Systemlogs dran, aber in letzter Zeit verzichte ich darauf. Vielleicht schreibe ich extra was dazu. Normalerweise benutze ich syslog-ng. Das war natürlich noch nicht alles was man bedenken sollte, aber mit diesen wenigen Schritten hat man eine gute Basis auf der man aufsetzen kann. Wer Anmerkungen, Fragen oder Ergänzungen hat, immer her damit!
7 Kommentare
Marus
schrieb am 10.12.2009 um 16:25 Uhr
Gut geschrieben, einige Fragen blieben jedoch noch offen. Habe mich am Ende auch für den Artikel hier entschieden, da der vServer Artikel doch sehr allgemein gehalten war
Meine Fragen, die einige “Warum’s” klären udn den Artikel sicher bereichern:
– Warum stellst du die umask auf 027 um?
– Was macht die Einstellung “alias ll=’ls $LS_OPTIONS -ahl’” genau?
– Welche Sourclisten würdest du empfehlen, wenn du nicht auf die von Hetzner zurückgreifen würdest? Rein rethorisch gefragt.
– Warum safe-upgrade und nicht einfach upgrade bzw. beim ersten mal gleich ein dist-upgrade?
– Warum schaltest du initd ab? Ist das nicht zum Neustarten nötig? //EDIT: Sehe gerade weiter unten, dass es trotzdem geht. Was macht initd also?
Die Einstellungen mit ipv6 haben leider nicht funktioniert. Bei mir bleiben weiterhin ndie ipv6 Einträge vorhanden. Werde mal schauen, ob ich da weitere Infos finde.
Hoffe auch du hast den Port in deiner Config geändert. Wäre ja sonst nicht sonderlich sicher was du da machst
Ansonsten hat alles prima geklappt. Geht also gleich weiter. Der EUSserv Serve rist echt ein Krampf. Die Konsole is nur am Hängen. Hoffe der WebServer läuft flüssiger. Auch wenn er nur zum testen da is, ist das schon anstrengend.
kostaki
schrieb am 10.12.2009 um 20:30 Uhr
Danke dann mach ich mich mal an die Beantwortung:
Umask
Die umask steuert ja mit welchen Rechten neue Dateien/Ordner angelegt werden. Bei der Standardeinstellung 022 bekommen neue Dateien die Rechte 644 und neue Verzeichnisse 755. Das heißt das jeder die Ordner öffnen kann und Dateien anzeigen lassen und jeder neue Dateien lesen kann. Stellt man die umask auf 027, dann werden Verzeichnisse mit 750 und neue Dateien mit 640 angelegt, was sehr viel sicherer ist. Hier ein Beispiel an dem man es besser erkennen kann:
Umask 022:
Umsak 027:
Will man trotzdem einer Datei oder einem Verzeichnis andere Rechte geben, kann man dies immer noch mit chmod machen.
alias ll=’ls $LS_OPTIONS -ahl
Das macht nichts anderes als einen Alias anzulegen, damit man nicht immer ls -ahl eintippen muss. So gesetzt wird beim eintippen von ll “ls -ahl” ausgeführt. Ich habe mich da einfach dran gewähnt und will nicht mehr darauf verzichten.
Welchen Debian Mirror sollte man nehmen?
Die sind eigentlich alle recht schnell. Man sollte darauf achten das man einen Mirror aus der Nähe des Servers wählt. Steht der Server in Deutschland, dann natürlich ein deutscher Mirror. Eine Liste gibt es hier: Debian Mirror. Es gab da mal ein Debian Paket, damit konnte man die Mirrors auf den Speed testen, aber das ist glaube ich nicht mehr aktuell. Am besten selbst mal sehen was am schnellsten ist.
Warum safe-upgrade und nicht einfach upgrade?
Ruft man aptitude upgrade auf bekommt man diese Meldung:
Der normale upgrade Befehl ist also “veraltet” und sollte nicht mehr verwandt werden. Ich hatte da mal nen guten Debian FAQ Eintrag dazu, aber den finde ich nicht mehr… Einfach mal danach googlen. Dist-upgrade war zum updaten der Distribution da und wurde nun durch full-upgrade ersetzt.
Warum schaltest du initd ab
Ich schalte nicht den initd ab, sondern den inetd
Der zweite ist dafür da, auf Anfrage, Dienste zu starten, damit man z.B. einen FTP Server nicht dauerhaft laufen lassen muss, sondern nur wenn man ihn braucht. Persönlich setze ich ihn nicht ein und entferne ihn sofort nach der Installation. Außerdem sollte man wohl lieber xinetd benutzen wenn man so etwas braucht, aber wie gesagt ich setze es nicht ein. Hier gibt es eine Übersicht über die Funktionsweise.
ipv6 abschalten
So langsam wird ipv6 ja wieder interessant, aber das du es nicht abschalten konntest liegt vielleicht an deinem Server. Wenn du es auf einem Vserver ohne eigenen simulierten Kernel getestet hast, dann hast du nicht die Möglichkeit es abzuschalten.
Der Port ist natürlich nicht der den ich einsetze. Ich nehme auch für jeden SSH Server einen anderen. Das lässt sich mit KeePass sehr gut verwalten. Der EUServ VServer war leider auch bei mir nicht das wahre, aber dafür immerhin umsonst.
Wer einfach mal nur testen will, sollte sich einen Netcup Aluminium Server besorgen. Für 1,69€ im Monat hat man da sehr viel mehr Spaß.
Marus
schrieb am 12.12.2009 um 22:56 Uhr
Danke!. klingt einleuchtend. Full Update war mir auch neu.
Kay
schrieb am 19.04.2010 um 14:24 Uhr
Die Frage nach initd war (fast) berechtigt:
$ update-rc.d -f inetd remove #initd entfernen
$ /etc/init.d/inetd stop #initd abschalten
Der Befehl sagt korrekterweise “inetd” – dein Kommentar aber nicht.
Das wars schon.
lg
kostaki
schrieb am 19.04.2010 um 14:41 Uhr
Stimmt. Ist mir nicht aufgefallen das das Kommentar falsch war.
Danke für den Hinweis und es ist nun gefixt.
Christian
schrieb am 05.12.2010 um 13:46 Uhr
Hallo,
trotz der Deaktivierung von IPv6 habe ich nach einem restart des Servers immer noch Einträge vom Typ IPv6 in meiner Ausgabe von lsof -i .
Diese sind u.a. vom apache
apache2 2604 root 4u IPv6 8430 TCP *:www (LISTEN)
apache2 2604 root 6u IPv6 8434 TCP *:https (LISTEN)
apache2 2631 www-data 4u IPv6 8430 TCP *:www (LISTEN)
apache2 2631 www-data 6u IPv6 8434 TCP *:https (LISTEN)
apache2 2632 www-data 4u IPv6 8430 TCP *:www (LISTEN)
apache2 2632 www-data 6u IPv6 8434 TCP *:https (LISTEN)
und vom ntpd
ntpd 2536 ntp 17u IPv6 8086 UDP *:ntp
ntpd 2536 ntp 18u IPv6 8090 UDP ip6-localhost:ntp
ntpd 2536 ntp 19u IPv6 8091 UDP [fe80::224:21ff:feb4:3084]:ntp
Wieso das und wie kann ich es unterbinden?
Vielen Dank.
kostaki
schrieb am 05.12.2010 um 14:36 Uhr
Hast du zufällig Debian Squeeze installiert? Bei Debian Squeeze hat sich das Abschalten von ipv6 etwas verändert. Als erstes musst du raus finden welche GRUB Version du hast. Einfach “grub –version” eingeben. Wenn eine Ausgabe kommt, hast du die alte Version. Kommt keine Ausgabe hast du GRUB2.
Bei GRUB2:
$ nano /etc/default/grub
#ipv6 abschalten
GRUB_CMDLINE_LINUX=”ipv6.disable=1″
Bei GRUB1 in der /boot/grub/menu.lst an die kernel Zeile folgendes anfügen:
ipv6.disable=1
Bei beiden Version dann noch ein update-grub ausführen und den Rechner neu starten. Dann sollte IPV6 auch bei Debian Squeeze abgeschaltet sein.