Einrichten eines neu installierten Debian Root Server

2009-08-04 - kostaki 7 Kommentare »

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!

Ähnliche Artikel

  1. 7 Kommentare

  2. 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.

  3. 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:

    $ touch test.txt
    $ ls -ahl
    -rw-r--r--  1 root root    0 Dec 10 18:48 test.txt
    $ mkdir test
    $ ls -ahl
    drwxr-xr-x  2 root root 4.0K Dec 10 18:51 test
    

    Umsak 027:

    $ touch test.txt
    $ ls -ahl
    -rw-r-----  1 root root    0 Dec 10 18:55 test.txt
    $ mkdir test
    $ ls -ahl
    drwxr-x---  2 root root 4.0K Dec 10 18:54 test
    

    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:

    $ aptitude upgrade
    W: The "upgrade" command is deprecated; use "safe-upgrade" instead.
    

    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 :P 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ß.

  4. Marus
    schrieb am 12.12.2009 um 22:56 Uhr

    Danke!. klingt einleuchtend. Full Update war mir auch neu.

  5. 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

  6. kostaki
    schrieb am 19.04.2010 um 14:41 Uhr

    Stimmt. Ist mir nicht aufgefallen das das Kommentar falsch war. :x

    Danke für den Hinweis und es ist nun gefixt.

  7. 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.

  8. 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.

Kommentar schreiben

*

*