DDos Angriff Abwehren, Server absichern, [ETC.]!

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • DDos Angriff Abwehren

    Spoiler anzeigen

    Zunächst mal muss hierbei gesagt werden dass wenn schon ein DDoS Angriff
    stattfindet es schwer sein wird es zu unterbinden, da hierbei meisten
    der Server so stark belastet ist dass der Zugriff fast unmöglich ist.

    Spoiler anzeigen
    Zunächst kann man sich anschauen was Netzwerk seitig abläuft.

    Spoiler anzeigen
    Mit tcpdump -n wird alles angezeigt, egal auf welcher Netzwerkschnittstelle.

    Spoiler anzeigen
    Mit tcpdump host 123.123.123.123 -n wird nur die eingegebene Server IP_Adresse aufgelöst.

    Spoiler anzeigen
    Mittels IPables kann man dann Störenfriede aussperren.

    Code
    iptables -I INPUT -s 123.123.123.123 -j DROP

    Spoiler anzeigen
    So kann man bestimmte IPs aussperren, auch wenn sich die letzten Ziffen ändern.

    Spoiler anzeigen
    iptables -I INPUT -s 123.123.0.0/16 -j DROP

    Spoiler anzeigen
    Hierbei muss beachtet werden dass jede Ziffer die vorhanden ist 8bit sind, also in meinem Beispiel die ersten 123 wären 8bits, die nächsten 123
    wären erneut 8bit und daher zusammengezählt insgesamt 16bit. Würde man
    bei der ersten NULL in meinem Beispiel auch ein Ziffer haben wären es
    erneut 8bit und daher dann 24bit gesamt.

    Spoiler anzeigen
    Beispiel: iptables -I INPUT -s 123.123.123.0/24 -j DROP

    Spoiler anzeigen
    Sperre wieder auflösen, bzw. IP aus iptables wieder herausnehmen:

    Code
    iptables -D INPUT -s 123.123.123.123 -j DROP

    Spoiler anzeigen
    Ganze IP-Adressen kann man auch hiermit aussperren:

    Code
    /sbin/route add -host 123.123.123.123 reject

    Spoiler anzeigen
    Es sollte aber auch vorgesorgt werden dass es schwieriger wird und daher sind noch ein paar weitere Aspekte ratsam.

    Spoiler anzeigen
    Zum einem sollte das abspannen schon von Anfang an unterbunden werden,
    damit man sich nicht aufs System vorbereiten kann, denn Angreifer
    versuchen im Vorfeld das System auf Schwachstellen ab zu scannen.

    Spoiler anzeigen
    Hierbei gibt es auch iptables regeln die man nutzen kann oder Tools/Programme wie z.B. das Portsentry.

    Spoiler anzeigen
    Aber auch Fail2Ban und mod_evasive oder mod_Security können hier sehr behilflich sein.



    Linux Server absichern

    Spoiler anzeigen

    Root-Zugang unzugänglich machen

    Spoiler anzeigen
    Zunächst richtet man ein User ein, damit man mittels User sich einloggt und erst als User sich Rootrechte verschafft.

    Spoiler anzeigen
    Denn man sollte es unterbinden sich direkt als Root einloggen zu können.

    Spoiler anzeigen
    1.Als Root angemeldet, können wir soviele Benutzer erstellen wie wir
    wollen, in unserem Beispiel bleiben wir aber bei dem Benutzer "samp" .

    Code
    useradd samp

    Spoiler anzeigen
    Nun haben wir einen neuen Benutzer "samp" erstellt.

    Spoiler anzeigen
    2. Jetzt benötigt der Benutzer "samp" noch ein Heimat Verzeichnis

    Code
    mkdir /home/samp

    Spoiler anzeigen
    3. Nun müssen wir dem Benutzer "samp" das Home-Verzeichnis zuweisen
    inklusive allen Rechten, die er benötigt, um ausgeführt zu werden.

    Code
    chown -R samp /home/samp

    Spoiler anzeigen
    4. Um den Benutzer "samp" ein Passwort zuzuweisen

    Code
    passwd samp

    Spoiler anzeigen
    Nach dem Bestätigen wird man aufgefordert ein Passwort einzugeben und es zu wiederholen.

    Spoiler anzeigen
    Ich rate hierbei ein sicheres Passwort zu nutzen, um Risiken durch Fremde zu vermeiden.

    Spoiler anzeigen
    Ich nutze immer diesen Generator: Passwortgenerator

    Spoiler anzeigen
    Jetzt kann man sich als User anmelden und mittels "su" + das Root Passwort in den Root Account wechseln.

    Spoiler anzeigen
    Bitte bevor ihr weiter macht erst prüfen ob es geht und man aus dem User
    Account auch in den Root Account wechseln kann, denn durch die nächste
    Bearbeitung wird der direkte Root Zugang unterbunden.

    Spoiler anzeigen
    Nun müssen wir noch die Konfigurationsdatei des SSH Zugangs bearbeiten und bearbeiten die Konfiguration mittels Editor "vi".

    Code
    vi /etc/ssh/sshd_config

    Spoiler anzeigen
    Hier verbenen wir einen eigenen Port, denn der Port sollte nicht auf Port22 bestehen bleiben.

    Code
    # What ports, IPs and protocols we listen forPort 123456

    Spoiler anzeigen
    Mit diesem Eintrag kann man eine bestimmte IP-Adresse zuweisen.

    Code
    #ListenAddress ::ListenAddress 123.123.123.123

    Spoiler anzeigen
    den meisten Anbiete bekommt man eine zweite IP-Adresse zum Paketpreis
    dazu und dass ist sehr zu empfehlen. Denn die Domains laufen auf der
    Server IP-Adresse und so ist es kein Problem Angriffe mittesl Server IP
    oder Domains zu starten. Hat man eine IP-Adresse worauf keine Domain
    laufen wird es schwierig werden diese zu ermitteln. Daher kann man in
    solch einem Fall einfach die zweite IP in der Konfiguration verwenden
    und wenn jemand es versucht der kennt nur die Domains und die IP worauf
    die Domains sich beziehen. Das kann man noch soweit ausweiten dass man
    mittels Iptables die Ports 20-21 für den FTP-Server auf der Server-IP
    verbietet und falls notwendig diese nur auf der zweiten IP freigibt und
    dann nur diese IP fürs FTP Zugang genutzt wird. Dass kann man auch
    weiter ausbauen in dem man Plesk, Webmins und alles was mit der Server
    Administration zu tun hat über die bekannte Server IP verbietet und nur
    über die zweite IP frei gibt die nicht bekannt ist.

    Spoiler anzeigen
    Da eine sehr gute Absicherung und selbst wenn eine zweite IP etwas kosten würde ich diesen Weg sehr empfehlen.

    Spoiler anzeigen
    Es gibt noch einige gute Programme mit denen man sich zusätzlich
    absichern kann, ich werde hierzu aber jetzt nur die Links der
    Anleitungen einstellen, denn die Seiten die ich jetzt hier einstellen
    beschreiben es schon sehr gut.

    Spoiler anzeigen
    Um
    noch kurz darauf einzugehen, beim Denyhosts werden Zugriffsversuche
    gesperrt. Hierbei sollte man in der Konfiguration ALL auswählen denn
    dann werden laut der Log Datei alle Zugriffsversuche die Fehlgeschlagen
    sind geblockt.

    Spoiler anzeigen
    Fail2Ban arbeitet auch so ähnlich und ist auch ein sehr mächtiges
    Werkzeug dazu. Man kann in Fai2ban auch Zugriffe auf dem Mailserver
    blocken oder auch auf dem DNS Server.

    Spoiler anzeigen
    Mit PortSentry kann man verhindern dass das System nach offene Ports
    abgescannt wird. Denn vor einem Angriff oder Zugriffsversuche versucht
    man ein System zu durchsuchen um mehr Informationen über bestimmte Ports
    zu erhalten.

    Spoiler anzeigen
    Zu diesen Porgrammen kann man sich hier auch noch äußern oder Falls irgend welche Problem bestehen helfe ich gerne weiter.

    Spoiler anzeigen
    Jetzt kommt natürlich noch der Mailserver, denn dieser muss nicht nur richtig konfiguriere sein, damit man nicht abgewiesen wird
    sondern der muss auch etwas abgesichert werden. Denn wir wollen ja
    nicht dass der Server zur Spamschleuder wird und irgendwann sogar auf
    einer SpamBlacklist landet.

    Spoiler anzeigen
    Was ich empfehlen kann ist dass der Server ein Hallo versendet, denn
    viele Mailserver nehmen Mails nicht an wenn sie nicht begrüßt werden.
    Das scheint jetzt Lustig rüber zu kommen aber Spammails beinhalten
    meistens kein Helo und daher nimmt man diese Methode auch zur
    Spamvermeidung an. Wir selber sollten dann auch den Mailserver so
    konfigurieren dass wir ein Hallo haben wollen. Dann kann man den Serber
    auch so konfigurieren dass Mails die auf der SpamBlacklist bestehen
    nicht angenommen werden.

    Spoiler anzeigen
    Mehr dazu aber in dieser Anleitung dass ich sehr gut finde: Postfix: optimierte Konfiguration gegen Spam und Missbrauch :: WE ARE ROOT

    Spoiler anzeigen
    Man sollte sich dann noch überlegen eine eigene Firewall mittels
    iptables einzurichten, damit die Ports gesperrt werden die nicht genutzt
    werden.

    Spoiler anzeigen
    Des weiteren möchte ich Euch noch diesen Tipp zu Herzen geben: Spambot Security gegen Spam Bots

    Spoiler anzeigen
    So dann hoffe ich wiedermal etwas geholfen haben zu können.



    DDoS mittels Iptables abwehren

    Spoiler anzeigen

    Hier mal eine Möglichkeit mittels Iptables DDos Angriffe entgegen zu wirken.

    Spoiler anzeigen
    Allerdings muss man dabei bedenken dass der Server trotz sperre
    überlastet werden kann, denn es wird nur der Zutritt verwehrt, aber der
    Traffic der dabei einsteht nicht verhindert.

    Spoiler anzeigen
    Erste Regel - Limit NEW Datenverkehr auf Port 80

    Code
    sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

    Spoiler anzeigen
    Limit-burst "ist ein wenig verwirrend, aber es werden 200 neue
    Verbindungen (Pakete wirklich) erlaubt, bevor die Grenze von 50 neue
    Verbindungen (Pakete) pro Minute anliegt.

    Spoiler anzeigen
    Zweite Regel - Grenze Verkehr gegründet
    Diese Regel gilt für VERBINDUNG und etablierte den gesamten Datenverkehr
    auf allen Ports, ist aber sehr liberal (und sollte daher keinen
    Einfluss auf den Verkehr auf Port 22 oder DNS).

    Code
    sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

    Spoiler anzeigen
    Hier werden innerhalb von pro Sekunden nur 50 Pakete erlaubt.

    Spoiler anzeigen
    Habe es aber auch erst eingerichtet und noch nicht ausgestestet, daher
    kann es sein dass die Werte noch etwas angepasst werden können.

    Limit für Syn-Flood attacken:

    Code
    iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

    Spoiler anzeigen
    Ungültige Tcp-Packete loggen und verwerfen:

    Code
    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Stealth Scan"

    Spoiler anzeigen
    So dann noch mittels iptables-save abspeichern und mittels iptables-save> /etc/firewall.conf für den Serverstart sichern, denn mittels /sbin/iptables-restore < /etc/firewall.conf lade ich meine Firewall bei jedem Serverstart neu.


    Mit Iptables Länder ausschließen

    Spoiler anzeigen
    Das Script möchte ich hier nochmals einstellen.

    Spoiler anzeigen
    Es muss aber falls noch nicht vorhanden das Verzeichnis "/etc/sysconfig/" angelegt oder halt im Script umbenannt werden.

    Spoiler anzeigen
    In der ISO kann können dann mit einem Leerzeichen Abstand die Länderkennungen eingetragen werden.

    Spoiler anzeigen
    Hier kann man auch die Länderkennungen ausgelesen werden: Internetkennungen aller Ländern

    Spoiler anzeigen
    Dann nur noch einmal die Woche ein cron laufen lassen, damit immer die IP-Adressen aktuell gehalten werden.

    Spoiler anzeigen
    Das sind meine Länder die erstmals ausgeschlossen habe: "cn ru tw".

    Spoiler anzeigen
    Mittels "iptables -L -n -v" kann man im Anschluss auslesen was für Regeln eingerichtet wurden.

    Bash
    #!/bin/bash	### Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code ###	ISO="af cn"	### Set PATH ###	IPT=/sbin/iptables	WGET=/usr/bin/wget	EGREP=/bin/egrep	### No editing below ###	CBLIST="countrydrop"	ZONEROOT="/var/iptables"	IPTCBRESTORE="/etc/sysconfig/iptables.cb"	ALLOWPORTS=80,443	MAXZONEAGE=7	DLROOT="http://www.ipdeny.com/ipblocks/data/countries"	cleanOldRules(){	$IPT -L $CBLIST > /dev/null 2>&1	if [ $? = 0 ] ; then	$IPT -D INPUT -j $CBLIST	$IPT -D OUTPUT -j $CBLIST	$IPT -D FORWARD -j $CBLIST	fi	TOPIP=`$IPT -L -n | grep Chain | cut -f 2 -d ' ' | grep '\-$CBLIST'`	for i in $TOPIP	do	$IPT -F ${i}	$IPT -X ${i}	done	$IPT -X $CBLIST	}	updateZoneFiles() {	ZONEARCH=${ZONEROOT}/arch	mkdir -p ${ZONEARCH}	find ${ZONEROOT} -maxdepth 1 -mindepth 1 -ctime +${MAXZONEAGE} -exec mv {} ${ZONEARCH} \;	for c in $ISO	do	# local zone file	tDB=$ZONEROOT/$c.zone	if [ -f $tDB ] ; then	printf "Zone file %s is new enough - no update required.\n" $tDB	else	# get fresh zone file if it is newer than MAXZONEAGE days	$WGET -O $tDB $DLROOT/$c.zone	fi	done	oldzones=`find ${ZONEROOT} -mindepth 1 -maxdepth 1 -type f -exec basename {} \; | cut -f 1 -d '.'`	# Archive old zones no longer blocked	for z in $oldzones ; do	archme=${c}	for c in $ISO ; do	if [ $c = $z ] ; then archme="X"; fi	done	if [ $archme = $z ] ; then	mv ${archme} ${ZONEARCH}	else	printf "Working from previous zone file for %s\n" ${z}	fi	done	}	createIPTLoadFile() {	printf "# Generated by %s on" $0 > ${IPTCBRESTORE}	printf "%s " `date` >> ${IPTCBRESTORE}	printf "\n*filter\n" >> ${IPTCBRESTORE}	# Create CBLIST chain	printf ":$CBLIST - [0:0]\n" >> ${IPTCBRESTORE}	printf "%s INPUT -j $CBLIST\n" "-I" > ${IPTCBRESTORE}.tmp	printf "%s OUTPUT -j $CBLIST\n" "-I" >> ${IPTCBRESTORE}.tmp	printf "%s FORWARD -j $CBLIST\n" "-I" >> ${IPTCBRESTORE}.tmp	if [ "Z${ALLOWPORTS}" = "Z" ] ; then	printf "Blocking all traffic from country - no ports allowed\n"	else	printf "%s $CBLIST -p tcp -m multiport ! --dports ${ALLOWPORTS} -j RETURN\n" "-I">> ${IPTCBRESTORE}.tmp	fi	for c in $ISO	do	# local zone file	tDB=$ZONEROOT/$c.zone	# country specific log message	SPAMDROPMSG="$c Country Drop"	# Create drop chain for identified packets	CBLISTDROP=${c}-${CBLIST}-DROP	printf ":${CBLISTDROP} - [0:0]\n" >> ${IPTCBRESTORE}	printf "%s ${CBLISTDROP} -j LOG --log-prefix "$SPAMDROPMSG"\n" "-A" >> ${IPTCBRESTORE}.tmp	printf "%s ${CBLISTDROP} -j DROP\n" "-A" >> ${IPTCBRESTORE}.tmp	# Load IP ranges into chains correlating to first octet	BADIPS=$(egrep -v "^#|^$" $tDB)	for ipblock in $BADIPS	do	topip=`echo $ipblock | cut -f 1 -d '.'`	chainExists=`grep -c :${topip}-${CBLIST} ${IPTCBRESTORE}`	if [ $chainExists = 0 ] ; then	printf "Creating chain for octet %s\n" ${topip}	printf ":$topip-$CBLIST - [0:0]\n" >> ${IPTCBRESTORE}	sip=${topip}.0.0.0/8	printf "%s $CBLIST -s ${sip} -j $topip-$CBLIST\n" "-A" >> ${IPTCBRESTORE}.tmp	fi	printf " Adding rule for %s to chain for octet %s\n" ${ipblock} ${topip}	printf "%s $topip-$CBLIST -s $ipblock -j ${CBLISTDROP}\n" "-A" >> ${IPTCBRESTORE}.tmp	done	done	cat ${IPTCBRESTORE}.tmp >> ${IPTCBRESTORE} && rm -f ${IPTCBRESTORE}.tmp	printf "COMMIT\n# Completed on " >> ${IPTCBRESTORE}	printf "%s " `date` >> ${IPTCBRESTORE}	printf "\n" >> ${IPTCBRESTORE}	}	directLoadTables() {	# Create CBLIST chain	$IPT -N $CBLIST	$IPT -I INPUT -j $CBLIST	$IPT -I OUTPUT -j $CBLIST	$IPT -I FORWARD -j $CBLIST	if [ "Z${ALLOWPORTS}" = "Z" ] ; then	printf "Blocking all traffic from country - no ports allowed\n"	else	$IPT -I $CBLIST -p tcp -m multiport ! --dports ${ALLOWPORTS} -j RETURN	fi	for c in $ISO	do	# local zone file	tDB=$ZONEROOT/$c.zone	# country specific log message	SPAMDROPMSG="$c Country Drop"	# Create drop chain for identified packets	CBLISTDROP=${c}-${CBLIST}-DROP	$IPT -N ${CBLISTDROP}	$IPT -A ${CBLISTDROP} -j LOG --log-prefix "$SPAMDROPMSG"	$IPT -A ${CBLISTDROP} -j DROP	# Load IP ranges into chains correlating to first octet	BADIPS=$(egrep -v "^#|^$" $tDB)	for ipblock in $BADIPS	do	topip=`echo $ipblock | cut -f 1 -d '.'`	$IPT -L $topip-$CBLIST > /dev/null 2>&1	if [ $? = 1 ] ; then	printf "Creating chain for octet %s\n" ${topip}	$IPT -N $topip-$CBLIST	sip=${topip}.0.0.0/8	$IPT -A $CBLIST -s ${sip} -j $topip-$CBLIST	fi	printf " Adding rule for %s to chain for octet %s\n" ${ipblock} ${topip}	$IPT -A $topip-$CBLIST -s $ipblock -j ${CBLISTDROP}	done	done	}	loadTables() {	createIPTLoadFile	${IPT}-restore -n ${IPTCBRESTORE}	#directLoadTables	}	# create a dir	[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT	# clean old rules	cleanOldRules	# update zone files as needed	updateZoneFiles	# create a new iptables list	loadTables	exit 0



    Mit freundlichen Grüßen
    Jaybinda

    3 Mal editiert, zuletzt von Jaybinda () aus folgendem Grund: // EDIT Neue Tutorials eingefügt DDos Angriff Abwehren Root-Zugang unzugänglich machen DDoS mittels Iptables abwehren Mit Iptables Länder ausschließen