SYN flood aanval: server onbereikbaar en router traag

Mijn server reageert niet meer, mijn router is traag en mijn router log toont SYN flood aanvragen. Wat moet ik nu doen? Hoe los ik dit op?

Recentelijk ben ik in aanraking gekomen met een DOS aanval. Een SYN flood aanval. Interessant gegeven. Als particulier het slachtoffer worden van een DOS aanval. De eerste vraag die je dan stelt is: Waarom? Hoe kan dat nu? Zo interessant ben ik toch niet? Ik ben maar een enkele particuliere gebruiker? Wat maakt het interessant om mij aan te vallen? Wie mag mij niet?

Eerst een stukje context. Het viel me op dat ik mijn cloudserver niet meer kon bereiken. Toen ben ik gaan kijken of ik gekke dingen kon vinden op mijn server. Kan ik nog inloggen via ssh? Zijn alle updates gedraaid? Is mijn webserver nog ‘up’. Wat zeggen de logs? Toen ik had vastgesteld dat er niets bijzonders aan de hand leek te zijn met mijn server, heb ik updates gedraaid en mijn server herstart. Dit loste het probleem niet op. Toen ben ik gaan kijken op mijn router. De router gaf aan dat er ‘syn flood’ aanvragen vanuit verschillende IP’s richting mijn IP adres zijn gestuurd. Toen ging ik zoeken naar wat SYN Flood is. En dit bleek een DoS (Denial of Service) aanval te zijn.

Een SYN FLOOD aanval zorgt (zoals hier te lezen) ervoor dat er meerdere (synchronous) verbindingsaanvragen worden gestuurd naar een server. Deze aanvraag wordt gedaan vanuit een ‘niet bestaand’ of ‘gespoofed’ IP adres. De server reageert hierop en wacht op antwoord. Dit antwoord komt niet en dus wacht de server een time out periode. In de tussentijd reserveert de server ruimte en wanneer alle ruimte gebruikt is, reageert de server niet meer op andere aanvragen. Vervolgens krijgt de server weer een aanvraag. Het gevolg van dit soort aanvallen is dat de server niet meer bereikbaar is voor ‘legitieme’ aanvragen.

Na nog iets verder zoeken lijkt het erop dat dit niet zozeer een gerichte aanval op mijn server is, danwel een gerichte aanval op IP adressen behorende bij mijn ISP (internet service provider). De aanval was ook gericht op meerdere poorten van mijn router en mijn server op slechts op (een) enkele poort(en) open staat.

Nu ik dacht te weten wat het probleem was, wat kan ik dan doen?

  1. Het eerste wat ik heb geprobeerd was ‘googlen’ wat hieraan te doen is. Op linux zijn er mogelijkheden om SYN FLOOD attacks tegen te gaan. Bijvoorbeeld door de time out periode te verkleinen, wellicht beter nog het commando “echo -n 1 > /proc/sys/net/ipv4/tcp_syncookies” zoals aangegeven in deze ’thread’. Dit is op mijn eigen linux server mogelijk, maar op een Router van een ISP helaas niet altijd.
  2. Toen herstartte ik mijn router van mijn ISP en poef … alles werkte weer. De syn flood aanval(len) leken ook meteen gestopt.  Het probleem was dus opgelost nadat ik mijn router had herstart.
  3. Ergens ook wel jammer, want nu kan ik niet meer testen of die andere oplossing werkt. Dus voor de volgende keer …

Raspberry pi kodi webbrowser

Het is nog altijd wachten op een Raspberry PI KODI webbrowser. Ocelot van OSMC is nog niet beschikbaar en een andere oplossing is niet voorhanden.

De raspberry PI is inmiddels bijna een volwaardige computer ter grootte van een creditcard. Je kunt deze voor veel dingen gebruiken zoals voor cloudserver, domoticaserver, downloadserver, samba server, mediaserver, vpn server, beveiligingscamera, robot en nog veel meer. Hij wordt ook veel toegepast als HTPC.

De raspberry pi heeft als HTPC veel voordelen maar ook zijn er nog wel enkele beperkingen. Als je de Raspberry PI bijvoorbeeld gebruikt als HTPC dan installeer je hier vaak een KODI distributie op zoals OpenElec, OSMC (voorheen Raspbmc) of misschien wel Xbian. Een van de belangrijkste beperkingen van KODI in combinatie met de Raspberry PI is dan toch het gemis van een webbrowser.

Nu zijn er verschillende manieren bedacht om dit gebrek op te lossen. Er is bijvoorbeeld een plugin ‘Chrome launcer’. Perfect zou je denken, vanuit KODI chrome gebruiken als browser en dan alle online content benaderen! Helaas Google ondersteund armf (Raspberry PI platform) niet langer en dus werkt het niet op een Raspberry PI. Ook Chromium werkt dus niet meer. Nu is er wel een soort ‘hack’. Je kunt een oude aangepaste versie van chromium installeren via ingewikkelde opdrachten, maar een ‘echte’ oplossing is er nog niet.

Een andere oplossing is om Raspbian te installeren, in Raspbian KODI te installeren en zo KODI te gebruiken en steeds te ‘switchen’ van KODI naar Raspbian wanneer je een browser wilt gebruiken. Een echte mooie oplossing is dit echter niet. Het liefst wil je een geïntegreerde browser in KODI.

Een veelbelovende oplossing is de in 2015 beloofde webbrowser Ocelot van OSMC. Helaas is de ontwikkeling hiervan uitgesteld en is deze tot op heden nog niet uitgebracht. Het is dus nog altijd wachten op een Raspberry PI KODI webbrowser. Jammer, want een geintegreerde webbrowser is volgens mij echt een ‘killer feature’ voor een Raspberry PI KODI mediacentre.

 

ownCloud log in Logwatch deel 2

Wanneer je ownCloud gebruikt als eigen cloud zul je er ook snel achter komen dat je nog steeds moet inloggen om de ownCloud log te bekijken. Daarvoor is deze post. Het geeft antwoord op de vraag: “Hoe zorg ik dat het ownCloud log in Logwatch wordt opgenomen?”.

Het antwoord is uiteindelijk vrij simpel, maar ik heb het volledige antwoord nog nergens kunnen vinden. Daarom deze instructie. Omwille van de lengte is deze in twee delen opgesplitst. Het eerste deel gaat over het inrichten van ownCloud. Het tweede deel gaat over het inrichten van Logwatch zodanig dat deze het ownCloud log meeneemt. Dit is deel 2, deze gaat er vanuit dat je ownCloud log in Logwatch deel 1 reeds doorlopen hebt.

Deel 2: ownCloud log in Logwatch opnemen

Hier wordt ervan uitgegaan dat de ownCloud server draait op Raspbian, zijn deze instructies ook daar primair voor bedoeld. Waarom? De Raspberry kost maar 30 euro en draait op 5 Watt. Reken wel mee dat je een of meer SD kaarten, een voeding, een kastje en waarschijnlijk een harde schijf nodig hebt, dus kom je in totaal op meer uit. Maar hoe krijg je nu die ownCloud log in Logwatch?

Logwatch leest de scripts uit in /usr/share/logwatch/scripts/services/. Als je hierin een bestand plaatst met de naam owncloud en met een juist script erin, dan wordt deze opgenomen in de email. Simpel! Kopieer een bestaand script en pas deze aan zodat het ownCloud log wordt uitegelezen en in Logwatch wordt uitgespuugt.

2a. waar staat het script?

nano /etc/logwatch/conf/logfiles/owncloud.conf

# The LogFile path is relative to /var/log by default.
# You can change the default by setting LogDir.
LogFile = /var/log/owncloud/*.log

# This enables searching through zipped archives as well.
Archive = /var/log/owncloud/*.gz

# Expand the repeats (actually just removes them now).
*ExpandRepeats

2b. wat moet in de email?

nano /etc/logwatch/conf/services/owncloud.conf

# The title shown in the report.
Title = “ownCloud”

# The name of the log file group (file name).
LogFile = owncloud

2c. welke regels wil je zien?

Hier is een eenvoudig voorbeeld voor een script dat het volledige log van de voorgaande dag in de email opneemt:

#!/usr/bin/perl

#ownCloud standard environment variables
$DateRange = $ENV{‘LOGWATCH_DATE_RANGE’} || yesterday;

if ($DateRange =~ /yesterday/) {
$epoc = time();
$epoc = $epoc – 24 * 60 * 60; # one day before of current date.
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoc);
$DateString = sprintf(“%04d-%02d-%02d”, $year+1900, $mon+1, $mday);
$DateString = $DateString.”T”;
}

while (defined($ThisLine = <STDIN>)) {
$ThisLine =~ s/\\//g;
$ThisLine =~ s/%20/ /g;
$FullLog{$ThisLine}++;

#filter for datarange yesterday
if ( ($DataRange = yesterday) and ($ThisLine !~ /$DateString/) ) {
#don’t care about these
}
else {
# Report any unmatched entries…
chomp($ThisLine);
$Unmatched{$ThisLine}++;
}
}

if (keys %Unmatched) {
print “\n**Unmatched Entries**\n”;
foreach $ThisOne (keys %Unmatched) {
print ” $Unmatched{$ThisOne} Time(s): $ThisOne\n”;
}
}

exit(0);

Nu heb je het ownCloud log in Logwatch opgenomen. Maar het kan nog beter toch?

2d. maak het leesbaar

Het script in kale vorm plaatsen is een relatief simpel klusje. Als je simpelweg het gehele log wilt laten uitspugen, dan is dit gelukkig niet moeilijk. Het bovenstaande script laat het volledige log in de email meesturen en haalt een aantal ‘onleesbare’ tekens eruit (de \ en de%20) en vervangt deze.  Echter om de gegevens in een beter interpreteerbare vorm te krijgen zul je nog wat moeten tweaken. Dit is nog ‘work in progress’.

Hierbij kunnen de volgende linux instructies van pas komen:

Test het script:

cat /owncloud/owncloud.log | perl /usr/share/logwatch/scripts/services/owncloud

Test logwatch:

logwatch –detail high –mailto name@domain.com –service all –range yesterday

 

 

ownCloud log in Logwatch deel 1

Wanneer je ownCloud gebruikt als eigen cloud zul je er snel achter komen dat je nog steeds moet inloggen om het ownCloud log te bekijken. Daarvoor is deze post. Het geeft antwoord op de vraag:

“Hoe zorg ik dat het ownCloud log in Logwatch worden opgenomen?”.

Het antwoord is uiteindelijk vrij simpel, maar ik heb het volledige antwoord nog nergens kunnen vinden. Daarom deze instructie. Omwille van de lengte is deze in twee delen opgesplitst. Dit eerste deel gaat over het inrichten van ownCloud. Het tweede deel gaat over het inrichten van Logwatch zodanig dat deze het ownCloud log meeneemt. Lees het vervolg in ownCloud log in Logwatch deel 2!

Voorwaarde: een server met ownCloud en Logwatch

Over het bouwen van een ownCloud server en het installeren en configureren van Logwatch is veel informatie te vinden op het internet. Maar niet hoe je het ownCloud log in Logwatch opneemt. Daarom wordt hier niet ingegaan op bouwen van een server met ownCloud en Logwatch. Dit is de basis, als je dit kunt, dan is het configureren van Logwatch wat hierna wordt behandeld zeker binnen bereik.

Deel 1: ownCloud log directory

In ownCloud kun je op twee manieren de logs laten wegschrijven. Standaard worden deze in een afzonderlijke directory geplaatst (data directory). Maar het is ook mogelijk om deze in het systeemlog op te laten nemen. In dit geval wordt ervan uitgegaan dat het logbestand in een afzonderlijke directory worden geplaatst, /owncloud/owncloud.log

Stap 1a: zet de rechten goed

Zorg dat je webserver bij het owncloud log kan.

chown www-data:www-data /owncloud

chmod 770 /owncloud

chmod 660 /owncloud/owncloud.log

Stap 1a: owncloud.conf

Voeg de locatie van je log toe in het owncloud configuratie bestand.

nano /var/www/owncloud/config/owncloud.conf

‘logfile’ => ‘/owncloud/owncloud.log’,

Stap 1c: log rotatie

Omdat het roteren van logs door het programma logrotate specifieke rechten vereist, heb ik ervoor gekozen een cronjob aan te maken waarin het log dagelijks wordt geroteerd:

nano /etc/cron.daily/00logwatch

#!/bin/sh
DATE=`date +%Y%m%d`
logwatch –detail high –mailto name@domain.com –service all –range yesterday
mv /var/log/owncloud/owncloud.log /var/log/owncloud/owncloud$DATE.log
gzip /var/log/owncloud/owncloud$DATE.log

 

Het einde van couchpotato

download (1)Menig HTPC liefhebber heeft gehoord van het programma couchpotato. Dit is een programma voor het geautomatiseerd downloaden van films. Het maakt gebruik van de IMDB database om informatie over films op te halen en zoekt gewenste films op in torrents. Echter Sinds 2014 is het downloaden van de meeste content via dit programma illegaal geworden. Alleen als je legale content download is dit programma dus nog te gebruiken. Maar hoe bepaal je welke content je wel mag downloaden en welke niet?

De torrent providers die er in staan zijn o.a. the pirate bay. Deze staat toch bekend om illegale content, toch? Ik kan er dus niet van uitgaan dat de content die ik hiermee download legaal is. Hoe mooi het programma ook is (je kan een wensenlijst aanmaken en de films geautomatiseerd op je server laten plaatsen met ondertitels, trailers en meer) met het verbod op downloaden van illegale content is dit programma zo goed als nutteloos geworden omdat je er niet vanuit kan gaan dat je legale content download. Daar komt nog bij dat de aanbieders van illegale content aangepakt worden en dus het aanbod van illegale content steeds kleiner wordt.

Ik ben benieuwd of er al iemand is die een manier heeft bedacht om dit programma een legale toepassing te geven.

Raspberry PI 3

De Raspberry PI 3 is kort geleden uitgebracht, is beschikbaar in Nederland en mensen zijn aan het besluiten of ze er een willen kopen of niet. Er zit een snellere 64 bits processor in en heeft ingebouwde wifi en bluetooth.

Tijd voor een vergelijking dus.

  Raspberry Pi 3 Model B Raspberry Pi 2 Model B
CPU Cortex-A53 Cortex-A7
Processor Speed QUAD Core @1.2 GHz QUAD Core @900 MHz
Platform 64Bit ARM 32Bit ARM v7
Processor Chipset Broadcom BCM2837 64Bit Quad Core Processor powered Single Board Computer running at 1.2GHz Broadcom BCM2836 32Bit Quad Core Processor powered Single Board Computer running at 900MHz
GPU Dual Core VideoCore IV Multimedia Co-Processor Dual Core VideoCore IV Multimedia Co-Processor
GPU speed Dual Core Dual Core
RAM 1GB SDRAM 1GB SDRAM
RAM speed 900 MHz 400 MHz
Storage MicroSD MicroSD
USB 2.0 4x 4x
Max Power Draw/voltage 2.5A @ 5V 1.8A @ 5V
GPIO 40 pin 40 pin
Ethernet 10/100mb Ethernet RJ45 Jack 10/100mb Ethernet RJ45 Jack
WiFi 10/100 ethernet, 802.11n Wireless LAN No
Bluetooth Bloothooth 4.0 & Blootooth Low Energy (BLE) No
HDMI 1x 1x
Audio 3.5 mm analoge audio-video jack 3.5 mm analoge audio-video jack

De conclusie is eenvoudig. Als je een beetje pit wilt voor een server of een htpc dan is deze Raspberry pi3 een aanrader. Hij trekt net wat meer amperes, maar het voltage is gelijk.

Het blijft jammer dat er geen Gigabit ethernet op zit. Voor HD content en het lezen en schrijven naar een schijf is het ruim voldoende, maar wanneer je een ssd of snelle raid opstelling hebt is dit nog een ‘killer feature’. Vooral ook voor het ‘servicen’ van meerdere connecties van/naar je server. Natuurlijk moet dan je internet verbinding (ik ga even uit van glasvezel i.v.m. de uploadsnelheid) dit toestaan.

Overwegingen voor een server

serverMet het werkend krijgen van een HTPC of een media center ontstaat (in ieder geval bij mij) als snel de behoefte om ook een server te bouwen en neer te zetten.

Een server biedt heel veel mogelijkheden om media te delen en te streamen.

Met Kodi is het bijvoorbeeld mogelijk om (wanneer de server een tuner heeft die het dvb-c signaal decodeert) vanaf een server een digitale tv signaal te ontvangen. Dit is legaal zolang je per tuner een kaart heb voor het decoderen, niet boven het aantal toegestane kaarten uitgaat, en niet boven het aantal apparaten uitgaat waarop je van de provider mag kijken.

Na enig uitzoekwerk heb ik een van mijn PC’s ingezet als server en inmiddels werkt dit prima. Een keurige 4 threaded cpu (dual core) met virtualisatie mogelijkheden. Deze draait op ubuntu 14.04 met daarop enkele kvm virtuele machines. Aangezien het inmiddels lekker werkt blijkt ook het kostenaspect in beeld te komen.

Als een server 24 uur per dag aanstaat kost dit geld. Voor 5 Watt (Raspberry Pi) betaal je ongeveer 7 euro per jaar. Voor een gewone dual core (65 watt) gaat dit al naar zo’n  90 euro per jaar. Nu zal deze niet altijd 65 watt vragen in idle stand, maar met een 4-tal harde schijven (4x5watt) in btrfs raid opstelling plus en wat randapparatuur zoals een tuner en een kaartlezer loopt dit al snel op.

Hierdoor wordt het minder interessant om zelf een server te draaien die altijd aan staat, en dat is uiteindelijk wel het doel van een server. Het wordt daardoor zinvol om te gaan zoeken naar alternatieven. Ik bedacht er zo een aantal.

Als eerste oplossing heb ik de server ingesteld dat deze na enige inactiviteit op ‘idle’ springt (in mijn geval s3). Dit werkt als een speer. In idle stand kost het minder energie. Een nadeel is echter dat er een wake on lan packet nodig is om deze aan te zetten. Nu zijn er in bijvoorbeeld Kodi plugins die dit kunnen, maar het automatisch aan- en uitzetten via Kodi vind ik niet geweldig werken. Bijvoorbeeld Advanced Wake On Lan werkt wel, maar stuurt bijvoorbeeld bij opstarten een signaal en niet ‘on demand’. Hierdoor wordt de server vaak onnodig aangezet en ook dit werkt niet altijd vlekkenloos. Dit is dus alles bij elkaar (nog) niet de meest geweldig oplossing. Er is inmiddels een oplossing in Kodi voor het ‘on demand’ aanzetten van de server, maar ook dit werkt niet altijd ‘on demand’. Bijvoorbeeld wanneer je de tv server wilt gebruiken (via tvheadend) wordt verwacht dat de tv headend plugin de tv server aanzet. Helaas is dit dus ook niet de oplossing.

Als tweede oplossingsrichting kun je denken aan een 5 watt server met een Raspberry Pi. Dit lijkt geweldig, maar dan heb je nog altijd de randapparatuur die ook stroom gebruikt. Deze zul je moeten ‘idlen’ bij inactiviteit. De Raspberry Pi heeft geen pci, geen gigabit en geen sata (wel 4 usb poorten, maar dit is USB 2 en dus een stuk minder snel dan sata of (‘snelle’) usb 3. Ook draait de Raspberry Pi op ARM en nog niet iedere software ondersteunt dit platform. Het bouwen van en volwaardige server op de Pi is dus nog een uitdaging.

Als derde oplossing kun je denken aan een ‘volwaardige’ amd64 server op Intel architectuur, maar dan met een laag wattage. Het nadeel is hier dat dit een stuk duurder is en dat de mogelijkheden nog beperkt zijn wanneer de hardware een laag wattage heeft. Een 35 wat server is haalbaar wellicht zelfs lager, maar een server op 5 watt (bijvoorbeeld een Atom server) levert vooralsnog een uitdaging op. Kortom als je een server wilt met echt laag energie gebruik, dan zul je nog wat uitzoekwerk moeten doen en is het op dit moment nog maar de vraag of het je lukt dit te bouwen.