Alert to screen när en inkommande anslutning vid port 3306 inträffar

Trädvy Permalänk
Medlem
Registrerad
Jul 2005

Alert to screen när en inkommande anslutning vid port 3306 inträffar

Hejsan!

Jag håller på att experimentera lite.
Jag har konfigurerat så att jag kan få ett meddelande till min skärm när någon ansluter till mig via ssh

inuti /etc/profile

if [ -n "$SSH_CLIENT" ]; then TEXT1="$(date): ssh login to ${USER}@$(hostname -f)" TEXT2="from $(echo $SSH_CLIENT|awk '{print $1}')" export DISPLAY=:0 && notify-send -t 3600000 "$TEXT1 $TEXT2" # show message 60 minutes or until closed fi

Nu undrar jag ifall jag kan göra så att jag kan få ett meddelande till min skärm när någon ansluter till min databasserver (port 3306)
eller varför inte port 8000 som jag har som ftpPort.

Skulle vara kul att få det att fungera.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002

Du behöver ju hämta "eventet" från något. Antingen har du något som tailar brandväggsloggen för connections mot dessa portar, eller så använder du respektive applikationslogg.

I bästa av världar använder du båda för att korrelera eventet med all nödvändig data.

Om du verkligen vill bygga något i stil med tex Little Snitch på OSX. Kolla in Ulogd 2. Den kan logga per paket och spara det i en databas.

Snyggast kanske är att använda ett redan färdigt IDS-ramverk som tex snort, men då kommer du säkert spendera mer tid konfigurera än att bara taila några loggar. Jag skulle nog i syfte av mitt eget hem göra något i stil du redan börjat med. Men rent proffessionellt så lämpar sig snort bättre.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

Du behöver ju hämta "eventet" från något. Antingen har du något som tailar brandväggsloggen för connections mot dessa portar, eller så använder du respektive applikationslogg.

I bästa av världar använder du båda för att korrelera eventet med all nödvändig data.

Om du verkligen vill bygga något i stil med tex Little Snitch på OSX. Kolla in Ulogd 2. Den kan logga per paket och spara det i en databas.

Snyggast kanske är att använda ett redan färdigt IDS-ramverk som tex snort, men då kommer du säkert spendera mer tid konfigurera än att bara taila några loggar. Jag skulle nog i syfte av mitt eget hem göra något i stil du redan börjat med. Men rent proffessionellt så lämpar sig snort bättre.

Jag hade inte tänkt mig någon superavancerad övervakning och databas lagring av alla anslutningar eller något sådant.

Jag tänkte att det bara är trevligt att få veta ifall någon ansluter till min databas, eller låt säga ftp, så att jag får ett OSD message.

Tail kanske fungerar, Jag är rätt novis på vart alla loggar hör hus, jag använder Linux mint 17.3.
Har du något enkelt exempel som du skulle kunna visa mig eller om du vet exakt filen fil jag ska taila och hur man parsar den?

Ifall du inte vet exakt vilken logg som jag bör taila och parsa, säg att jag vill taila ~/mbox
och den måste ju parsas då förstås.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av Lexdale:

Jag hade inte tänkt mig någon superavancerad övervakning och databas lagring av alla anslutningar eller något sådant.

Jag tänkte att det bara är trevligt att få veta ifall någon ansluter till min databas, eller låt säga ftp, så att jag får ett OSD message.

Tail kanske fungerar, Jag är rätt novis på vart alla loggar hör hus, jag använder Linux mint 17.3.
Har du något enkelt exempel som du skulle kunna visa mig eller om du vet exakt filen fil jag ska taila och hur man parsar den?

Ifall du inte vet exakt vilken logg som jag bör taila och parsa, säg att jag vill taila ~/mbox
och den måste ju parsas då förstås.

Du behöver först och främst ta reda på vart databasen sparar sin logg, eventuellt behöver du slå igång att den ska logga inloggningar också.

När du väl får den att logga till en fil på filsystemet, så använder du tex tail -f loggfil och pipar det till grep för att bara plocka ut det data du vill ha och sedan spara undan i en variabel.

Om loggfilen roterar behöver du köra -F istället för -f.

Exempel på hur man kan använda sig av loggen /var/log/auth.log

Såhär ser 2st loggrader ut i den. Om jag då kör en tail som nedan
Mar 11 11:03:48 compose sshd[26157]: pam_unix(sshd:session): session opened for user exempel by (uid=0)
Mar 11 18:23:47 compose sshd[17116]: pam_unix(sshd:session): session opened for user sidde by (uid=0)

Kör då kommandot
tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}'

Vid varje inloggning puttar den då ut nedan output på consollen:

Inloggning med SSH klockan 11:03:48 med user exempel
Inloggning med SSH klockan 18:23:47 med user sidde

Edit:
Jag antar att man bör kunna lägga på: | xargs notify-send
direkt efter raden som så skickar den detta också.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

Du behöver först och främst ta reda på vart databasen sparar sin logg, eventuellt behöver du slå igång att den ska logga inloggningar också.

När du väl får den att logga till en fil på filsystemet, så använder du tex tail -f loggfil och pipar det till grep för att bara plocka ut det data du vill ha och sedan spara undan i en variabel.

Om loggfilen roterar behöver du köra -F istället för -f.

Exempel på hur man kan använda sig av loggen /var/log/auth.log

Såhär ser 2st loggrader ut i den. Om jag då kör en tail som nedan
Mar 11 11:03:48 compose sshd[26157]: pam_unix(sshd:session): session opened for user exempel by (uid=0)
Mar 11 18:23:47 compose sshd[17116]: pam_unix(sshd:session): session opened for user sidde by (uid=0)

Kör då kommandot
tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}'

Vid varje inloggning puttar den då ut nedan output på consollen:

Inloggning med SSH klockan 11:03:48 med user exempel
Inloggning med SSH klockan 18:23:47 med user sidde

Edit:
Jag antar att man bör kunna lägga på: | xargs notify-send
direkt efter raden som så skickar den detta också.

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}'

denna var klockren!

dock fungerande det inte med xargs notify-send, vet inte riktigt om jag gjorde som du hade tänkt, men så här skrev jag

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}' | xargs notify-send

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av Lexdale:

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}'

denna var klockren!

dock fungerande det inte med xargs notify-send, vet inte riktigt om jag gjorde som du hade tänkt, men så här skrev jag

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}' | xargs notify-send

Jag som inte är van med notify-send.
Detta löser nog ditt problem, ersätt | xargs notify-send med:
| while read line; do notify-send "$line"; done

Detta är långt ifrån det mest optimerade sättet att lösa detta på, men det fungerar och bör vara good enough.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

Jag som inte är van med notify-send.
Detta löser nog ditt problem, ersätt | xargs notify-send med:
| while read line; do notify-send "$line"; done

Detta är långt ifrån det mest optimerade sättet att lösa detta på, men det fungerar och bör vara good enough.

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}' | while read line; do notify-send "$line"; done

Detta fungerade inte heller. Fattar inte varför det inte fungerande med xargs för

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av Lexdale:

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk '{print "Inloggning med SSH klockan "$3" med user "$11}' | while read line; do notify-send "$line"; done

Detta fungerade inte heller. Fattar inte varför det inte fungerande med xargs för

Skulle gjort det på desktopen direkt istället för att skriva det i ett shell utan X och "gissa" till mig slutresultatet. Behövde enabla ssh till den först så jag hade en logg att testa på.
Tydligen ville awk även likt grep buffra lite för mycket verkade det som.

Denna rad fungerar nu för mig att skicka ut notifering till skärmen med.

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk -W interactive '{print "Inloggning med SSH klockan "$3" med user "$11}' | while read line; do notify-send "$line"; done

Trädvy Permalänk
Medlem
Registrerad
Apr 2009

Om du vill slippa hålla på med loggar så finns även netstat, tex "sudo lsof -i" för att få ut alla nuvarande connections och alla applikationer som lyssnar. Du kan tex greppa föratt få ut den informationen du vill ha.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av kobb3:

Om du vill slippa hålla på med loggar så finns även netstat, tex "sudo lsof -i" för att få ut alla nuvarande connections och alla applikationer som lyssnar. Du kan tex greppa föratt få ut den informationen du vill ha.

Det är ingen bra idé för övervakning, eftersom det bara är snapshots av nuvarande läge. Den säger inte var som hänt mellan gångerna du kört detta. Däremot kan det vara som ett kompliment för att ta reda på vilken applikation som gör vad just nu.

Ska man övervaka mycket mer noggrannt så är nog ulogd som jag skrev från början mycket bättre för detta.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

Skulle gjort det på desktopen direkt istället för att skriva det i ett shell utan X och "gissa" till mig slutresultatet. Behövde enabla ssh till den först så jag hade en logg att testa på.
Tydligen ville awk även likt grep buffra lite för mycket verkade det som.

Denna rad fungerar nu för mig att skicka ut notifering till skärmen med.

tail -f /var/log/auth.log |grep --line-buffered "pam_unix(sshd:session): session opened for user" | awk -W interactive '{print "Inloggning med SSH klockan "$3" med user "$11}' | while read line; do notify-send "$line"; done

Detta fungerande inte heller "awk: flaggan "-W interactive" okänd, ignorerad"

I nuläget har jag en conky som visas på skrivbordet och kollar netstat en gång var 5e minut som föreslogs av ett annat inlägg.

#!/bin/bash netstat -tn 2>/dev/null | grep :3306 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head # find out who's IP is connected to databas

Men känns som det är långt ifrån det bästa sättet att göra nånting, och jag får inget meddelande till skärmen heller och den visar även döda/hangup:ed anslutningen som är sedan längesedan bortkopplade. Varför dom fortfarande hänger kvar och har statusen ESTABLISHED har jag ingen aning om.

Det bästa sättet tillsammans med det enklaste sättet tror jag är att Taila någon logg
jag vill ha ut en send-notify och IP nummer vem som är connectad.

Är ulogd svårt att installera och hantera?
Jag har bara 1år Linux under mitt bälte och jag kör Windows och Linux dualboot för att inte bli handikappad då jag inte kan köra visa program på Linux som visual studio med flera.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005

jag loggar alla connections till port 3306 till /var/log/iptables.log

såhär ser en typisk logg rad ut:

Mar 12 21:00:16 dator kernel: [16447.783846] INCOMING DATABASE CONNECTIONIN=eth0 OUT= MAC=08:08:08:08:08:08:08:08:08:08:08:08:08:08 SRC=X.X.X.X DST=X.X.X.X LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=15405 DF PROTO=TCP SPT=51910 DPT=3306 WINDOW=16311 RES=0x00 ACK URGP=0

Hur gör jag en tail -f notify-send på det?
jag vill ha ut:
-Datum
-SRC IP nummer

jag provade med: tail -f /var/log/iptables.log |grep DATABASE | xargs notify-send
men det fungerade inte.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av Lexdale:

Detta fungerande inte heller "awk: flaggan "-W interactive" okänd, ignorerad"

I nuläget har jag en conky som visas på skrivbordet och kollar netstat en gång var 5e minut som föreslogs av ett annat inlägg.

#!/bin/bash netstat -tn 2>/dev/null | grep :3306 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head # find out who's IP is connected to databas

Men känns som det är långt ifrån det bästa sättet att göra nånting, och jag får inget meddelande till skärmen heller och den visar även döda/hangup:ed anslutningen som är sedan längesedan bortkopplade. Varför dom fortfarande hänger kvar och har statusen ESTABLISHED har jag ingen aning om.

Det bästa sättet tillsammans med det enklaste sättet tror jag är att Taila någon logg
jag vill ha ut en send-notify och IP nummer vem som är connectad.

Är ulogd svårt att installera och hantera?
Jag har bara 1år Linux under mitt bälte och jag kör Windows och Linux dualboot för att inte bli handikappad då jag inte kan köra visa program på Linux som visual studio med flera.

Vi har nog olika versioner av awk, jag kör mawk, därav jag har en växel du inte har.
ulogd var år och dar sedan jag senast rörde, det är inte mer komplicerat än något annat, men man måste nog labba en hel del för att få saker att fungera.

Skrivet av Lexdale:

jag loggar alla connections till port 3306 till /var/log/iptables.log

såhär ser en typisk logg rad ut:

Mar 12 21:00:16 dator kernel: [16447.783846] INCOMING DATABASE CONNECTIONIN=eth0 OUT= MAC=08:08:08:08:08:08:08:08:08:08:08:08:08:08 SRC=X.X.X.X DST=X.X.X.X LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=15405 DF PROTO=TCP SPT=51910 DPT=3306 WINDOW=16311 RES=0x00 ACK URGP=0

Hur gör jag en tail -f notify-send på det?
jag vill ha ut:
-Datum
-SRC IP nummer

jag provade med: tail -f /var/log/iptables.log |grep DATABASE | xargs notify-send
men det fungerade inte.

Du behöver nog se till att förändra buffer-hanteringen som är pipelining medför för att det där ska fungera.

Vill du göra det mycket enklare så kan du alltid göra detta i ett shell-script där varje stycke görs manuellt och lagras i variabler.
Att plocka ut datum och src ip därifrån är enkelt att göra med awk eller cut till exempel.
Dela upp jobbet i flera små delar, så du förstår vad varje del gör, och testa att skicka varje del direkt till notify-send. Sedan adderar du filter efter filter.

För att plocka ut datum + IP kan du göra detta med en rad såhär: awk '{print $1" "$2" " $3" - "$12}'
Men i ett script skulle jag nog göra det i 2st olika variabler istället, och tvätta det bort SRC= före IPt. Det gör du med delimeter i cut eller awk.

Detta är ett utmärkt sätt att lära sig både unix-verktyg, shellscript och applikationsloggar. Lycka till.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002

ett exempel på shell-script som gör samma sak.
Där "test" är filnamnet på loggen för din databas-logg,

Citat:

#!/bin/bash
tail -F test | while read line
do
if [[ $line == *INCOMING* ]]; then
message=`(echo $line | awk '{print $1" "$2" "$3 " "$12}')`
srcip=`(echo $message | awk -F'[=]' '{ print $2 }')`
date=`(echo $message | awk '{ print $1" "$2" "$3'})`

notify-send "Login to DB: ""$date" \
"from ""$srcip"
fi
done

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

ett exempel på shell-script som gör samma sak.
Där "test" är filnamnet på loggen för din databas-logg,

Detta fungerade inte, felmeddelande:
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.

Men jag förstår hur du tänker som för att få det att fungera, jag är dock inte ett dugg bekant med awk eller cut, men jag får försöka att lära mig det och laborera lite

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av Lexdale:

Detta fungerade inte, felmeddelande:
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.
Invalid number of options.

Men jag förstår hur du tänker som för att få det att fungera, jag är dock inte ett dugg bekant med awk eller cut, men jag får försöka att lära mig det och laborera lite

Vi måste ha olika versioner av saker, som fungerar lite annorlunda.
Det där felet kommer från att något i meddelandet till notify-send inte har "" runt sig.
Kanske radbrytet fuckar upp något där eller liknande iofs.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

Vi måste ha olika versioner av saker, som fungerar lite annorlunda.
Det där felet kommer från att något i meddelandet till notify-send inte har "" runt sig.
Kanske radbrytet fuckar upp något där eller liknande iofs.

vilket OS kör du med?

jag använder Linux mint 17.3

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Feb 2002
Skrivet av Lexdale:

vilket OS kör du med?

jag använder Linux mint 17.3

Debian Stable på de senare exemplen, den första var en ubuntu lts.

Men saker kan skilja sig en del mellan versioner, sedan körde jag mitt script på ditt exempel du postade, där IP etc. var bortplockat. När du kör scriptet på din riktiga fil kanske den matchar mot saker som mitt script inte felhanterade. Var ingen felhantering alls i exempelet jag skrev. (Jag skrev det medan jag drack kaffe till lunchen...)

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av Sidde:

Debian Stable på de senare exemplen, den första var en ubuntu lts.

Men saker kan skilja sig en del mellan versioner, sedan körde jag mitt script på ditt exempel du postade, där IP etc. var bortplockat. När du kör scriptet på din riktiga fil kanske den matchar mot saker som mitt script inte felhanterade. Var ingen felhantering alls i exempelet jag skrev. (Jag skrev det medan jag drack kaffe till lunchen...)

Tack för alla bra tips iallafall jag ska försöka att pilla lite själv på awk !