Stabiler Debian Webserver einrichten
- Apache2 installieren:
apt-get install apache2-mpm-prefork
- 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
- 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.
- mysql-server
- 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
- 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
- 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.soDOSHashTableSize 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
- 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. - 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. - 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 = 3backend = 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 - 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 Logwatchlogwatch 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 = textDetail = 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.
- 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
Schreibe einen Kommentar