1. Apache2 installieren:
    apt-get install apache2-mpm-prefork
  2. PHP5 mit MySQL-Unterstützung und Caching installieren:
    apt-get install libapache2-mod-php5 php5-mysql php-apc php5-curl php5-gd
    Hinweis:
    Die entscheidenden Konfigurationsdateien finden sich dann unter
    /etc/php5/apache2 und /etc/php5/apache2/conf.d
    Die Konfigurationsdateien der PHP-Module liegen unter /etc/php5/mods-available
  3. MySQL Server mit PhpMyAdmin-Verwaltung installieren
    Installation des MySQL-Server und der Datenbankverwaltung PhpMyAdmin mit folgendem Befehl:
    apt-get install mysql-server-5.5 phpmyadmin

    • mysql-server
      Man wird aufgefordert ein Passwort für den administrativen MySQL-Benutzer „root“ anzugeben.
    • phpmyadmin
      PhpMyAdmin fragt, ob es automatisch für einen Webserver eingerichtet werden soll: apache2 auswählen (mit Space-Taste)
      Im Anschluss wird man gefragt, ob dbconfig-common die benötigte MySQL-Datenbank für PhpMyAdmin einrichten soll: Ja auswählen
      Das administrative MySQL-Passwort wird danach gefordert werden, also eingeben.
      Es folgt „Bitte geben Sie ein Passwort ein, mit dem sich PhpMyAdmin beim Datenbankserver anmelden kann. Falls Sie das Feld frei lassen, wird automatisch ein zufälliges Passwort erzeugt.“ Kann man also frei lassen.
  4. PhpMyAdmin Zugang sicherer machen
    Die zu bearbeitende Konfigurationsdatei liegt in /etc/phpmyadmin/apache.conf
    Ändere die Zeile:
    Alias /phpmyadmin /usr/share/phpmyadmin
    zu zB:
    Alias /what_ever /usr/share/phpmyadmin
    apache.conf speichern und im Anschluss den Apache-Server neu starten mit
    /etc/init.d/apache2 restart
  5. Apache absichern (Anti-DDoS)
    Timeout Wert ändern
    Im Anbetracht von DDoS-Angriffen sollte man den Timeout-Wert in der
    /etc/apache2/apache2.conf
    ändern, dieser kommt mit 300 etwas gross daher.
    Timeout 45
  6. Guter Apache-DDOS Schutz: mod_evasive
    Das Apache-Modul mod_evasive Debianpackage.png libapache2-mod-evasive bietet einen guten Schutz gegen DDoS Angriffe, indem es die Zugriffe auf den Webserver innerhalb einer bestimmten Zeit registriert und einen attackierenden Client für eine gewisse Zeit sperrt.
    Installation mit
    apt-get install libapache2-mod-evasive
    Im Anschluss erstellt man einen extra Logfile Ordner
    mkdir /var/lock/mod-evasive
    Gibt die Rechte für den Ordner an den Benutzer www-data ab:
    chown www-data /var/lock/mod-evasive
    Es kann die bereits Vorhandene Konfigurationsdatei „/etc/apache2/mods-available/mod-evasive.load“ angepasst werden, mit dem Befehl
    nano /etc/apache2/mods-available/mod-evasive.load
    Standardmässig sieht die Datei so aus:
    LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
    ändere den Inhalt zu:

    LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 10
    DOSEmailNotify deine@email.ch
    DOSLogDir "/var/lock/mod-evasive"

    Die Anführungszeichen beim DOSLogDir sind sehr wichtig. Trage deine E-Mail Adresse bei DOSEmailNotify ein, dann wirst du über jeden Angriff via E-Mail benachrichtigt.
    Hinweis: Solltest du schon etwas mehr Traffic auf deiner Homepage haben, viele Bilder und Besucher, dann solltest du den DOSPageCount und DOSSiteCount Wert anpassen. Du könntest mit zu niedrigen Werten auch Web-Crawler aussperren. Aber das merkst du schon an den Benachrichtigungen
    Der Mod sollte standardmässig aktiviert sein, wir prüfen das mit
    a2enmod mod-evasive
    Deaktivieren kannst du mod-evasive mit
    a2dismod mod-evasive

  7. SSH-Server installieren und absichern (Fernwartung)
    OpenSSH-Server Installation
    Wir installieren den SSH-Server mit
    apt-get install openssh-server

    Verbindung zum SSH-Server herstellen
    Bei Wheezy ist der SSH-Client standardmässig installiert, mit dem Befehl
    ssh -l deinbenutzername deineserveradresse
    kannst du eine Verbindung zu deinem SSH-Server herstellen. Via Standard läuft SSH-Verkehr über den Port 22.

  8. SSH root-Login verbieten
    Um den SSH-Server ein Stück sicherer zu machen können wir den direkten Login für den SuperUser „root“ deaktivieren. Sei Dir jedoch bewusst darüber, dass du vorher mindestens einen weiteren Benutzer auf deinem System haben solltest. (Damit man sich als Benutzer einloggen kann und mit dem su – Befehl kann man dann auch wieder root-Rechte erlangen.)
    Wir editieren die Datei „nano /etc/ssh/sshd_config“ und ändern
    PermitRootLogin yes
    zu
    PermitRootLogin no
    Jetzt kann sich der Benutzer Root nicht mehr direkt über den SSH-Server am System anmelden. Man meldet sich ganz normal mit einem Benutzer an und wechselt dann mittels su in den Root-Account.
  9. SSH zusätzlich mit Fail2ban absichern
    Fail2ban installieren
    Debianpackage.png fail2ban ist bereits in den Paketquellen enthalten und lässt sich spielend leicht mit
    apt-get install fail2ban whois
    installieren. Wir installieren whois mit, um später weitere Informationen zum blockierten Client zu erhalten.

    Fail2ban konfigurieren (jail.conf)
    Wir wollen jetzt mal einen Blick auf die Hauptkonfigurationsdatei von Fail2ban werfen. Es handelt sich dabei um die Datei „nano /etc/fail2ban/jail.conf„.

    Generelle Einstellungen finden sich unter [DEFAULT]

    [DEFAULT]

    # "ignoreip" can be an IP address, a CIDR mask or a DNS host
    ignoreip = 127.0.0.1/8
    bantime = 600
    maxretry = 3

    backend = auto

    #
    # Destination email address used solely for the interpolations in
    # jail.{conf,local} configuration files.
    destemail = root@localhost

    Die wichtigsten Standard-Parameter:
    bantime: Kontrolliert die Blockzeit eines Clients, via Standard 600 Sekunden = 10 Minuten,
    maxretry: Steht für die maximalen Regelverstösse, bis ein Client blockiert wird
    destemail: Hier sollten wir unsere eigene E-Mail Adresse angeben (dazu später mehr)

    Hinweis: Die Filter-Einstellungen am Ende der Datei haben immer Vorrang.

    Der nächste Absatz beschäfigt sich mit der Aktion, die bei einem Ban ausgeführt werden soll:

    #
    # ACTIONS
    #

    banaction = iptables-multiport

    mta = sendmail

    Die wichtigsten Parameter:
    banaction: Die Standard-Aktion die ausgeführt werden soll; iptables-multiport kann man so stehen lassen.
    mta: Der MTA, der zum Versenden von Mails verswendet wird (Standard: sendmail)

    Ich möchte jetzt auf den destemail-Parameter zurückkommen: Sobald ein Client blockiert wird, könnt ihr euch eine E-Mail mit IP-Adresse samt WHOIS- und Logdatei Auszug zuschicken lassen.
    Das macht Fail2ban aber nicht von Haus aus, wir müssen folgende Zeile
    action = %(action_)s
    abändern zu
    action = %(action_mwl)s

    Der E-Mail Versand bei einem Client-Ban wäre damit aktiviert. Wir widmen uns jetzt den zu überwachenden Diensten, bei Fail2ban Filter genannt:

    [ssh]

    enabled = true
    port = ssh
    filter = sshd
    logpath = /var/log/auth.log
    maxretry = 6

    Wie wir erkennen können, ist der Standard-Filter ssh schon aktiviert. Hier müssen wir nichts ändern. Es gibt jedoch auch noch einen Filter gegen DDoS-Angriffe auf SSH, folgender Abschnitt:

    [ssh-ddos]

    enabled = false
    port = ssh
    filter = sshd-ddos
    logpath = /var/log/auth.log
    maxretry = 6

    „enabled = false“ ändern wir hier einfach ab zu „enabled = true“.

    Wir speichern die Konfigurationsdatei jail.conf. Jetzt müssen wir Fail2ban noch neustarten mittels
    /etc/init.d/fail2ban restart

    Hinweis: Die Konfigurationsdateien der Filter finden sich in „/etc/fail2ban/filter.d“ und die der Aktionen in „/etc/fail2ban/action.d“
    Hinweis: Fail2ban führt eine Logdatei unter /var/log/fail2ban.lorg

  10. logwatch installieren
    Damit man seinen Server unter Kontrolle hat ist es wichtig regelmässig die Logdateien der laufenden Serverdienste zu checken. Unter /var/log/apache2 liegen beispielsweise die Logdateien des Apache-Servers. Nun wäre es sehr mühsam, sich jeden Tag über SSH einzuloggen und jede einzelne Logdatei via Hand zu kontrollieren.
    Eine Menge Arbeit kann man sich mit Debianpackage.png logwatch sparen, welches täglich eine Zusammenfassung aller Logdateien erstellen und die Zusammenfassung dann an eine hinterlegte E-Mail Adresse schicken kann.
    Installation und Konfiguration von Logwatch

    logwatch installieren wir mit
    apt-get install logwatch

    Im Anschluss bearbeiten wir die Konfigurationsdatei „logwatch.conf“:
    nano /usr/share/logwatch/default.conf/logwatch.conf

    Dort setzen wir diese Einstellungen

    MailTo = root
    Output = mail
    Format = text

    Detail = High

    Die folgenden Zeilen sollte man ausklammern:

    #Service = "-zz-network" # Prevents execution of zz-network service, which
    # prints useful network configuration info.
    #Service = "-zz-sys" # Prevents execution of zz-sys service, which
    # prints useful system configuration info.
    #Service = "-eximstats" # Prevents execution of eximstats service, which
    # is a wrapper for the eximstats program.

    Wir speichern die Konfigurationsdatei ab.

    Cronjob für Logwatch anlegen (Mail-Versand)
    Folgende Zeile in einfügen:
    nano /etc/crontab
    0 */3 * * * root /usr/sbin/logwatch --mailto deine@email.ch>/dev/null 2>&1

    Die E-Mail Adresse muss angepasst werden, damit sie auch im richtigen Postfach ankommt. Der Cron-Daemon wird uns jetzt alle 3-Stunden eine Logwatch-Report via E-Mail schicken.

  11. cron-apt installieren:
    apt-get install cron-apt

    Notify Datei kopieren
    cp /usr/share/doc/cron-apt/examples/9-notify /etc/cron-apt/action.d/

    config File anpassen:
    nano /etc/cron-apt/config
    Folgende 2 Zeilen einfügen:
    MAILTO=”deine@email.ch”
    MAILON=”upgrade”

    Evtl. Cron anpassen. Voreingestellt ist jede Nacht um 4 Uhr
    nano /etc/cron.d/cron-apt