Mal ein Tutorial für Unsere Coder anfänger ...
Es ist wie gesagt nur ein Beispiel und es geht auch noch besser .. aber es soll ja auch jeder verstehen können ...
Da ich selbst nur mit SuSE und Debian arbeite, schließe ich Fehler nicht aus, und bin über Korrekturen dankbar! Das Tutorial ist extra einfach gehalten, damit es auch jeder ***** soweit versteht ;o)
Dieses Tutorial bezieht sich nur auf LINUX Systeme!
-------------------------------------------------------------
1. System updaten
Sehr wichtig: als erstes das System updaten. Auch wenn Ihr eine Vorinstallation vom Provider habt, die aktualisieren ihr Template nicht alle 2 Wochen, sondern etwa alle 2 Monate, wenn überhaupt. Deswegen, updaten! Sofort!
Wie das geht, ist von Distribution ("Marke" des Linux Systems) unterschiedlich, bei
- Debian: apt-get update dann apt-get dist-upgrade
- SuSE: YaST benutzen
- Andere: RPM benutzen und damit neue Pakete installieren oder lest in Euren Handbüchern zur jeweiligen Distribution nach.
2. SSH gegen Angriffe absichern, Teil A: root Login verbieten
Damit kein Scriptkiddie über SSH Euer root Passwort knackt, solltet Ihr von vorneherein den Login mit root über SSH verbieten. Folgende Schritte ausführen:
- Erstmal neuen Benutzer anlegen:
useradd Name
"Name" sollte natürlich nicht "admin", "login", "ssh" oder so was sein, das würde ja keinen Sinn machen. Am besten den eigenen Vornamen, oder "Firmen"namen oder was weiss ich, etwas, worauf man nicht so schnell kommt.
- Testen, ob Ihr mit dem User per SSH reinkommt, sonst sperrt Ihr Euch aus! Und Kennwort festlegen:
passwd Name
und dann den Anweisungen auf dem Bildschirm folgen.
- In der Datei sshd_config (meist unter /etc/ssh) die Zeile
PermitRootLogin yes
ändern in
PermitRootLogin no
- Jetzt probieren, ob Ihr noch mit "root" reinkommt. Wenn Ihr noch weiter reinkommt, den Server mal neu starten, das ist am einfachsten ;-) Alternativ könnt Ihr den SSH service selbst neu starten bzw. die Konfiguration neu einlesen lassen.
Ab jetzt könnt Ihr Euch mit dem neuen Benutzer einloggen (der soweit ja keine Rechte hat und damit eher ein Dummy ist). Mit dem Befehl
su -
könnt Ihr zum root-Benutzer wechseln, dabei müsst Ihr dann natürlich das Root-Passwort eingeben!
3. SSH gegen Angriffe absichern, Teil B: Auf Protokoll 2 umsteigen
In der Datei sshd_config (meist unter /etc/ssh) folgende Zeile ändern (wenn Euer Provider das nicht gemacht hat):
Protocol 1
wird zu
Protocol 2
4. SSH gegen Angriffe absichern, Teil C: Nach X Versuchen bannen
Am besten aussortieren, wenn der jenige gerade angreift, deswegen sowas wie fail2ban installieren.
302 Found
Hier eine Installationsanleitung:
MANUAL 0 8 - Fail2ban
5. Ports absichern
Die Firewall sollte so konfiguriert sein, dass nur die Ports offen sind, die Du brauchst, d.h. alles sperren außer SSH, FTP, Web, POP/SMTP Ports.
Am besten geht das bei vServern (wenn Euer Provider Virtuozzo verwendet) über die Virtuozzo Firewall. Dort haben sie Euch einige Konfigurationen vorgegeben, einfach erstmal die Standardumgebung nehmen und unter "Regel hinzufügen" / "Regel entfernen" die Ports freigeben, die gebraucht werden. Unter Virtuozzo sind die dann auch schön beschriftet mit "Web
server" und "SSH login" usw.
Ansonsten: Klassisch per iptables.
6. "Sicherheitssoftware" installieren
Da gibt es einige Softwares, ich selbst mag chkrootkit, rkhunter und clamAV ganz gerne, deswegen rede ich jetzt mal über die ;-)
Mit chkrootkit und rkhunter könnt Ihr prüfen, ob jemand in Eurem System Software installiert hat, mit denen man den
Server steuern kann. Das funktioniert ähnlich wie ein Trojaner. Mehr dazu in der Wikipedia:
Rootkit – Wikipedia
Unter Debian z.B. wird das so installiert:
apt-get install chkrootkit
apt-get install rkhunter
ClamAV ist ein kostenloser Virenscanner, den einzurichten ist etwas "kniffliger" für Unwissende und würde den Rahmen dieses Tutorials sprengen. ClamAV gibts bei
www.clamav.org
7. Die Programme am besten per Cronjob ausführen
Das sichert einfach, dass Ihr so früh wie möglich von einer Infektion erfahrt und reagieren könnt. Ich habe selbst ein kleines
Shell Script zusammengebastelt, welches Ihr gerne benutzen dürft. Es führt ClamAV aus (der dann die Verzeichnisse /root, /home und /tmp scannt), chkrootkit und rkhunter -- und mailt Euch dann die Logfiles.
--> E-Mail Adresse ersetzen, und ggf. die Logfile Pfade ändern. Der Ordner muss exisitieren, die Dateien selbst werden dann erstellt, wenn das Script ausgeführt wird (nach Datum sortiert).
Code:
#!/bin/sh
### LOG FILES PFADE ###
logfile1=/var/log/security/chkrootkit_scan_`date +%y%m%d`.log
logfile2=/var/log/security/rkhunter_scan_`date +%y%m%d`.log
logfile3=/var/log/security/clamav_scan_`date +%y%m%d`.log
### E-MAIL EMPFAENGER ###
email=deine@adresse.tld
### CHKROOTKIT ###
/usr/sbin/chkrootkit > $logfile1
cat $logfile1 | mail -s "chkrootkit !TREFFER!" $email
### RKHUNTER ###
/usr/bin/rkhunter --update >> /dev/null
/usr/bin/rkhunter -c --cronjob --quiet >> $logfile2
cat $logfile2 | mail -s "rkhunter !TREFFER!" $email
### CLAMAV ###
clamscan -r --quiet -l $logfile3 /home /root /tmp
cat $logfile3 | mail -s "ClamAV-Scan REPORT" $email
Abspeichern als "checkrootkit.sh" in einem beliebigen Ordner (und die Rechte natürlich so setzen, dass der Cron darauf zugreifen kann!! sonst wird das script nicht ausgeführt!), und danach in die Konsole eintippen:
crontab -e
Im folgenden Fenster dann eingeben:
0 3 * * * /pfad/zur/datei/checkrootkit.sh
(/pfad/zur/datei natürlich ersetzen!) Dann wird das Script morgens um 3 Uhr täglich ausgeführt. Wem das mit dem ClamAV Scan zu lange dauert, der kann das auch einfach rausnehmen. Ich mache es einfach, die Ressourcen opfere ich gerne.
--> nicht vergessen, dass ClamAV sich über freshclam auch regelmäßig updated, sonst ist das für die Wurst <--
8. Software aktuell halten! Scripte sicher halten!
Gerade bei Services, wie dem Apache oder postfix ist es SEHR wichtig, dass die Programme aktuell sind, damit Sicherheitslücken geschlossen werden. Vergesst nicht: Bei allem Blabla das wir über SSH gemacht haben, das selbe gilt auch für den FTP service: Wenn der unsicher ist, ist der Angreifer auch schnell drinnen.
Die meisten Vorinstallationen der Provider sind aber relativ gut, sodass die Services vernünftig konfiguriert sein sollten (!), aber bei einem frisch (vor)installierten System immer erstmal in die Konfiguration schauen und versuchen, das nachzuvollziehen, denn nur dann seid Ihr wirklich sicher:
Wenn Ihr es VERSTEHT.
Selbes gilt auch für Scripte, z.B. php-Script Eurer Webseite. SQL Injections und Fremdcode sind nur zwei Gefahren. Achtet also darauf, dass Ihr sauber programmiert, alle Benutzereingaben abfangt und ggf. von Schadcode bereinigt. Am besten ein Security-Script einbauen (z.B. über prepend_file in der php.ini), das sicher dann nochmal ab. Kann ja nix schaden.
---
Mir persönlich reicht das erstmal, wenn Ihr Verbesserungen habt, nehme ich die gerne an, dann erweitern wir das. Der
Server wird auch dadurch nicht 100% sicher sein, aber er ist sicherer, als vorher. Das ersetzt auch nicht regelmäßige Updates (s. Punkt 1!!)!!
Ich schreibe das hier einfach, weil ich es leid bin, dass einfach nur gemeckert wird "Scriptkiddies, es ist wieder Ferienzeit usw usf", anstatt was dagegen zu machen. Durch solche gehackten
Server fließt viel Spam, und ich denke: Kündigen werden die ihren
Server eh nicht, deswegen lieber dafür sorgen, dass sie es besser machen.