Register for your free account! | Forgot your password?

Go Back   elitepvpers > World of Warcraft > WoW Private Server > WoW PServer Hosting
You last visited: Today at 08:58

  • Please register to post and access all features, it's quick, easy and FREE!

 

[Linux] Erste Schritte für Neulinge

Reply
 
Old   #1
 
elite*gold: 2703
Join Date: Jul 2010
Posts: 6,450
Received Thanks: 1,232
[Linux] Erste Schritte für Neulinge

Erste Schritte für Neulinge
Rootabsicherung und mehr


Inhalt
1. SSH
1.1. SSH - Port verlegen
1.2. SSH - Keys einrichten
1.3. Benachrichtigung bei SSH - Login

2. Rootupdates

3. MySQL
3.1. MySQL Portvelegung
3.2. MySQL - Fehlerlogging anschalten
3.3. Per MySQL-Programm connecten + neue Verbindung legen
3.4. MySQL - Verbindungen gezielt per iptables zulassen

4. Cronjobs
4.1. Einrichtung von Cronjobs
4.2. Beispiel eines Cronjobs mit Script
4.3. Löschen von Cronjobs
4.4. Schattenseiten von Cronjobs

5. Standarteditor ändern

6. iptables
6.1. iptables permanent machen
6.2. Einige Befehle der iptables
6.3. Webserver per iptables gegen DoS sichern

7. fail2ban
7.1. fail2ban konfigurieren

7. apache2
7.1. VirtualHosts

9. Teilen von Daten
9.1. Owncloud



1. SSH
1.1. SSH - Port verlegen

Den SSH - Port zu verlegen, ist nicht so schlimm und hat keine weitreichende Folgen, wie den SSH - Key einzurichten. Hier könnt Ihr Notfalls einen Portscan machen, sofern Ihr den Port vergesst.

Um ihn zu verlegen, müsst Ihr folgendes tun und verändern:

Quote:
sudo nano /etc/ssh/sshd_config
Dann ändert Ihr folgende Zeile:

Quote:
Port 22
Den Port könnt Ihr auf Euren belieben ändern, doch solltet Ihr einen unbenutzten Port nehmen. Um die Änderung vollständig zu machen, noch folgendes in die Console hauen:

Quote:
sudo reload ssh
Damit habt Ihr den Port geändert und müsst beim Einloggen immer den veränderten Port angeben.


1.2. SSH - Keys einrichten

SSH - Keys sind wie Fingerabdrücke - einzigartig. Dieses ist im Vergleich zum normalen Root+pw login sicherer, da der Root eine Kennung schickt, die den Schlüssel identifiziert. Durch ein Belegen eines Passwort auf dem Key ( = Passphrame) machen wir den Key sicherer, nicht die Keykennung vom Root.

Es gibt viele Gründe, den Login per SSH-Key nur noch zu erlauben. Es macht den Root sicherer, man muss diesen "Fingerabdruck" besitzen, um überhaupt raufzukommen. Ansonsten wird man permanent vom Root abgelehnt und durch Regeln in den apf / iptables kann eine IP permanent gebannt werden. Ein Mittel gegen DDoS / Bruteforce oder unangenehmen Spielern.


Kommen wir zur Einrichtung. Wir benötigen PuTTY in der Vollversion (Installer!).


Sofern wir es installiert haben, öffnen wir PuTTYgen.
You must register and activate your account in order to view images.

Sofern noch nicht ausgewählt, stellen wir auf SSH-2 RSA und die Zahlen der Bits auf 2048.
You must register and activate your account in order to view images.

Danach klicken wir auf die Schaltfläche Generate.
You must register and activate your account in order to view images.

Damit wir ihn generieren, müssen wir über die Fläche dadrunter streichen. Egal wie, Hauptsache der Mauszeiger bewegt sich dortdrin.
You must register and activate your account in order to view images.

Danach sieht unser Fenster so aus:
You must register and activate your account in order to view images.

Wir brauchen nun folgende Sache, die habe ich mal umrahmt:
You must register and activate your account in order to view images.


Den "ssh-rsa ..." benötigen wir, um diesen Key auf dem Root einzurichten. Dazu loggen wir uns auf unseren Root ein und machen folgendes:

Quote:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

sudo nano ~/.ssh/authorized_keys
Nun kopieren wir alles ein, welches auf dem letzten Bild markiert wurde, sprich "ssh-rsa ...derrest..." und speichern es ab.


Nun habt Ihr erfolgreich einen SSH - Key eingebunden. Vergesst nicht, auf Save Publickey (das mit dem rsa-ssh etc) zu speichern und natürlich den Privatekey. Der Privatekey (.ppk) ist die Wichtigste Datei, denn ohne ihn kommt Ihr nicht mehr rauf, wenn Ihr den Passwortlogin ausgeschaltet habt.


Bevor Ihr weiter macht, testet es mit dem Key! Funktioniert es, könnt Ihr weitermachen.


Nun schalten wir den Passwortlogin aus. Dafür geben wir folgendes in die Console ein:

Quote:
sudo nano /etc/ssh/sshd_config
Um den Passwortlogin vollständig auszuschalten, ändern wir folgende Zeilen so ab:

Quote:
[...]
PasswordAuthentication no
[...]
UsePAM no
[...]
Abspeichern und freuen. Abschließend müssen wir den SSH restarten, um nun nur noch mit dem SSH-Key einloggen zu können. Passwortlogin wird dadurch vollständig abgeschaltet! Im schlimmsten Falle könnt Ihr Euren Root neu aufsetzen.

Quote:
sudo reload ssh
Geschafft! Loggt Ihr Euch nun mit Username und ohne Passphrame ein, so kommt eine Fehlermeldung. Ihr müsst Euch nun immer mit dem Passphrame einloggen, denn ohne Ihn verwehrt Euch der Root den Zugriff.


1.3. Benachrichtigung bei SSH - Login

Man teilt sich den Root und möchte gern wissen, wer unter welcher IP oder zu welchem Zeitpunkt auf den Root zugreift. Dieses können wir vielfältig machen, eines ist jedoch schnell und unkompliziert eingerichtet und der User bekommt von der "Aufnahme" des Logins nichts mit.

Bei einem Login schicken wir eine EMail vom Root an unsere Adresse. Dieses passiert automatisch, es zeichnet jeden Login mit.

Shellscript:
Code:
#!/bin/bash
  
echo "Login auf $(hostname) um $(date +%H:%M) am $(date +%Y-%m-%d)"
echo "Folgender Benutzer loggte sich ein: $USER"
echo
finger
Dieses Script speichern wir als shell-login.sh in /opt/ ab (es sieht dann so aus: /opt/shell-login.sh). Damit das Script ausgeführt wird, geben wir es die chmodrechte 755. Dieses tun wir wie folgt:

Code:
chmod 755 /opt/shell-login.sh
Damit das Script auch ausgeführt wird, müssen wir folgende Zeile in /etc/profile einfügen:

Code:
/opt/shell-login.sh | mailx -s "SSH Login auf Root XXXX" 
Loggt Euch nun via 2. Console oder WinSCP ein und ihr habt eine EMail in Eurem Postfach.



2. Rootupdates

Um den Root immer auf den neuesten Stand zu halten, reloaden wir alle Updatelisten und updaten die Packages, die wir darauf installierten. Das machen wir wie folgt in die Reihenfolge

Quote:
apt-get update
apt-get upgrade
Schon habt Ihr die Updates vollzogen. Ihr könnt es auch per Cronjob einrichten, doch habt Ihr dann nie die Kontrolle, was gerade geupdatet wurd.



3. MySQL
3.1. MySQL Portverlegung


Der Vorteil daran ist, dass der Standartport 3306 nicht instant von Bots etc. angegriffen wird. So kann man den Port z.B. auf 5541 verlegen, je nachdem, wie Ihr ihn am Besten meint. Ihr müsst in Scripts / Websites / Programmen (PServer etc.) den Port auch mit verlegen, sonst kommen Errors raus. Wie bei den SSH - Portvelegung, geht dieses relativ schnell und ist mit keinen nachtragenden Risiken verbunden.

Ihr öffnet folgende Datei: /etc/mysql/my.cnf

Quote:
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
Das Fettgedruckte ändert Ihr in Euren beliebigen Port. Der angegebene neue Port darf nicht belegt sein! Nun restartet Ihr den MySQL - Server und er hört auf den neuen Port mit folgenden Befehl:

Quote:
service mysql restart

oder

/etc/init.d/mysql restart

3.2. MySQL - Fehlerlogging anschalten

Ein Errorlog kann viele Vorteile mit sich bringen. Wenn der MySQL - Server nicht anspringt oder es andere Errors gibt, so können diese in dem Errorfile nachgelesen werden. Dieser Schritt wird oft Debugging genannt.

Um den Errorlog zu aktivieren, müssen wir in der Datei /etc/mysql/conf.d/mysqld_safe_syslog.cnf folgendes reinkopieren:

Quote:
[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log
Nun bekommt keinen Schreck, weil schonmal einen mysqld_safe drin steht. Die Datei sieht danach folgendermaßen aus:

Quote:
[mysqld_safe]
syslog

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log
Mit einem Restart des MySQL - Servers haben wir es erfolgreich aktiviert und Ihr könnt den Errorlog in dem angegebenen Pfad in dem Log nachlesen. Restarten tut ihr folgendermaßen:

Quote:
service mysql restart

oder

/etc/init.d/mysql restart

3.3. Per MySQL-Programm connecten + neue Verbindung legen

Eine Verbindung von außen zuzulassen ist immer ein Sicherheitsrisiko. Dieses sollte jeden bewusst sein.

Um auf die Datenbank connecten zu können, müssen wir in der MySQL - Configdatei etwas abändern. Wir kommentieren die bind-address mit einer Raute aus. Wie folgt:

/etc/mysql/my-cnf
You must register and activate your account in order to view images.

Danach restarten wir den MySQL - Server:

Code:
service mysql restart
Nun haben wir den Grundstein gelegt, nun machen wir uns ans Werk. Wir downloaden HeidiSQL oder SQLYog, ich werde anhand des zweiten Programm erklären. Die Schritte bleiben bei allen Gleich, da gibt es ggf. nur in der Benennung Unterschiede.

Wir öffnen SQLYog und tragen folgendes unter den Tab MySQL ein:
You must register and activate your account in order to view images.

Danach gehen wir in den Tab SSH und tragen folgendes ein:
You must register and activate your account in order to view images.

Nun klicken wir auf Test Connection... und folgendes sollten wir zu sehen bekommen:
You must register and activate your account in order to view images.

Sollten das angezeigt werden, klicken wir auf Connect. Nun legen wir einen neuen User an, das machen wir in SQL-Yog wie folgt:
You must register and activate your account in order to view images.

Um uns einen User mit vollen Rechten zu erstellen, müssen wir folgendes machen:
You must register and activate your account in order to view images.

Nun testet Ihr den erstellten Account, indem Ihr folgendes macht (Kein SSH aktivieren!!!):
You must register and activate your account in order to view images.

Nun klickt Ihr wieder auf Test Connection... und erhaltet Ihr wieder die Meldung, dass die Verbindung erfolgreich war, habt ihr einen Account von außen zugänglich gemacht.


3.4. MySQL - Verbindungen gezielt per iptables zulassen

Was sind iptables? Dieses wird in diesem Kapitel erklärt.

Um einen Angriff auf den Port abzuwehren, können wir präventiv rangehen. Warum sollten wir etwas erst machen, wenn der Fall eintritt? Hier werden wir uns mit der Absicherung des MySQL - Port beschäftigen und nur denen es erlauben zu connecten, denen wir vertrauen.

Zuerst fügen wir die Ausnahme für den Localhost und unserer IPs, wie z.B. Webserver, hinzu (wir gehen vom Standartport 3306 aus, wenn Ihr den geändert habt, dann nehmt Euren geänderten), danach schließen wir den Port für alle anderen. Sie bekommen einen REJECT-Befehl und können somit nicht connecten.

Code:
iptables $ -A INPUT -i lo -p tcp --dport 3306 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 3306 -s XX.XX.XXX.X -j ACCEPT
$ iptables -A INPUT -p tcp --dport 3306 -s XX.XXX.X.X -j ACCEPT
$ iptables -A INPUT -p tcp --dport 3306 -j REJECT --reject-with icmp-port-unreachable

Somit sichern wir den Port gegen unerlaubte Zugriffe von Bots oder Dosangriffen ab.



4. Cronjobs

Cronjobs sind zeitbasierte, wiederkehrende Aufgaben, die automatisch durch den cron-daemon ausgeführt werden. Beispiele sind Löschen von Logs oder Archivieren anderer Dateien.


4.1. Einrichtung von Cronjobs

Bei der Einrichtung müsst ihr optionaler ein Shellscript (.sh) zu liegen haben, welches ausgeführt werden soll. Dieses läuft automatisch zu der eingegeben Zeit ab, ohne Euer zutun.

You must register and activate your account in order to view images.

Dieses ist ein Beispiel mehrerer Cronjobs.

Wir öffnen folgendermaßen den Crobtabeditor:
Code:
crontab -e
Nun haben wir in der Console es offen, wie wir es oben haben. Bevor wir nun uns an die Gelegenheit machen, erkläre ich Euch die 5 bzw. 6 Sachen vor dem Pfad/Befehl:

Code:
Minute    Stunde   Tag   Monat   Wochentag     Benutzer   Befehl
*/5         *           *       *          *                   root          /usr/bin/mycrontab.sh
*            5,11      *       *          *                   root          /usr/bin/mycrontab.sh
*            14         3       *          *                   root          /usr/bin/mycrontab.sh
*            4           24     12        *                   root          /usr/bin/mycrontab.sh
*            *           *       *          *                   root          /usr/bin/mycrontab.sh
*            *           *       *          4                   root          /usr/bin/mycrontab.sh
Für Euch stehen nun einige Zeilen da. Folgende Angaben müsst Ihr noch wissen:

Quote:
Minuten: 0-59
Stunden: 0-23
Tag: 1-31
Monat: 1-12
Wochentag: 0-7

0 – Sonntag
1 – Montag
2 – Dienstag
3 – Mittwoch
4 – Donnerstag
5 – Freitag
6 – Samstag
7 – Sonntag
Lösen wir mal anhand der Beispiele nun genau auf, was der Befehl nun macht.

Code:
*/5 * * * *  root  /usr/bin/mycrontab.sh
Jede 5 Minuten (bei */10 - Minuten) lässt er das Script durchlaufen.

Code:
*/5 5,11 * * *  root /usr/bin/mycrontab.sh
Jede 5 Minuten zur Stunde 5 Uhr und 11 Uhr (5 Uhr, 5.05 Uhr, 5.10 Uhr... 11 Uhr, 11.05 Uhr... bis max X.55) lässt der Cron-Deamon das Script starten. In den anderen Stunden macht er nichts.

Code:
* 14 3 * * root /usr/bin/mycrontab.sh
Jeden 3. Tag im Monat um 14 Uhr startet das Script, an allen anderen Tagen nicht.

Code:
* 4 24 12 * root /usr/bin/mycrontab.sh
Jedes 24.12 um 4 Uhr startet das Script. Oder, wer es einfacher haben möchte: Das Script startet nur an Heiligabend um 4 Uhr.

Code:
* * * * 4 root /usr/bin/mycrontab.sh
Jeden Donnerstag startet das Script. Ansonsten bleibt es unausgeführt.


Damit die Script laufen, brauchen sie Berechtigungen. Passt Euer Script soweit an, dass die ausgeführt werden können.


Kommen wir noch zu einem Thema, welches man viel hinter crobjobs findet:
Code:
>/dev/null 2>&1
Wir schlüsseln mal auf, was das heißen soll:

Code:
>/dev/null
Damit werden die standartmäßigen Ausgaben, die per EMail an den jeweiligen Sysemnutzer ins Nirvana verschickt und man bekommt keine Email.

Code:
 2>&1
Die normale Ausgabe als auch Fehler werden an die vorher angegebene Datei umgeleitet. Bei >/dev/null davor ins Nirvana.


Um den Crontab mit den Verwerfungsscript zu kombinieren, bedarf es keinerlei Hilfe mit zusätzlichen Zeichen. Im unseren Falle sähe es so aus:

Code:
* * * * 4 root /usr/bin/mycrontab.sh  >/dev/null 2>&1

Es gibt auch einige Tricks, die wir Anwenden können, um viele Sternchen, Einsen und Nullen bei der Einrichtung zu sparen. Hier liste ich Euch sie auf:

String Bedeutung Cron-Schreibweise
@reboot einmalig, beim Start
@daily einmal pro Tag 0 0 * * *
@midnight einmal pro Tag 0 0 * * *
@hourly einmal pro Stunde 0 * * * *
@weekly einmal pro Woche 0 0 * * 0
@monthly einmal im Monat 0 0 1 * *
@annually einmal im Jahr 0 0 1 1 *
@yearly einmal im Jahr 0 0 1 1 *

Ihr könnt übrigens auch den Benutzer weglassen, dann werden die standartmäßig vom Rootuser ausgelöst und ausgeführt (siehe Bild oben).


4.2. Beispiel eines Cronjobs mit Script

MySQL - Dumpscript (fusioncms.sh)
Code:
#!/bin/sh
DIR="/var/backups/fusioncms"
DATUM=`date '+%d-%m-%Y__%H-%M'`

mysqldump -uUSER -pPASS -h localhost --opt DATABASE > $DIR/fusion-${DATUM}.sql
gzip -9 --best $DIR/fusion-${DATUM}.sql
Dieses sieht in der Crontabeditor dann so aus:

You must register and activate your account in order to view images.


Was dort steht, sollte jeden Klar sein. Wir ziehen und einen mysqldump mit dem User+PW von der Datenbank DATABASE und zippen es dann. Alles geschieht in unserem angegebenen Pfad.

Dieses Script wird jede 4 Stunden ausgeführt. Woran ich es erkenne, steht bei 5.1., wo ich genau eingehe, was wo was zu bedeuten hat.

Dieses ist ein Beispielscript von einem Server, der sich im Livebetrieb befindet. Man kann das Script erweitern, dass es autoamtisch alte Backups löscht oder jeden Monat einen Wipe in einen Ordner (z.B. nennt man ihn Mai / Juli / September) macht.


4.3. Löschen von Cronjobs

Beim Löschen gehen wir wie beim Einrichten vor, wir starten zuerst den Crontabeditor:

Code:
crontab -e
Danach löschen wir die Zeile, die wir nicht mehr drin haben wollen und speichern es ab. Schon habt ihr den Crontab gelöscht.


4.4. Schattenseiten von Cronjobs

Cronjobs sind sehr erleichternd, sie sparen uns eine menge Arbeit. Die führen Updates automatisch aus, machen Datenbankbackups oder reinigen alte Logfiles. Doch nehmen wir mal an, wir überlassen einen Fremden den Root. Wir haben einige Programme am Laufen, beispielsweise einen TeamSpeakserver und einen Privatserver. Nun wollen wir eine außenstehende Person noch einen Privatserver draufmachen lassen, er möchte jedoch rootrechte haben.

Zum Thema Rootrechte und wie man diese einschränkt wird später näher eingegangen. Doch hier sei gesagt - Rootrechte zu vergeben kann ganz übel ausgehen, ein Beispiel werde ich hier zeigen.

Wir lassen die außenstehende Person auf dem Root rauf. Dieser hat die Absicht, den Root in den Abgrund zu treiben. Er hat einige Möglichkeiten, die ich kurz erläutere:
  • Anlegung neuer Rootuser per sudoers im Cronjob
  • Anlegung eines Cronjobs zum Löschen von Dateien
  • Dauerrestart des Roots per Cronjob

Es gibt natürlich noch viel mehr. Nehmen wir das dritte Beispiel, den Dauerrestart des Roots. Dieses Script ist schnell geschrieben und der Cronjob würde so aussehen:

Code:
@reboot /pfad/zur/datei/restart.sh >/dev/null 2>&1
Somit wird bei jedem Restart die Datei ausgeführt werden, die widerum den Restartbefehl ausführt. Man sieht, dass dadurch der Root im Kreislauf des Dauerrestarts wird. Aus diesem kommt man nicht wieder raus, außer, man hat vergessen, die Rechte zu geben oder einen Tippfehler drin. Ansonsten wird eine neue Rootinstallation fällig.

Wie Ihr seht, können Cronjobs sehr hilfreich sein oder, wie in dem Beispiel, sehr viel Schaden zufügen. Man darf daher niemals mit dem Rootaccount herumspielen oder ihn weitergeben, den Rootlogin am Besten ganz ausschalten. Auf dem Rootaccount kommt Ihr weiterhin, wenn Ihr Euch als normalen User einloggt und zum Rootuser switcht, da müsst Ihr dann das Passwort für den Rootuser eingeben.



5. Standarteditor ändern

Auf linuxbasierten Systemen stehen mehrere Editoren zur Verfügung. Im Kapitel 5 dieses Tutorials seht Ihr auf den Bildern 2 verschiedene. Doch wie ändere ich den Standarteditor, sodass ich bei dem Crontabeditor eher auf nano anstatt vim treffe?

Mit folgenden Befehlen könnt Ihr den Standarteditor wechseln:

Code:
export EDITOR=/usr/bin/nano
export EDITOR=/usr/bin/vim
export EDITOR=/usr/bin/pico
export EDITOR=/usr/bin/editor
export EDITOR=/usr/bin/joe
Alternativ könnt Ihr interaktiv mit diesem Befehl euren Standarteditor aussuchen:

Code:
update-alternatives --config editor
Mein Favorit ist nano, doch hier möchte ich Eure Meinung nicht beeinflussen.



6. iptables

iptables ist unter Linux die weit verbreiteste Firewall. Sie ist im besten Falle bei der Installation gleich mit bei, sodass die gleich einsetzbar ist.
iptables ist ein Userspace-Programm zur Konfiguration von Tabellen, die durch die Firefall im Linux-Kernel bereigestellt werden. Die Tabellen (tables) enthalten Ketten (chains) und Regeln (rules).


6.1. iptables permanent machen

Alle Einträge der iptables sind nur temporär. Nach einem Reboot werden die Tabellen geleert. Es gibt verschiedene Möglichkeiten, um dieses zu umgehen. Von Cronjobs über Handarbeit bis hin zu Paketinstallationen. Ich empfehle Euch ein Paket, welches wir so installieren;

Code:
apt-get install iptables-persistent
Mit diesem Paket werden die Firewallregeln unter /etc/iptables abgelegt, die nach einem Serverreboot neu eingelesen werden.


6.2. Einige Befehle der iptables

Um mit den iptables gut arbeiten zu können, müssen wir deren Befehle kennen oder wissen, wo diese stehen.

Um alle bestehende Regeln anzeigen zu lassen, geben wir folgendes in die Console ein:

Code:
iptables -L

Eine IPv4 - Adresse bannen:

Code:
iptables -A INPUT -s <IP-ADRESSE> -j DROP
-A INPUT: hängt die Regeln an die INPUT Chain an
-s : ist die zu bannende IP Adresse
-j DROP: gibt die Aktion an, die ausgeführt werden soll, wenn die Regel greift. In diesem Fall DROP (verwerfen)

REJECT ist die schönere Lösung von DROP. So wird ein imcp - Paket an den Client gesendet, der nicht unnötig lange auf einen TCP - Timeout warten muss.


Eine IPv4 - Adresse entbannen:

Code:
iptables -D INPUT -s <IP-ADRESSE> -j DROP
-D: Delete


iptables per Hand speichern:

Code:
iptables-save > iptablessave.txt
iptables per Hand aus der File einlesen:

Code:
iptables-restore < iptablessave.txt
Es gibt noch viele weitere Befehle, die nach Bedarf und Nachfrage ergänzt werden.


6.3. Webserver per iptables gegen DoS sichern

Dieses ist nur begrenzt lauffähig, um einen starken DoS oder gar einen DDoS abwehren zu können, kann nur der Provider mit einer besseren Firewall. Dieses soll das lokal Einstellbare anzeigen, was auch an die Grenzen von iptables herankommt.

Bei einem vermeintlichen DoS/DDoS Angriff sollten wir unseren Netzwerkverkehr anschauen und sehen, wo die meisten Verbindungen herkommen. Dieses machen wir wie folgt:

Code:
 netstat -ant
Hier sehr ihr eine lange Liste, teils sehr unübersichtlich. Bei einer gut besuchten Website können bis zu 100 Zeilen dort stehen, da wird es schwierig, den Überblick zu halten.

Einfacher geht es, wenn wir es etwas sortieren und und anzeigen lassen, wie viele Connection von einer IP kommt. Dies machen wir wie folgt in der Console:

Code:
netstat -ant | grep TIME_WAIT | awk '{ print $5}' | cut -d ":" -f 1 | sort | uniq -c
Dieses zeigt die Verbindungen zu dem Root an. Der IE soll ca. 8 Verbindungen gleichzeitig offen halten, bis max 30 Verbindungen nehmen wir als normal an. Alles darüber können wir genauer betrachten. Bedenkt bitte, dass auch VErbindungen zum Root, wie WinSCP, PuTTY oder Datenbankverbindungen auch angezeigt werden, schlussfolgert und bannt nicht zu voreilig und betrachtet es eine Zeit lang.

Bei einer Größenordnung ab 35 (mein Erfahrungswert) können wir es genauer Betrachten. Sollte diese IP immer mehr connections aufbauen, schließen wir diese vom Root aus. Dieses machen wir per Hand wie folgt:

Code:
iptables -A INPUT -p tcp -s $AngreiferIP --destination-port 80 -j DROP
--destination-port 80: Standartport des Webservers


Bei einem größeren Angriff können wir alles nicht mehr per Hand machen. Wir stellen es in den iptables so ein, dass sie automatisch entgegenwirken. Das spart Zeit und der Server wird lokal etwas entlastet. Wir geben folgendes ein:

Code:
# Set proofed limits for http 1.1 clients (1.0 does not use pipelining)
$ iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 8 -j DROP
$ iptables -I INPUT -p tcp -m state --state NEW --dport 80 -m recent --name gestempelt --set
$ iptables -I INPUT -p tcp -m state --state NEW --dport 80 -m recent --name gestempelt --update --seconds 15 --hitcount 15 -j DROP
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT


Folgendes machen die Befehle:
(1) Man sperrt jeden Host, der mehr als eine neue Verbindung/Sek aufbauen möchte, wenn 8 bestehen
(2) versieht jede neue Verbindung mit einem Stempel (hier: gestempelt)
(3) Verwirft alle Pakete von einem Host für 15 Sekunden, wenn mehr als 15 neue Verbindungen mit dem Stempel "gestempelt" aufgebaut wurden.
(4) Akzeptiert alle Verbindungen zum Webserver.

Mit dem Script automatisieren wir die Abwehr, jedoch testet das Script vorher und passt es auf Eure Bedürfnisse an!



7. fail2ban

Mit dem Dienst fail2ban könnt Ihr einige Dienste überwachen. Neben SSH, Apache und FTP könnt ihr auch Eure Mailserver damit belegen. Fail2Ban, wie der Name schon halb sagt, bannt User nach einer bestimmten Anzahl an fehlgeschlagenen Einlogversuchen automatisch vom Server.


7.1. fail2ban einrichten

Code:
apt-get install fail2ban
Nachdem wir das Paket gedownloadet haben, haben wir in der /etc/fail2ban/ die Datei namens jail.conf. Da diese nach jedem Update neu geladen wird, kopieren wir diese zu unserer jail.local.

Code:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Alle Änderungen tun wir in der jail.local, nicht in der jail.conf! Dieses steht nebenbei auch in der Datei mit drin.

Nun tätigen wir einige Grundeinstellungen. Dazu ändern wir ziemlich am Dateikopf folgende Zeilen:

Code:
ignoreip = 127.0.0.1
bantime  = 600
maxretry = 3
Die Bantime geben wir in Sekunden an. Je nachdem, wie hoch Ihr Eure Sicherheit haben wollt, könnt Ihr bis zu Stunden hochgehen.

Kommen wir zu den SSH - Einstellungen (Punkt [SSH] in der Datei):

Code:
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3
Hier könnt Ihr den Log und die maximalen Versuche ändern. Ihr könnt die Überwachung durch das ersetzen von true auf false ganz ausschalten.



8. apache2

Der apache2 ist unser Webserver. Über ihn gelangen alle Daten in die Außenwelt. Neben Apache gibt es nginx, welches die beiden Größten auf dem Markt sind. Was wir alles damit anstellen können, erkläre ich hier etwas genauer.

8.1. VirtualHosts

Über die VirtualHosts können wir Domains in spezifische Ordner gucken lassen. Ruft der USer die IP auf, können wir beispielsweise nur in /var/www gucken lassen. Nimmt er die Domain "deinedomain.de", können wir ihn beispielsweise den Ordner /var/www/domain/deinedomain.de verweisen.

Damit das Ganze funktioniert, liefert apache sogar ein Beispiel mit.



9. Teilen von Daten

Heute gibt es viele verschiedene Möglichkeiten, Daten miteinander zu Teilen. Sei es eine Source, (un-)wichtige Dokumente, Fotos, Tabellen usw., kommt die Frage auf, welches Programm man dazu nutzt. Am Einfachsten ist der FTP - Server. Doch darüber hinaus gibt es heutzutage git-Repositorys, Clouds oder ältere SVNs. Jedes ha Vor- und Nachteile, worüber man sich im Klaren sein muss.
Ich werde hier einige Möglichkeiten vorstellen, um Daten untereinander auzutauschen.

9.1. Owncloud

Bei Owncloud gibt es verschiedene Möglichkeiten, diese Einzurichten. Wir bevorzugen den Download über apt-get. Um dieses zu ermöglichen, müssen wir die Quellen in unser Downloadrepo einbinden.

Code:
echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list
wget -qO - http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/Release.key | apt-key add -
Um diese Quelle endgültig in das System einzupflegen, müssen wir unsere Repository updaten.

Code:
apt-get update
apt-get dist-upgrade
Haben wir dieses getan, ist es nicht mehr weit zur Fertigstellung. Nun Downloaden wir das Paket. Voraussetzungen ist ein Apache-Server (Stichwort LAMP) sowie ein funktionierender MySQL-Server odr MariaDB.

Code:
apt-get update owncloud
Haben wir dieses getan, ist die Installation soweit schon fertig. Nun kommen wir zu dem Teil, welchen wir im Webbrowser tätigen.

Dafür öffnen wir . Alternativ für eine Domain könnt Ihr die IP eintragen. Ihr werdet nun durch die Installation geführt.
Wichtig ist hierbei, eine Datenbank manuell anzulegen. Wie das geht, erfahrt Ihr weiter oben im MySQL - Tutorial.

Habt Ihr alles eingerichtet, könnt Ihr ein DesktopClient auf downloaden. Dieses funktioniert nach kurzer Einrichtung (URL sowie Logindaten) wie Dropbox.




Zu guter Letzt müssen wir bei der ausführlichen Ausarbeitung dieses Textes auf Quellen verweisen.


Solltet Ihr einen Wunsch haben, äußert Ihn mir. Der Thread wird weiter bearbeitet und ggf. erweitert.

Mit freundlichen Grüßen
Crazy



°"Crazy"° is offline  
Thanks
12 Users
Old   #2
 
elite*gold: 0
Join Date: Dec 2013
Posts: 57
Received Thanks: 14
Sehr sehr fleißig, immernoch!

Sehr löblich


KNIPF.net is offline  
Old   #3
 
elite*gold: 2703
Join Date: Jul 2010
Posts: 6,450
Received Thanks: 1,232
Quote:
Originally Posted by KNIPF.net View Post
Sehr sehr fleißig, immernoch!

Sehr löblich
Danke Knipfi, meld dich du mal öfter in Skype.

Viele haben Linux und haben nichts von SSH gehört bzw. die Leichtigkeit der Portverlegung. Um es nicht jeden einzeln zu erklären, hab ich dieses Tutorial gemacht. Gibt zwar viele im Internet, aber ob nun noch ein drin ist, macht den Kohl auch nicht mehr fett.
°"Crazy"° is offline  
Thanks
2 Users
Old   #4
 
elite*gold: 0
Join Date: Dec 2013
Posts: 57
Received Thanks: 14
MySQL Port verlegen | MySQL Logging anschalten (fehlermeldungen)


KNIPF.net is offline  
Thanks
1 User
Old   #5
 
elite*gold: 2703
Join Date: Jul 2010
Posts: 6,450
Received Thanks: 1,232
Quote:
Originally Posted by KNIPF.net View Post
MySQL Port verlegen | MySQL Logging anschalten (fehlermeldungen)
Habe ich für Dich mit reingeschrieben. Viel Spaß wünsche ich Dir
°"Crazy"° is offline  
Thanks
1 User
Old   #6
 
elite*gold: 0
Join Date: Sep 2014
Posts: 29
Received Thanks: 1
hey da ich gesehen habe das du die besten tutorials machst wollt ich dich fragen ob du mir erklären könntest was cronjobs ist und wie man das einrichtet
[F]aisal is offline  
Thanks
1 User
Old   #7
 
elite*gold: 2703
Join Date: Jul 2010
Posts: 6,450
Received Thanks: 1,232
Quote:
Originally Posted by [F]aisal View Post
hey da ich gesehen habe das du die besten tutorials machst wollt ich dich fragen ob du mir erklären könntest was cronjobs ist und wie man das einrichtet
Ist geschehen
°"Crazy"° is offline  
Thanks
1 User
Old   #8
 
elite*gold: 0
Join Date: Sep 2014
Posts: 29
Received Thanks: 1
vielen vielen dank
[F]aisal is offline  
Old   #9
 
elite*gold: 0
Join Date: Mar 2011
Posts: 529
Received Thanks: 198
Bitte den SSH-Port auch verlegen
Ein Tipp am Rande:

MySQL in die Tonne treten und MariaDB nutzen:
Code:
$apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
$add-apt-repository 'deb http://ftp.hosteurope.de/mirror/mariadb.org/repo/5.5/debian wheezy main'

$apt-get update
$apt-get install mariadb-server
()

Der Grund ist recht einfach, die Performance auf der MariaDB ist ein wenig besser und sie ist zu MySQL kompatibel (ist der gleiche Entwickler).

Wenn die DB trotzdem noch lahmt kann man das MySQL-Datenbankverzeichnis auf eine andere Partition umziehen lassen und dieser Optional ein XFS geben (welches schon einen großen Geschwindigkeitsunterschied zur ext2/4 hat).
Dies geht sogar recht einfach, jedoch erfordert es ein klein wenig Geschick.

Kann ich bei Bedarf später ja erklären, wie das funktioniert.

Auch gaaaaaaaaaaaaaaanz wichtig ist folgendes:
Wenn man bei Hetzner oder einem anderen Anbieter ist, welcher seine Server mit Platten im Raid anbietet (bei Hetzner Standard), so kann man den Status dieser hiermit prüfen:
$cat /proc/mdstat

die Ausgabe kann da so aussehen:
Code:
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md4 : active (auto-read-only) raid1 sdc2[0] sdd2[1]
      488351744 blocks super 1.2 [2/2] [UU]
      
md3 : active raid1 sdc1[0] sdd1[1]
      488148352 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sda3[0] sdb3[1]
      968357952 blocks [2/2] [UU]
      
md0 : active raid1 sda1[0] sdb1[1]
      4200896 blocks [2/2] [UU]
      
md1 : active raid1 sda2[0] sdb2[1]
      4200896 blocks [2/2] [UU]
      
unused devices: <none>
md4 :
= Ist das Äquivalent zur Partitionsnummer (sda1 etc)
active (auto-read-only)
= Die Partition ist active (zusätzlich ist die noch Readonly, weil sie noch keine Schreibzugriffe hatte)
raid1 sdc2[0] sdd2[1]
= Die Art des Raids (in dem Fall Raid1), die Partitionen der Festplatten, welche involviert sind.
488351744 blocks
= Die Anzahl der Blöcke die diese Raid-Partition hat
super 1.2
= Superblock Version
[2/2] [UU]
= Status der einzelnen Platten/Partition der Raidpartition
Hier ist auch gleichzeitig Vorsicht geboten, denn das gibt den Zustand des Raid wieder.
Steht hier UU ist alles in Ordnung.
Steht da _U oder U_ fehlt eine Platte und ab dann wirds auch knifflig und ihre solltet sofort den Support kontaktieren das hier eine Platte fehlt oder defekt ist.

Die Anzahl an U kann variieren, je nachdem was für ein Raid genutzt wird.

Wenn ich später noch etwas Zeit finde beschreibe ich gerne, wie man den Raid auseinander nimmt und anschließend wieder zusammen setzt...
Kent_Brockman is offline  
Thanks
1 User
Old   #10
 
elite*gold: 2703
Join Date: Jul 2010
Posts: 6,450
Received Thanks: 1,232
Quote:
Originally Posted by Kent_Brockman View Post
Bitte den SSH-Port auch verlegen
Das steht mit drin.

Ansonsten danke für das Andere, würdest du es nun ausführlich erklären, nehme ich es oben mit rein. Ich verstehe dort halb Bahnhof, da muss ich mich erstmal einarbeiten.

Hier möchte ich auch "nur" einiges an Grundwissen an andere Übermitteln, die zum ersten Mal mit Linux in Kontakt kommen. So werden einige Fragen im Vorfeld vermieden und die Administratoren müssen nicht X Foren für einige Themen suchen. Aber du bringst mich auf die Idee, ein Fortgeschrittenes Kapitel zu machen, bei denen ich deines mit einbeziehe.
°"Crazy"° is offline  
Old   #11
 
elite*gold: 0
Join Date: Mar 2011
Posts: 529
Received Thanks: 198
Ich werd mal schauen, wann es die Zeit zulässt, dann schreibe ich gerne etwas ausführlicher was es mit dem MariaDB, den lustigen Raids und dem XFS auf sich hat, denn das Thema ist bestimmt etwas was einige interessieren dürfte, wenn es darum geht das ganze ein größeres Stück performanter zu machen.
Kent_Brockman is offline  
Thanks
1 User
Old   #12
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,284
Received Thanks: 1,440
Quote:
Originally Posted by Kent_Brockman View Post
Ich werd mal schauen, wann es die Zeit zulässt, dann schreibe ich gerne etwas ausführlicher was es mit dem MariaDB, den lustigen Raids und dem XFS auf sich hat, denn das Thema ist bestimmt etwas was einige interessieren dürfte, wenn es darum geht das ganze ein größeres Stück performanter zu machen.
Ui dich gibts ja auch noch


Guter Thread

#sticky
Frosttall is offline  
Thanks
1 User
Old   #13
 
elite*gold: 4
Join Date: Sep 2014
Posts: 78
Received Thanks: 4
wie genau geht das?
Duke-Nukem89 is offline  
Old   #14
 
elite*gold: 0
Join Date: Mar 2014
Posts: 89
Received Thanks: 13
Sehr gutes Tutorial für alle die sich in dieses Abenteuer stürzen möchten ^^ ich weiß damals musste ich mir alles nach und nach selbst zs suchen ^^ Schöne erklärung!


Sunrisew0w is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
Tinyisland: erste Schritte zum Bot
Hallo zusammen, ich weiß nicht, ob interesse besteht, aber ich habe mir ein wenig genauer die Kommunikation zwischen Browser und Server bei...
5 Replies - Browsergames
Erste Schritte in MOP
Halli Hallo in wenigen tagen ist es soweit ... Mists of the Panda Kommt endlich ich persönlich freue mich sehr darauf.... Pandas <3 das klingt...
17 Replies - WoW Main - Discussions / Questions
[FAQ] Erste Schritte bei Problemen
Hallo liebes epvp Forum :) PC-Probleme kommen unweigerlich vor. Um dir, dem Hilfesuchenden und uns, den Helfenden eine schnelle Hilfe zu...
5 Replies - Hardware Discussions / Questions
[C#] Erste Schritte
Vorwort: Von nun an habt ihr die Möglichkeit euren Wissenshorizont zu erweitern. Ich werde , auf Wunsch einiger User, euch C# ein wenig näher...
8 Replies - Coding Tutorials
Help for Pirox [erste Schritte]
Liebe Elitepvpers Cummunity Ich suche wen der mir bei meinen ersten Schritten mit Pirox pvp tool helfen kann. Grundsätzlich geht es um die...
3 Replies - WoW Bots



All times are GMT +1. The time now is 08:58.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.