Extractie IP-adressen met grep
Regelmatig zie ik afwijkingen in log files. Een voorbeeld is een verhoogde interesse in een bepaalde poort. Ik wil in zo'n geval een lijst maken van alle IP's voor een bepaalde poort. In deze mini blogpost een commando om snel de IP's uit de log files te halen, dubbelingen weg te halen en tot slot de lijst te sorteren.
Met cat /var/log/apache2/other_vhosts_access.log
kan ik alle access logs van de virtuele hosts van mijn webserver dumpen / doorkijken. Met grep kan ik vervolgens zoeken op bepaalde waarden. Het grep commando begrijpt ook regex, zodat ik patronen kan gebruiken. Met het sort commando kan ik de uitvoer sorteren.
In het onderstaande voorbeeld zoek ik ale regels op waar poort 8080
in voorkomt. Vervolgens filter ik daar de IPv4 adressen uit. Tot slot sorteer ik het geheel en verwijder ik de dubbelingen.
cat /var/log/apache2/other_vhosts_access.log | grep ":8080" | grep -o '[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}' | sort -t . -k 3,3n -k 4,4n | uniq
Ik controleer vervolgens de uitvoer. Bijvoorbeeld door alle IP's door een bulk whois te halen. De site showmyip.com heeft daar een handig lookup tool voor: https://www.showmyip.com/bulk-ip-lookup/.
Dit soort bulk lookup tools zijn helaas niet altijd even accuraat. Het is (soms) verstandig om meerdere lookup tools te raadplegen, zoals met de tool van ipapi.co: https://app.ipapi.co/bulk/. Gaat het om een lijstje van 25 of minder IP's, dan kan een gratis lookup bij MaxMind zeker geen kwaad. MaxMind's data is één van de meest accurate sets: https://www.maxmind.com/en/geoip-demo.
Naast de hierboven aangehaalde diensten zijn er meer zoals bijvoorbeeld ipinfo.io. Vanaf de command line kan met een curl
commando een lookup gedaan worden. Bijvoorbeeld curl http://ipinfo.nl/1.1.1.1
geef voor het IPv4 1.1.1.1 een resultaat in JSON formaat terug.
Bij twijfel is handmatig het whois
commando uitvoeren een optie.
Zodra ik de lijst IP's gecontroleerd heb, dan maak ik een tekstbestand aan op de server - met het doel om inkomend verkeer vanaf die IP's te blokkeren.
Met het onderstaande commando worden de regels van doBlock.txt uitgelezen en door middel van ufw
geblokkeerd.
while read line; do ufw prepend deny from $line comment "ispconfig"; done < doBlock.txt