Einschätzung des Sicherheitslevels meines Servers

hedemi

New Member
Hallo,

ich beschäftige mich in meiner Freizeit inzwischen seit etwa einem Jahr mit dem Betrieb und der Sicherheit von (v)Servern. Beim Thema Sicherheit bin ich etwas paranoid, was, so glaube ich, auch hilfreich sein kann. ;)

Auf jeden Fall wollte ich euch nach eurer geschätzten Meinung bezüglich meiner individuellen Sicherheitsmaßnahmen fragen. Auf dem (v)Server sollen in der ersten Zeit mehrere Dienste laufen, die ich in dem Thread "Projekt: Browsergame" beschrieben habe.

Ich finde das sind viele Dienste für einen Server, was aber in der "StartUp-Projektphase" aus finanziellen Gründen einfach so sein muss. Umso mehr bin ich im Setup auf das Thema Sicherheit fixiert gewesen.

Mein Sicherheitskonzept:

  • ssh2
    • Keyfile Login
    • Config bearbeitet: kein Rootlogin, anderer Port
  • Benutzer/Gruppen
    • nur eine Gruppe hat Zugriff auf su (root und loginuser)
    • Loginuser hat nur eine rbash in etc/passwd
    • Bei dem Aufruf einer shell wird automatisch eine Email versendet (Login user XUhr)
    • shell-Timeout nach 5min idlen
    • Emails an root werden umgeleitet (/etc/mail/aliases)
  • Firewall/Netzwerk
    • Vorlage von tty1.net
    • ein paar eigene Regeln eingebaut
    • die /etc/sysctl.conf entsprechend für Server einkommentiert
  • Dienste
    • MySQL: mysql_secure_installation
    • eJabberd: Hier bin ich noch in der Konfigurationsphase. Für Tipps wäre ich sehr dankbar!
    • MTA: postfix
      • smtp restrictions in der main.cf:
        smtpd_recipient_restrictions = reject_invalid_hostname,
        reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_rbl_client sbl.spamhaus.org,
        permit

        smtpd_helo_restrictions = reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname
      • RBL-list als antispam
        smtpd_client_restrictions = reject_rbl_client dnsbl.sorbs.net
      • clamav-deamon amavisd spamassassin
    • apache
      • apache2.conf
        Timeout 120
        MaxKeepAliveRequests 200
        KeepAliveTimeout 7
      • conf.d/security
        ServerTokens Prod
        ServerSignature off
      • httpd.conf (Options -Indexes)
      • libapache2-mod-evasive
        DOSHashTableSize 3097
        DOSPageCount 10
        DOSSiteCount 50
        DOSPageInterval 1
        DOSSiteInterval 1
        DOSBlockingPeriod 10
      • libapache-mod-security mit Vorlage *link entfernt*
  • sicherheits Dienste
    • rkhunter (läuft jede Nacht)
    • clamAV (jeden Tag werden "anfällige" Verzeichnisse durchsucht, jede Woche das Gesamtsystem)
    • tripwire (läuft jede Nacht)
  • externe Dienste(laufen [werden laufen] bei mir zuhause)
    • Abholung und Auswertung der Logfiles (täglich) (Könnt ihr mir hier Tools/Strategien empfehlen?)
    • Sicherung der letzten System/Datenbank Backups (täglich)
    • ein Script welches die Integrität der Tripwire Datenbank auf dem Server mit einem Hashwert überprüft (täglich)
Das wäre nun zumindest grob alles. :)

Wie ihr seht, habe ich auf chroot (bisher) verzichtet, denn es scheint mir zu einfach aus der Umgebung auszubrechen für den Aufwand den man mit dem aufsetzen hat. Sollte ich hier falsch liegen, dann lasst es mich wissen.

Ansonsten: Habe ich etwas übersehen? Gibt es noch weitere Konfigurationen/Tools die relevant für die Sicherheit sind? Wie würdet ihr die Sicherheit des Servers einschätzen?

Viele Grüße
Thomas
 
Last edited by a moderator:
Hallo,

@Jenstheclown: Logwatch werd ich mir anschauen. Danke. Hast du dafür vielleicht ein paar empfehlenswerte Bookmarks? :)

@Reaper1991: Die Updates hab ich vergessen. :D Dafür habe ich mir einen Crontab eingerichtet:

Code:
#update the packet lists and show if something should be updated
2 4 * * * /usr/bin/aptitude update && /usr/bin/aptitude -s full-upgrade

Das Ergebnis bekomme ich zugemailt und das Einspielen (wenn nötig) übernehme ich dann von Hand. Falls etwas schief geht kann ich dann auch gleich handeln und habe eine Spur was es sein könnte. Das wird ja auch in deinem Link empfohlen bei "sensibleren" Umgebungen. :) Danke für den Link.

@all: Für weitere Tipps und vielleicht eine allgemeine Einschätzung (auch gerne in Schulnoten ;) ) mit kurzer Begründung wäre ich sehr dankbar!

Einen schönen Sonntag. Viele Grüße
Thomas
 
Ich würde Systeme, egal ob kritisch oder nicht, niemals unbeaufsichtigt Updates einspielen lassen.
Paketlisten aktualisieren ok. Wenn's Neuerungen gibt eine Info per Mail und dann selber einspielen. Aber nicht blind aktualisieren lassen. Das kann u.U. ganz böse ins Auge gehen.

Edith: Kommando zurück! Hab das "-s" übersehen ;)

Ansonsten sieht das Setup schon ganz brauchbar aus.
 
Last edited by a moderator:
Statt des Crons:

Code:
#update the packet lists and show if something should be updated
2 4 * * * /usr/bin/aptitude update && /usr/bin/aptitude -s full-upgrade

kannst du auch Apticron nutzen.
 
Das Konzept sieht insgesamt nicht schlecht aus, besonders, da du dich nicht, wie manch anderer, viel zu viel mit SSH beschäftigst (welcher imho recht unkritisch ist) und dafür den Rest vergisst.

Allerdings solltest du beim Apache (vermutlich das Haupteinfallstor der meisten Server) noch mehr tun.
Als Stichworte seien genannt: Mod_Security, php_fast_cgi
Hier auch ein Link dazu: http://wiki.hetzner.de/index.php/Apache_PHP5_fcgi_und_SuExec

Zu FTP hast du noch nichts gesagt. Falls du ganz drauf verzichtest: Super.
Ansonsten sind in vsftp und proftpd in letzter Zeit Backdoors gefunden worden, also hier Vorsicht walten lassen.
 
Danke für die vielen Antworten. :)

@Moppel Apticron: Ich sehe ja eigentlich fast alle Infos mit meinem Cron wie bei apticron - bis auf das Changelog. In dem Quelltext von Apticron habe ich gesehen, dass das mit apt-listchanges verwirklicht wird. Da hängen aber auch noch (entpackt) 15,8MB andere Pakete dran. Und da ich sowieso den pro-linux Newsletter lese und auf diese Weise die Changelogs immer ganz gut im Auge habe, wiegen die vielen Zeilen Code den Mehrwert in meinem Fall nicht auf.
Aber es war interessant das herauszufinden. :)

@siradlib MySQL nur an localhost lauschen lassen: Aber selbstverständlich :) Trotzdem Danke für den Hinweis.

@Jenstheclown Logwatch: Danke, werde nächstes Wochenende meinen alten Laptop zu einem Sicherungssystem umbauen und deinen Link beherzigen.

@Jesaja PHP & FTP: Das habe ich beides nicht installiert und hatte es auch nicht vor. Scheint mir zu unsicher.
Apache: Das hat mich heute erst verwirrt. Ich habe letztens das Paket libapache2-mod-security2 per aptitude show anzeigen lassen, woran ich gesehen habe, dass das Paket eigentlich libapache-mod-security ist. Dann habe ich danach gegoogelt und bin unglücklicherweise auf ein HOWTO gestoßen, welches die Vorgängerversion behandelt, was mir aber nicht auffiel, da mich die Paketnamen in die Irre geführt haben. Ganz gemeiner Fehler.
Um den Apachen muss ich mich noch eingehender kümmern. Das hat mir auch der vor Kurzem aufgetretene Bug wieder vor Augen geführt.


@all Welche Mods benutzt ihr für die Sicherheit von eurem Apache? Was sind häufige Fehler in der Konfiguration?

Nochmals Danke für die vielen Antworten. Freundliche Grüße
Thomas
 
Last edited by a moderator:
Wenn du auf dem Server kein Massenhosting betreiben möchtest und den Webserver nur für eigene Projekte verwendest, könntest du statt dem Apache z.B. Nginx verwenden. Der bietet m.A. einen Sicherheitsgewinn zum Apachen, weil er u.a. auch nicht so anfällig für div. Attacken (z.B. Slowloris) ist.
 
Wirklich sehr interessanter Thread :)

Zu mod_security2 ist auch folgender Artikel sehr gut: http://daemonkeeper.net/74/ddos-abwehr-mit-apaches-mod_security2/

Ich hab ein paar Fragen zu den Benutzer/Gruppen:

Was ist der unterschied zwischen den root und loginuser? Heisst das du loggst dich zunächt als "normaler" Benutzer an und machst dich dann zum root?
Ich mache das zur Zeit so das ich mich direkt als root einloggen kann -> Kommentare hierzu?

Wie kann ich einstellen das ich per Mail bei einem Login benachrichtig werde?

Das mit dem Timeout wäre mir persönlich zu nervig, da ich doch mal schnell längere zeit "inaktiv" auf der Konsole bin, wenn ich mal einen längeren Artikel lese oder ähnliches ;) Mich dann jedesmal wieder einzuloggen wäre dann doch zu anstrengend.
 
Was ist der unterschied zwischen den root und loginuser? Heisst das du loggst dich zunächt als "normaler" Benutzer an und machst dich dann zum root?
Ich mache das zur Zeit so das ich mich direkt als root einloggen kann -> Kommentare hierzu?

Wenn der User auch noch Root heißt meiner Meinung nach eher schlecht. Dadurch kann dein PWD mittels Bruteforce relativ schnell herausgefunden werden. Wenn der Benutzername aber nicht bekannt ist muss erst dieser noch herausgefunden werden, was relativ lang dauert im Zusammenhang mit dem PW.

Am besten du nimmst dann noch zwei unterschiedliche Passwörter
 
Ich mache das zur Zeit so das ich mich direkt als root einloggen kann -> Kommentare hierzu?

Wie kann ich einstellen das ich per Mail bei einem Login benachrichtig werde?

Nun direkt als root einloggen ist generell keine gute Idee. Man sollte root nur benutzen wenn man es wirklich braucht. Insbesondere, wenn mehrere Admins einen Server verwalten, ist es IMHO besser, dass die User sich erstmal mit dem zugewiesenen Useraccount authen und dann ggf. umloggen. Dafür habe ich beim sshd AllowUsers = xxx, yyy ... gesetzt. Das hat aber letztlich mehr mit Nachvollziehbarkeit von Aktivitäten zu tun, weil man nach Möglichkeit generell nur den Login per Public Key erlauben sollte und PlainText-Auth abschalten sollte.

Eine gute Komib an Sicherheitstools ist IMHO CSF&LFD - recht komfortabel zu konfigurieren. Beinhaltet Firewallkonfiguration + Logfile-Überwachung + Benachrichtigungen zu diversen wichtigen und/oder kritischen Events. Muss aber wirklich mit Bedacht konfiguriert werden oder es erschlägt Dich mit Infos respektive Mails.

Hallo,
libapache-mod-security mit Vorlage von Howtoforge.com

Danke für den Hinweis auf dieses How-To - ich habe schon öfters mit mod_security experimentiert aber bisher noch keine sinnvolle und wirklich nützliche Konfig gefunden, die exakt das tut was ich will, ohne zu stark zu Lasten der Performance zu gehen und/oder Scripte zu behindern.

Zum Postfix (Auszug aus meiner main.cf): Bzgl. der Spam-Abwehr kannst Du IMHO ruhig noch etwas agressiver zur Sache gehen

Code:
smtpd_helo_required = yes
disable_vrfy_command = yes

smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client relays.ordb.org,
 reject_rbl_client bl.spamcop.net

smtpd_recipient_restrictions = 
 permit_sasl_authenticated,
 permit_mynetworks,
 reject_non_fqdn_sender,
 reject_non_fqdn_recipient,
 reject_non_fqdn_hostname,
 reject_unknown_recipient_domain,
 reject_invalid_hostname,
 reject_unknown_hostname,
 reject_unknown_sender_domain,
 reject_unauth_pipelining,
 reject_unauth_destination,
 reject_rbl_client zen.spamhaus.org,
 reject_rbl_client bl.spamcop.net,
 reject_rbl_client ix.dnsbl.manitu.net,
 reject_rbl_client dnsbl.ahbl.org,
 reject_rbl_client dnsbl.njabl.org,
 permit

Was setzt Du als IMAP/POP3-Server ein?

P.S.: Da ich es grade sehe, Dein Mailserver setzt keine Authorisation ein oder liegt das nur daran, dass Du den relevanten Ausschnitt gepostet hast?
 
Last edited by a moderator:
Hallo zusammen, :)

@tomasini Für einen Wechsel fühle ich mich zu fest mit dem Apachen verzurrt. Die gemeinsamen Abende am flackernden Bildschirm waren zu schön um schon wieder getrennter Wege zu gehen. :D


@art.vandelay Ich würde dir auch dazu raten einen "loginuser" zu benutzen und in der ssh config PermitRootLogin auf no zu stellen. ssh ist, wie auch Jesaja oben erwähnte, relativ unkritisch wenn man ein paar Dinge berücksichtigt. Ich finde übrigens den keyfilelogin sehr praktisch.
Auf Debian Squeeze klappt das HOWTO von http://pkeck.myweb.uga.edu/ssh/ ganz gut. Nur Schritt "Getting startet" von 1-6.

Auf die Idee mit der Email hat mich ein Beitrag im Forum von Netcup.de gebracht. Ob das sinnvoll ist weiß ich allerdings nicht. Mir scheint es sinnvoll zu sein.


@JaEgErmEistEr
Am besten du nimmst dann noch zwei unterschiedliche Passwörter
Bitte NIEMALS zwei gleiche Passwörter für User und Adminaccount benutzen. Zur Not kann man an das Passwort des Users noch 4-5 Zeichen anfügen, aber niemals gleich.


@TerraX
Der Link ist auf den ersten Blick gut, auf den zweiten Blick behandelt er aber nur die Vorgängerversion von mod-security. Dazu siehe auch meinen Beitrag oben im vorletzten Absatz. :)
Vielen Dank für den Vergleich, ich habe meine Filterregeln nun auch noch schärfer gemacht. Was genau meinst du mit Authorisation? Wem gegenüber?
Ich benutze meinen Postfixserver nur für Weiterleitungen. Emailadressen haben inzwischen ja eh alle genug und ich wollte (vorerst) keine weiteren "kritischen" Dienste wie POP3/IMAP auf den Server bringen.

Grüße
Thomas
 
Ich mache das zur Zeit so das ich mich direkt als root einloggen kann -> Kommentare hierzu?
Mache ich genauso. Und darin sehe ich auch kein Sicherheitsproblem, und zwar aus folgenden Gründen:
  • Der Username lautet nicht "root" und ist nicht zu erraten
  • Das Passwort ist über 30 Zeichen lang und beinhaltet Groß- und Kleinbuchstaben sowie Zahlen
  • Einen Bruteforce-Versuch kriege ich eh mit


Grüße
 
"Der Username lautet nicht "root"" <- Dann loggst du dich auch nicht als root ein. Das Problem mit dem rootlogin bestelt im Prinzip nur darin, dass der Benutzername dem Angreifer bekannt ist. Wenn dieser auch noch den Benutzernamen erraten/bruteforcen muss, dauert das ganze halt einiges länger.
 
Bei mir sind Root-Logins auf den Servern erlaubt, da nur per Public-Key connected werden darf. Wer sich per Passwort authentifizieren will, bekommt somit eine Fehlermeldung.
 
Code:
PermitRootLogin without-password
ist auch eine sehr schöne Konfigurationseinstellung, die ich gerne verwende auf meinen Systemen.
 
Einen vernünftig konfigurierten ssh Dienst würde ich als unkritisch einschätzen. Auch wenn man keine keyfile benutzt und das "Hintergrund-Scriptkiddi-Rauschen" den Server belasten lässt, ist der Dienst an sich immer noch ziemlich sicher.

Daher würde ich das Thema gerne etwas in Richtung Apache und mod-security2 lenken. Hat jemand besonders wirksame Regeln geschrieben/gefunden die zu empfehlen sind? Wenn ich so in meine Logfiles sehe, würde ich versuchen dieses w00tw00t zu catchen. Macht das jemand und gibt es weitere dieser Standardscans?

Falls jemand Erfahrung mit einem XMPP-Dienst wie ejabberd hat fände ich auch eine Sicherheitseinschätzung hierzu super. Die Config scheint mir nicht besonders viele sicherheitsrelevante Dinge zu beinhalten. Ist der Dienst eher unkrititsch?

Viele Grüße
Thomas
 
Back
Top