[HOWTO] Debian 6.x System Konfiguration & Absicherung (LEMP, E-Mail, FTP, OpenPanel, DDoS, Spam, uvm.)

  • [font='Verdana']

    HOWTO
    Debian 6.0 System Konfiguration & Absicherung
    (LEMP, E-Mail, FTP, OpenPanel, DDoS, Spam, uvm.)

    Version 1.0


    Hallo zusammen!


    In diesem Tutorial erfährt man alles über die Konfiguration und Absicherung eines Debian 6.x Systems. Am Ende wird euer Server folgendes können: nginx Webserver, E-Mail (Postfix, Courier) IMAP/POP3 mit SSL/TLS, FTP mit TLSv1 (vsFTPd), OpenPanel als Administrationsoberfläche für Email, Firewall und Spamfilter. Außerdem Software Protection gegen DDoS, Bruteforce, Spam, SQLInjections, XSS, Bots, etc. (Deflate, Fail2Ban, ZB Block) .



    Die Themen:


    #1 Einleitung
    #2 Grundsätzliches
    #2.1 Vorraussetzungen
    #2.2 Vorbereitungen
    #3 LEMP
    #3.1 Was ist LEMP?
    #3.2 MySQL
    #3.3 PHP
    #3.4 nginx
    #3.5 nginx Tuning
    #4 FTP
    #5 OpenPanel
    #5.1 Core
    #5.2 Zusatzpakete
    #6 Absicherung
    #6.1 SSH
    #6.2 Fail2Ban
    #6.3 Deflate
    #6.4 Iptables
    #6.5 ZB Block
    #7 Tipps & Tricks



    [#1 Einleitung]


    Besonders für Anfänger ist es schwierig ein System richtig einzurichten. Allein aus rechtlichen Gründen ist man als Besitzer eines Root/vServers für alles verantwortlich, umso wichtiger wird eine vernünftige Konfiguration. Es gibt nichts schlimmeres als eine gehackte Website oder irgendwelche Kinder, die versuchen unser System lahmzulegen oder unseren Server als Spam-Schleuder benutzen. Dieses Tutorial richtet sich vor allem an diejenigen, die bisher noch keine Kenntnisse besitzen und Probleme haben, Übersicht und Kontrolle zu behalten.



    [#2 Grundsätzliches]


    #2.1 Vorraussetzungen


    • Grundkenntnisse Linux/Kommandozeile
    • Debian 6.0 Minimal 64 bit frisch installiert
    • KVM Server
    • PuTTY
    • Geduld, Tee/Kaffee


    Für alle User die Froxlor einsetzen möchten, hier entlang: [HOWTO] Debian 6.x System Konfiguration & Absicherung (LEMP, E-Mail, FTP, OpenPanel, DDoS, Spam, uvm.)


    #2.2 Vorbereitungen


    VIM - Ein guter Editor und mein Favorit


    Code
    1. aptitude install vim


    Dieser Editor besteht aus einem Eingabe- und einem Kommandomodus. Hier eine Auflistung der wichtigsten Funktionen und Befehle:


    Alle vim-Kommandos (beginnen mit ":")


    [Blocked Image: http://i.epvpimg.com/pCA5g.jpg]


    Erweiterung der Sourcelist


    Die sources.list beinhaltet eine Liste von Archiven, aptitude sucht im Inventar nach den Paketen die man installieren möchte. Durch aptitude update wird diese Liste geupdatet. Wir müssen eine Fremdquelle hinzufügen, da einige Pakete nicht in der Debian Liste zu finden sind. Dotdeb - The repository for Debian-based LAMP servers bietet aktuelle Pakete für Debian Systeme an, unter anderem neue MySQL, nginx und PHP Versionen.


    Code
    1. vim /etc/apt/sources.list


    Inhalt löschen und folgendes einfügen:


    Ein Schlüssel muss importiert werden, mit dem die Pakete der Quelle unterschrieben sind:

    Code
    1. wget http://www.dotdeb.org/dotdeb.gpg
    2. cat dotdeb.gpg | apt-key add -
    3. apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EAC69B9


    Pakete aktualisieren:

    Code
    1. aptitude update



    [#3 LEMP]


    #3.1 Was ist LEMP?


    LEMP unterscheidet sich nicht viel von LAMP. LAMP setzt sich zusammen aus Linux Apache MySQL und PHP. Es wird lediglich das A durch ein E ersetzt, doch was bedeutet das? Statt Apache wird nun nginx, also E verwendet.


    Wieso nginx? Apache ist sehr einfach zu konfigurieren, kompatibel zu mehreren Plattformen und standartmäßig auf fast allen Distributionen vorhanden. Leider bringt Apache viele unnötige Erweiterungen mit sich und glänzt nicht gerade mit Performance. Besonders auf vServern stößt man bereits bei kleineren/mittleren Webseiten an die RAM-Limits. Kleinere DDoS Angriffe zwingen den Apache Server sehr schnell in die Knie. nginx ist auf Performance ausgelegt: sehr leichtgewichtig und vor allem schnell! Es gibt kaum Einschränkungen und die Konfiguration ist trotz allen Irrtums sehr einfach gehalten.



    #3.2 MySQL


    MySQL installieren

    Code
    1. aptitude install mysql-server


    Ein sicheres Passwort ist hier selbstverständlich. Die Konfiguration ist nicht nötig, da MySQL standartmäßig schon perfekt abgesichert ist. Da der Server nur auf Anfragen von localhost (127.0.01) reagiert, werden Verbindungen von außen automatisch geblockt. Trotzdem muss keine Änderung vorgenommen werden, denn MySQL unterstützt eine SSH Connection die mittels PuTTY lokal getunnelt werden kann. So kann man ohne Einschränkung wie gewohnt mit dem Programm seines Vertrauens arbeiten. (Mehr dazu unter Tipps & Tricks)
    Die Konfigurationsdatei befindet sich in /etc/mysql/my.cnf. Das dazugehörige Init-Script findet man unter /etc/init.d/mysql



    #3.3 PHP


    PHP installieren

    Code
    1. aptitude install php5-fpm php5-mysql php5-gd php5-curl php5-apc


    PHP ist auch von Haus aus gut eingerichtet, allerdings empfehle ich einige Einstellungen zu ändern.
    Die Konfiguration von PHP-FPM findet man in /etc/php5/fpm/php-fpm.conf, das dazugehörige Init-Script unter /etc/init.d/php5-fpm und die PHP Einstellungen in /etc/php5/fpm/php.ini


    Prozesskonfiguration:

    Code
    1. vim /etc/php5/fpm/php-fpm.conf


    Folgende Einträge ändern:

    Code
    1. emergency_restart_threshold = 10
    2. emergency_restart_interval = 1m
    3. process_control_timeout = 10s


    Erklärung: Wenn 10 PHP-Prozesse innerhalb einer Minute abstürzen, so wird der Dienst neugestartet. Der letzte Eintrag legt die Zeit fest, wie lange diese Prozesse auf den Haupt-Prozess warten sollen.


    PHP über einen Socket laufen lassen (Mehr dazu unter Tuning)

    Code
    1. vim /etc/php5/fpm/pool.d/www.conf


    aus:

    Code
    1. listen = 127.0.0.1:9000


    wird:

    Code
    1. listen = /var/run/php5-fpm.socket


    Dienst neustarten, damit die Änderung auch wirksam wird

    Code
    1. /etc/init.d/php5-fpm restart


    php.ini absichern:

    Code
    1. vim /etc/php5/fpm/php.ini


    safe_mode prüft die Berechtigung des Users, bevor eine Aktion gestartet wird.
    Diese Einstellung ist veraltet und wurde mit der Version 5.4 entfernt.
    Für Berechtigungen ist das Betriebssystem zuständig und hat nichts in PHP verloren

    Code
    1. safe_mode = Off


    Mit dieser Einstellung kann man Funktionen verbieten.
    Einige Funktionen sollten definitv nicht verfügbar sein und werden in der Regel nicht gebraucht.

    Code
    1. disable_functions = escapeshellcmd, exec, ini_restore, passthru, popen, proc_nice, proc_open, shell_exec, system


    Soll der Webserver den "X-Powered-By" Header senden?
    Diese Einstellung ist optional.

    Code
    1. expose_php = Off


    PHP-Fehlermeldungen ausschalten, das erschwert Angreifern das Suchen nach Sicherheitslücken.
    Zum debuggen sollte diese Einstellung wieder eingeschaltet werden.

    Code
    1. display_errors = Off


    Diese Funktion ist für die meisten Sicherheitslöcher verantwortlich. GET und POST werden global verfügbar gemacht und überschreiben andere Variablen mit dem selben Namen.
    Möchten wir das? Natürlich nicht.

    Code
    1. register_globals = Off


    Standartmäßig dürfen Dateien, die nicht auf unserem Server liegen, geöffnet werden.
    Da dies eine massive Sicherheitslücke darstellt, schalten wir es aus.

    Code
    1. allow_url_fopen = Off


    Ähnlich wie allow_url_open, diese Einstellung erlaubt es sogar Dateien von anderen Servern zu inkludieren. Das möchten wir natürlich auch nicht.

    Code
    1. allow_url_include = Off


    Scripte die mit date() arbeiten, werden euren error.log sehr schnell füllen wenn die timezone nicht definiert wurde.

    Code
    1. date.timezone = Europe/Berlin


    Weitere Informationen zum Thema Sicherheit unter PHP findet man hier: Link

  • #3.4 nginx


    nginx installieren

    Code
    1. aptitude install nginx


    Die Konfigurationsdatei von nginx liegt in /etc/nginx/nginx.conf,das dazugehörige Init-Script unter /etc/init.d/nginx und die vHosts Dateien im Ordner /etc/nginx/sites-enabled


    Konfiguration anpassen:

    Code
    1. vim /etc/nginx/nginx.conf


    Folgende Einstellungen sollten geändert werden:

    Code
    1. #Mit wie vielen Prozessen darf nginx arbeiten? Diese sollten gleich der Anzahl der im
    2. #System verbauten CPU-Kernen sein.
    3. #Herausfinden kann man das mit dem Befehl "cat /proc/cpuinfo | grep processor"
    4. worker_processes x;
    5. #Wie viele Verbindungen dürfen pro Prozess aufgebaut werden?
    6. #Maximale Verbindungen = worker_processes * worker_connections
    7. worker_connections 1024;


    Virtual-Hosts Konfiguration:

    Code
    1. rm /etc/nginx/sites-enabled/default


    Wir erstellen unsere eigene vHosts Datei, hierfür hab ich eine bereits fertig konfigurierte bereitgestellt:

    Code
    1. vim /etc/nginx/sites-enabled/deine-seite.de.conf



    Folgende Einstellungen sollten geändert werden:
    #IP des Servers, rausfinden kann man diese durch ifconfig
    listen 12.123.123.123:80 default;


    #Hostname oder Domain (Host kann man rausfinden durch hostname)
    server_name deine-seite.de *.deine-seite.de;


    Ordner erstellen und www-data Rechte erteilen

    Code
    1. mkdir -p /var/www/htdocs && mkdir /var/www/log && chown www-data:www-data /var/www/htdocs


    nginx starten:

    Code
    1. /etc/init.d/nginx start


    Fertig ist unser Schmuckstück, lass es uns doch mal testen:

    Code
    1. echo "Herzlichen Glueckwunsch, du hast nginx erfolgreich eingerichtet" > /var/www/htdocs/index.php


    Nun kann man die IP-Adresse oder Domain besuchen um zu checken, ob auch alles richtig konfiguriert wurde!
    Übrigens: Subdomains wie forum.deine-domain.de oder mail.deine-domain.de werden genauso angelegt, man muss lediglich eine neue vHosts Datei erstellen und die Domain unter server_name eintragen. (Bsp. server_name forum.deine-seite.de;) Außerdem sollte man das Heimverzeichnis unter root ändern. Optional kann auch für jede Domain ein seperater Log erstellt werden, hierzu einfach eine andere Datei angeben.
    Wichtig! nginx wird nicht starten, wenn der Ordner für die logs nicht vorhanden ist!



    [#3.5 nginx Tuning]


    Gzip-Optimierung


    Standartmäßig ist gzip bereits aktiviert. Betreibt man jedoch ein CMS, Blog, o. ä., werden auch Stylesheets, Feeds und nicht selten zahlreiche JavaScript-Files benutzt. All diese Ressourcen können vom Webserver ebenfalls verkleinert ausgegeben werden.


    Code
    1. vim /etc/nginx/nginx.conf


    Code
    1. gzip_vary on;
    2. gzip_proxied any;
    3. gzip_comp_level 6;
    4. gzip_buffers 16 8k;
    5. gzip_http_version 1.1;
    6. gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;



    Und zu guter Letzt die Konfiguration für optimale Leistung. Da es bereits ein sehr umfangreiches Tutorial dazu gibt, möchte ich hier nicht weiter darauf eingehen. Konfigurierung Ihres LEMP Systems (Linux, nginx, MySQL, PHP-FPM) für maximale Leistung


    [#4 FTP]


    Den FTP-Server liefert uns vsftpd. vsftpd steht für “Very Secure FTP Daemon”. Doch uns wird nicht nur Sicherheit versprochen, der Server bietet auch gute Performance und wenig RAM Verbrauch - genau das was wir brauchen.
    Die Konfigurationsdatei befindet sich in /etc/vsftpd.conf und das dazugehörige Init-Script unter /etc/init.d/vsftpd. Die Userliste sollte sich hier befinden: /etc/vsftpd.userlist


    vsftpd installieren:

    Code
    1. aptitude install vsftpd


    Der Server läuft bereits. Da noch nichts konfiguriert ist, stoppen wir den Dienst:

    Code
    1. /etc/init.d/vsftpd stop


    SSL Key erstellen:

    Code
    1. mkdir -p /etc/ssl/private && chmod 700 /etc/ssl/private
    2. openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem


    Konfigurationsdatei öffnen:

    Code
    1. vim /etc/vsftpd.conf


    Folgende Einstellungen sollten übernommen werden:


    Folgende Zeilen am Ende der Config einfügen:


    Passive Ports in der Firewall freischalten:

    Code
    1. iptables -A INPUT -i eth0 -p tcp --dport 40000:40100 -j ACCEPT
    2. /etc/init.d/iptables-save



    nlogin in die shell eintragen


    Code
    1. vim /etc/shells


    Am Ende der Datei einfügen

    Code
    1. /usr/sbin/nologin


    Benutzer anlegen:

    Code
    1. useradd -d /var/www/htdocs -s /usr/sbin/nologin BENUTZERNAME


    Benutzerpasswort erstellen:

    Code
    1. passwd BENUTZERNAME


    Benutzer erlauben Daten zu schreiben. Da www-data alles darf, wird es hier keine Konflikte geben:

    Code
    1. chown -R BENUTZERNAME /var/www/htdocs && chmod 775 /var/www/htdocs


    Benutzerliste erstellen:

    Code
    1. vim /etc/vsftpd.userlist


    Benutzer in die Liste eintragen (Jeden Benutzer untereinander):

    Code
    1. BENUTZERNAME


    Benutzergruppe erstellen:

    Code
    1. addgroup ftpusers


    Benutzer mit der Gruppe verbinden:

    Code
    1. usermod -Gftpusers BENUTZERNAME


    Wichtig! Alle zukünftigen Benutzer müssen mit dieser Gruppe verbunden werden. Bitte auch daran denken, jeden User in die Liste einzutragen: /etc/vsftpd.userlist


    Der FTP Server ist fertig eingerichtet und kann nun gestartet werden:

    Code
    1. /etc/init.d/vsftpd start
  • [#5 OpenPanel]


    OpenPanel ist ein freies Open Source Control Panel. (OpenPanel) Es ist sehr benutzerfreundlich und bietet viele Funktionen.
    Durch das Modulsystem ist es möglich einzelne Pakte zu installieren und nicht benötigte Erweiterungen einfach auszulassen. Simpel, sicher und vor allem nicht unnötig überladen wie manch andere Administrations Panel.



    #5.1 Core


    Core installieren:

    Code
    1. aptitude install openpanel-core


    Passwort ändern:

    Code
    1. openpanel-cli
    2. [openpanel]% password user openpanel-admin
    3. [openpanel]% exit


    Das Interface erreicht man via https über den Port 4089. Bsp: https://www.deine-seite.de:4089



    #5.2 Zusatzpakete


    OpenPanel bietet viele Module, eine Übersicht bekommt man mit dem Befehl: aptitude search openpanel
    Weitere Informationen gibt es auf www.openpanel.com


    Firewall Modul:

    Code
    1. aptitude install openpanel-mod-iptables


    Mailserver Installieren:

    Code
    1. aptitude install postfix


    Während der Installation von Postfix werden einige Fragen gestellt. Bei configuration type wählen wir Internet Site.
    Bei system mail name wird der Hostname des Servers eingetragen. (hostname in der Shell ausführen).


    Mailserver Modul:

    Code
    1. aptitude install openpanel-mod-postfixcourier


    Spamfilter:

    Code
    1. aptitude install openpanel-mod-spamassassin


    Leider hat es der POP3 SSL Port nicht in die Vorkonfiguration geschafft, diesen müssen wir in der OpenPanel Firewall freischalten. Port: 995 Protokoll: TCP. Wie man Email-Konten einrichtet, wird in der OpenPanel Dokumentation ausführlich erklärt.


    Weitere Module können je nach Bedarf installiert werden. Man sollte jedoch darauf achten, dass manche Pakete automatisch Apache2 installieren möchten. Das könnte euer OpenPanel zerschießen, nginx wird es nicht beeinträchtigen, da Apache nicht starten kann. Pakete können durch aptitude purge PAKETNAME wieder sicher entfernt werden. Für die Profis unter euch gibt es von jedem OpenPanel Modul den Sourcecode. Vielleicht findet sich ja jemand, der das Apache Modul für nginx optimieren kann (:


    [#6 Absicherung]


    Sicherheit ist ein wichtiges Thema, deshalb wird euer Server gegen SQLInjections, XSS, Bots, TOR & gelistete IPs/Domains, Spam und DDoS gesichert. Man darf jedoch nicht vergessen, dass eine Software Protection nichts gegen größere DDoS Angriffe ausrichten kann, in diesem Fall hilft nur noch eine gute Hardwarelösung, ein DDoS Proxy oder ein Dienst wie Cloudflare. Natürlich gibt es immer gewisse Grenzen, ab einer gewissen Größe bringt auch die beste Infrastruktur nichts. Euer Server verhindert in jedem Fall Bruteforce-Angriffe und hat durch die Voreinstellung von OpenPanel und Deflate eine solide Softwarelösung gegen Scriptkiddies und andere Idioten. Die Änderung der Systemconfig und der Einsatz von Fail2Ban runden das Ganze ab und schützen euch gegen das Böse aus dem Netz.



    #6.1 SSH


    Wir ändern den SSH-Port. Scriptkiddies und Bots brechen ihr Vorhaben ziemlich schnell ab, wenn bereits am Anfang die Verbindung zum Standartport scheitert. In Verbindung mit Fail2Ban eine absolut sichere Sache. Zunächst sucht man sich einen passenden Port aus (Liste der standardisierten Ports) In diesem Beispiel verwende ich den Port 13195


    Code
    1. vim /etc/ssh/sshd_config


    Code
    1. Port 13195


    Besitzt euer Server mehr als eine IP, sollte SSH nur auf einer davon lauschen. Bsp. ist der Server über 1.2.3.4 und 4.3.2.1 erreichbar, dann könnte die Einstellung wie folgt aussehen:

    Code
    1. ListenAddress 127.0.0.1
    2. ListenAddress 1.2.3.4


    Bitte nicht vergessen den neuen Port in der OpenPanel Firewall freizuschalten und den alten Port 22 zu blockieren.



    #6.2 Fail2Ban


    Fail2Ban überwacht Logs und bannt, sobald eine nicht gewollte Aktivität entdeckt wird. Es schützt vor Bruteforce-Attacken, kann SQLInjections erkennen und DDoS verhindern. Die Konfigurationsdatei findet man in /etc/fail2ban/jail.conf und das dazugehörige Init-Script unter /etc/init.d/fail2ban


    Paket installieren

    Code
    1. aptitude install fail2ban


    Einrichtung:

    Code
    1. vim /etc/fail2ban/jail.conf


    SSH:


    Postfix:


    vsFTPd:

    Code
    1. [vsftpd]
    2. enabled = true
    3. port = ftp,ftp-data,ftps,ftps-data
    4. filter = vsftpd
    5. logpath = /var/log/vsftpd.log
    6. maxretry = 5



    nginx:

    Code
    1. [apache]
    2. enabled = true
    3. port = http,https
    4. filter = apache-auth
    5. logpath = /var/www/log/error.log
    6. maxretry = 10


    Code
    1. [apache-noscript]
    2. enabled = true
    3. port = http,https
    4. filter = apache-noscript
    5. logpath = /var/www/log/error.log
    6. maxretry = 10


    Am Ende einfügen:

    Code
    1. [php-url-fopen]
    2. enabled = true
    3. port = http,https
    4. filter = php-url-fopen
    5. logpath = /var/www/log/access.log
    6. maxretry = 1


    Code
    1. vim /etc/fail2ban/filter.d/apache-noscript.conf


    An letzter Stelle bei failregex = einfügen:

    Code
    1. */(foo|bar|xyz)" (is not found|failed) \(2: No such file or directory\), client: <HOST>



    #6.3 Deflate


    Deflate ist simpel: Es überprüft jede Minute, wie viele Verbindungen pro IP zu dem Server aufgebaut sind. Wird die festgelegte Grenze überschritten, bannt deflate die IP.


    Code
    1. cd /tmp && mkdir deflate && cd deflate


    Code
    1. wget http://www.inetbase.com/scripts/ddos/install.sh
    2. chmod 0700 install.sh
    3. ./install.sh


    Das nächte Fenster kann man mit q wieder verlassen.


    Code
    1. vim /usr/local/ddos/ddos.conf


    Code
    1. NO_OF_CONNECTIONS=60
    2. APF_BAN=0
    3. KILL=1
    4. EMAIL_TO="deine@email.de"
    5. BAN_PERIOD=3600


    Erklärung: Wenn eine IP pro Minute mehr als 60 Verbindungen zu dem Server aufbaut, wird diese gekillt und für eine Stunde gebannt. Hier je nach Bedarf die Anzahl verändern. Zusätzlich wird eine E-Mail an die eingetragene Adresse geschickt.


    Cronjob hinzufügen:

    Code
    1. crontab -e


    An letzter Stelle einfügen:

    Code
    1. * * * * * /usr/local/ddos/ddos.sh &> /dev/null


    Ctrontab wieder schließen (STRG + X, dann Y und ENTER)


    Der Eintrag bedeutet, dass ddos.sh jede Minute ausgeführt wird. Die Ausgabe soll an /dev/null geschickt werden. /dev/null bewirkt, dass die Meldung ins Nichts verschwindet. Wenn man es nicht macht, wird root@localhost jede Minute eine Übersicht der zu dem Zeitpunkt gemessenen Verbindungen erhalten.


    Letzte Änderung:

    Code
    1. vim /usr/local/ddos/ddos.sh


    Damit das Script auf Debian 6 funktioniert, muss die erste Zeile oben geändert werden:

    Shell-Script
    1. #!/bin/bash



    #6.4 Iptables/Firewall Konfiguration


    iptables ist ein Kommandozeilen User Interface zur Konfiguration / Verwaltung der im jeweiligen Linux Kernel eingebauten netfilter - Firewall Funktionen. Die Grundkonfiguration der iptables ist bereits optimal eingestellt und kann über das Firewallmodul von OpenPanel gesteuert werden.
    Wer die Firewall entsprechend seiner Anforderungen perfektionieren möchte, kann das Netz nach Tutorials durchsuchen. Hier kann ich die Tutorials von www.cyberciti.biz empfehlen.


    System abhärten:


    Code
    1. vim /etc/sysctl.conf


    Folgende Änderungen vornehmen

    Code
    1. net.ipv4.conf.default.rp_filter=1
    2. net.ipv4.conf.all.rp_filter=1
    3. net.ipv4.ip_forward=0
    4. net.ipv4.conf.all.accept_source_route=0
    5. net.ipv4.conf.all.accept_redirects = 0
    6. net.ipv4.conf.all.secure_redirects = 0
    7. net.ipv4.conf.all.send_redirects = 0
    8. net.ipv4.tcp_syncookies=1



    Am Ende der Datei einfügen


    Die neuen Settings laden:

    Code
    1. sysctl -p


    Für die Übersicht aller verfügbaren Einstellungen kann man folgenden Befehl benutzen:

    Code
    1. sysctl -a > list && vim list
  • #6.5 ZB Block


    ZB Block ist ein php security script und bietet Schutz vor Bots, SQLInjections, Website defacement, XSS, RFI, überprüft externe Blacklists und blockt unerwünschte Domains, IPs und User Agents. Mehr Informationen zu ZB Block findet man hier: www.spambotsecurity.com/zbblock.php


    Nun zur Installation:


    Wenn wir mit der Einrichtung von ZB Block fertig sind, muss der Ordner geschützt werden, da nginx nichts mit der .htacces anfangen kann.


    Code
    1. vim /etc/nginx/sites-enabled/EUREVHOSTS.conf


    In der Beispiel.conf ist bereits eine sample, hier könnte man die folgenden Zeilen einfügen:



    [#7 Tipps & Tricks]


    Wie stelle ich eine Verbindung zum MySQL Server her, wenn dieser nur Verbindungen von localhost erlaubt? Die Antwort ist PuTTY
    [Blocked Image: http://i.epvpimg.com/7oulc.jpg]


    [Blocked Image: http://i.epvpimg.com/ZGcUb.jpg]


    PuTTY starten und mit SSH verbinden. Nun kann man sich ganz einfach über 127.0.0.1:3306 auf dem MySQL Server einloggen. Mein persönlicher Favorit unter den MySQL-Datenbank Tools ist SQLyog.
    [Blocked Image: http://i.epvpimg.com/F1PWg.jpg]



    Wir sind am Ende dieses Tutorials angekommen. Über Anregungen und Kommentare würde ich mich sehr freuen. Ich bin für alle Fragen rund um das Thema offen und helfe bei Problemen sehr gerne weiter. Dieses Tutorial wird immer auf dem aktuellsten Stand gehalten, evlt. erstelle ich hierzu ein Video mit einem Praxis-Beispiel.


    Ein besonderer Dank geht an Leupi, sein Thread gab mir den Ansatz ein etwas umfangreicheres Tutorial zu diesem Thema zu verfassen. Seinem HOWTO kann man übrigens Informationen bezüglich nginx + SSL entnehmen. [HOWTO] LEMP Stack + SSL - Debian 6.0


    Alles Gute und viel Spaß
    Alex

  • Geniales Tutorial ! Toll das es noch solche User gibt die sowas machen. Könnte man direkt in die Netcup Wiki aufnehmen! Ein dickes fettes Like von mir.

  • Freue mich, dass es euch so gut gefällt :)


    Aus gegebenem Anlass hier noch etwas für diejenigen, die das Ganze mit Froxlor realisieren möchten:


    Mit Froxlor ist das natürlich auch möglich. Man befolgt alle Schritte bis auf OpenPanel und FTP, da Froxlor ja bereits E-Mail Konten, etc. selbst konfiguriert und leider kein vsFTPd unterstützt. Nachdem nginx installiert ist, befolgt man die Installationsanleitung von Froxlor: http://redmine.froxlor.org/pro…allation_via_APT_(Debian)


    Folgende Einstellungen sollte man dann anschließend vornehmen:

    Code
    1. vim /etc/nginx/sites-enabled/deine-seite.de.conf


    aus

    Code
    1. root /var/www/htdocs/;


    wird

    Code
    1. root /var/www/;


    Webservereinstellungen -> PHP Reload Befehl -> /etc/init.d/php5-fpm reload
    Webservereinstellungen -> Nginx PHP Backend: unix:/var/run/php5-fpm.socket


    Alle zusätzlichen Änderungen in der vHosts-Datei, also alles ab error_page 404 /index.php; muss in die Standard VHosts-Einstellungen eingetragen werden.


    Zu beachten ist auch, dass jeder logpath für Fail2Ban angepasst werden muss. Außerdem muss das logging für vsftpd ausgeschaltet und je nachdem welchen FTP-Daemon (Pureftpd/Proftpd) man gewählt hat, geändert werden.
    Leider hab ich es noch nicht ausprobiert, ob OpenPanel mit den aktuellen Einstellungen mit Froxlor zusammen arbeitet. Bei OpenPanel gefällt mir die Konfiguration von Postfix und Courier, außerdem ist das Firewall-Modul sehr benutzerfreundlich.
    Ich werde es mal ausprobieren und mich hier melden.


    Grüße
    Alex

  • Mir scheinen beim Nachvollziehen ein paar Punkte aufgefallen zu sein!


    Du nutzt keine Verschlüsselung für FTP (TLSv1). Warum nicht?


    Unter Deflate, sind Dir im 2. Quelltext die Zeilenumbrüche abhanden gekommen. ;)


    Open Panel Firewall:
    Muss ich dort jeden Port einzeln deklarieren?
    Oder kann ich auch Port-Ranges definieren, z.B. 40000 - 40100?
    Die etwas dürftige Dokumentation gibt da nicht viel her. :(

  • Hallo Thomas, danke für den Hinweis mit den Zeilenumbrüchen.


    OpenPanel unterstützt zurzeit leider keine Port Ranges, das müsste man selbst anlegen. Eigentlich schon richtig, ich werde das Tutorial editieren und TLSv1 Unterstützung für vsftpd hinzufügen.


    Port Ranges deklarierst du wie folgt:


    iptables -A INPUT -i eth0 -p tcp --dport 40000:40100 -j ACCEPT
    /etc/init.d/iptables-save

    SSL Key erstellen:
    mkdir -p /etc/ssl/private && chmod 700 /etc/ssl/private
    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem



    Anschließend fügt man am Ende der Config folgendes hinzu:


    /etc/vsftpd.conf



    pasv_enable=YES
    ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    require_ssl_reuse=NO
    ssl_ciphers=HIGH
    tcp_wrappers=YES
    rsa_cert_file=/etc/ssl/private/vsftpd.pem


    pasv_min_port=40000
    pasv_max_port=40100


    und


    service vsftpd restart


    fertig.


    Grüße
    Alex

  • Eine kleine Korrektur von mir:


    Beim Starten von nginx folgt eine Fehlermeldung:

    Code
    1. Starting nginx: nginxnginx: [emerg] bind() to [::]:80 failed (98: Address already in use)


    Abhilfe schafft ein Eintrag in der /etc/nginx/sites-enabled/deine-domain.de.conf:

    Code
    1. listen DEINE IP:80;
    2. listen [::]:80 ipv6only=on default_server;
  • Eine kleine Korrektur von mir:


    Beim Starten von nginx folgt eine Fehlermeldung:

    Code
    1. Starting nginx: nginxnginx: [emerg] bind() to [::]:80 failed (98: Address already in use)


    Abhilfe schafft ein Eintrag in der /etc/nginx/sites-enabled/deine-domain.de.conf:

    Code
    1. listen DEINE IP:80;
    2. listen [::]:80 ipv6only=on default_server;


    Hey Thomas, hast du die default vHost Datei gelöscht? (/etc/nginx/sites-enabled/default) Evtl. müsste man vielleicht auch die /etc/nginx/sites-available/default löschen, aber bisher nie Probleme gehabt.
    Denn bei mir funktioniert das wunderbar, ::80 ist ja IPv6, also aufpassen wiev viele ":" du da stehen hast.


    Siehe HttpCoreModule


    Das Problem mit den Rechten hat sich ja geklärt :-)


    Grüße

  • Die Default war nicht gelöscht!


    Das mit den Rechten hat sich auch irgendwie noch nicht erledigt.
    Durch die Rechtevergabe www-data auf htdocs, darf der FTP-Benutzer nichts mehr in dem Ordner anstellen. Ergo fehlt dort noch eine Berechtigung für den FTP. In die Gruppe www-data verfrachten hat auch keinen gewünschten Effekt gebracht.
    Erst wenn ich nginx unter dem FTP-Benutzer (/etc/php5/fpm/pool.d/www.conf) ausführen lasse, macht er was er soll. Aber das ist ja nicht Sinn der Sache.
    Der unix:socket läuft unter www-data:ww-data.


    Ok, dort wird nur eine Seite, vielleicht mit der ein oder anderen Subdomain laufen, die nur unter diesem FTP-Benutzer erreichbar sein wird. Daher wäre das egal. Aber für mehrere Hosts logischer Weise keine Lösung darstellt. :(