• STATISTIQUES
  • Il y a eu un total de 2 membres et 6975 visiteurs sur le site dans les dernières 24h pour un total de 6 977 personnes!


    Membres: 2 608
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [EN] This is legal
    Basic: 10, Realistic: 5, Programming: 1, Bonus: 11, SQL: 2, Encryption: 6, Application: 4, User Contributed: 3
    Challenges
    [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[NAGIOS] - Sonde netstat
14-05-2014, 12h25 (Modification du message : 14-05-2014, 12h30 par Junky.)
Message : #1
Junky Hors ligne
Snorky Master
*



Messages : 228
Sujets : 35
Points: 203
Inscription : Mar 2013
[NAGIOS] - Sonde netstat
Bonjour,

Alors voici un bout de code pour Nagios (ou tout autres choses d'ailleurs). Le but est de checker le nombre de connexion par IP.

Ce n'est pas une sonde ultime, mais elle peut remonter direct des tentatives de connections douteuses style ssh.

Je vais l'améliorer par la suite afin qu'elle me remonte un excés de STATE: SYN_ACK.

Voici le code:

Code PYTHON :

#!/usr/bin/env python

import subprocess, sys

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

#exec du netstat
output = subprocess.Popen(
    ['netstat','-t'],
     stdout=subprocess.PIPE).communicate()[0]

#On recupere la sortie
lines = output.strip().splitlines()

#on vire les 2 premiere lignes du netstat
#   Active Internet connections (w/o servers)
#   Proto Recv-Q Send-Q Local Address           Foreign Address         State      
lines.pop(0)
lines.pop(0)

#Liste qui va contenir nos ip
ip_list = []


#On ajoute nos ip (unique) a notre liste
for line in lines:
    line = line.strip().split()
    ip = str(line).split()[4].split(":")[0][1:] # [1:] c'est pour virer le premier char qui est un '
    if ip  not in ip_list:
        ip_list.append(ip)


#declaration d'un tableau 2 dim en fonction du nombre d'ip (unique)
# tab [0][0] = ip
# tab [0][1] = nb de connection pour l'ip
# tab [0][2] = state return Nagios (0, 1, 2, 3, 4)
tab = [[0 for x in xrange(3)] for x in xrange(len(ip_list))]
i = 0

for ip in ip_list:
    tab[i][0] = ip
    i+=1


#On check le nombre de connections de l'ip
for ip in tab:
    for line in lines:
        if ip[0] == str(line).split()[4].split(":")[0]:
            ip[1] += 1

#Check nombre de connection par IP
for conn in tab:
    if conn[1] < 10:
        conn[2] = STATE_OK
    elif (conn[1] >= 10) and (conn[1] < 20):
        print "Many connection for ip %s: %s connection" % (conn[0], conn[1])
        conn[2] = STATE_WARNING
    elif conn[1] >= 20:
        print "WARNING souspicious ip. %s: %s connection" % (conn[0], conn[1])
        conn[2] = STATE_CRITICAL
    else:
        print "UNLNOWN STATE"
        conn[2] = STATE_UNKNOWN

    # On alerte si le state est different de 0
    if conn[2] > 0:
        sys.exit(conn[2])





 


Les conditions sont restreintes mais c'est pour les tests.
Certains me diront surement:
"Euh en faite elle ne remonte qu'une seul IP puis que tu 'sys.exit() si le state est != de 0. DOnc si dans ta liste il y en a d'autre Nagios ne t'averti pas... Confused"
Je répondrai:
"Bah c'est une de trop donc si j'ai cette erreur je vais desuite investiguer donc je verrai de suite si y'en a d'autre.. Wink"

N'étant pas un grand codeur, je suis totalement preneur d'une optimisation quelconque.

Junky,
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (2) -1 (0) Répondre
14-05-2014, 12h30 (Modification du message : 14-05-2014, 12h32 par thxer.)
Message : #2
thxer Hors ligne
:(){ :|:&amp; };:
*



Messages : 382
Sujets : 60
Points: 162
Inscription : Feb 2013
RE: [NAGIOS] - Sonde netstat
Le top ça serait de rajouter une ptit include(); dans le header de nagios et que ton script génère un page_result.php au moins on aurait l'alerte sur la page d'accueil de nagios.

Genre :

If true() :
echo "<script> alert("x tentatives") </script>" ;
else :

echo "<!-- veille en cours -->"

Sinon sympa.
Thxer.com
Twitter Thxer_

Code BASH :
echo "JkZ Palx" | sed 'y/lPZaJxk/MG3@tEH/'




+1 (1) -1 (0) Répondre
14-05-2014, 15h37
Message : #3
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [NAGIOS] - Sonde netstat
- au minimum il doit falloir rajouter l'option -n à netstat pour éviter les résolutions DNS et que la sonde perde du temps
- "souspicious ip" owi sousse, sébon xD
- "Many connection", comme y'en a plusieurs disons "connections"
- selon le cas exclure 127.0.0.1 peut s'avérer utile peut-être ?
- le strip avant le splitlines ne sert à rien
- on peut éviter les pop() avec un slicing
- a la fin le else UNKNOWN_STATE sert à... rien ? ça peut pas arriver imo
- egalement le "if conn[2] > 0: sys.exit()" est dans la boucle for, c'est donc ce dont tu parlais dans ton post, mais effectivement c'est très maladroit x)
- on marque pas "warning" si le status est "critical" ^^
- STATE_UNKNOWN et STATE_DEPENDANT sont définis mais ne servent à rien

je te propose :
Code PYTHON :
#!/usr/bin/env python

import subprocess, sys

STATE_OK, STATE_WARNING, STATE_ALERT = range(3)

output = subprocess.Popen(['netstat','-tn'], stdout=subprocess.PIPE).communicate()[0]
lines = output.splitlines()[2:]

# pour chaque ligne de l'output netstat on garde uniquement l'IP remote
l1 = [i.strip().split()[4].split(':')[0] for i in lines]

# on recupere une liste de tuples (ip, nb d'occurences), on tient pas compte des '127.0.0.1'
l2 = [(i, l1.count(i)) for i in set(l1) if i != '127.0.0.1']

# on recupere le tuple avec le max d'occurences
ip, nb = max(l2, key=lambda i: i[1])

# et on fait nos tests
if nb > 20:
        print 'ALERT: suspicious IP. %s: %d connections' % (ip,nb)
        sys.exit(STATE_ALERT)
elif nb > 10:
        print 'WARNING: many connections for ip %s: %d connections' % (ip,nb)
        sys.exit(STATE_WARNING)
# sinon :
sys.exit(STATE_OK)


sinon la version awk sur une ligne bien dégueu, as usual :
Code AWK :
netstat -tn | awk -F'[ \t:]+' '{tab[$6]++} END {ret=0;for(i in tab){if(tab[i]>10){s="WARNING";n=1};if(tab[i]>20){s="ALERT";n=2};if(tab[i]>10){printf("%s %s: %s connections\n",s,i,tab[i])}};exit(n)}'
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (4) -1 (0) Répondre
14-05-2014, 16h58
Message : #4
Junky Hors ligne
Snorky Master
*



Messages : 228
Sujets : 35
Points: 203
Inscription : Mar 2013
RE: [NAGIOS] - Sonde netstat
Ouah merci pour ta réponse gruik. En 15 lignes, j'viens d'apprendre plein de choses.

Je vais voir pour modifier ma sonde en fonction de la tienne. Oui il ne faut pas faire du copy/paste et c'est mieux de comprendre que de copier.

En tt cas merci!!

PS: en effet ton awk et juste dégueu. Mais il fait le taf... `What Else?
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (0) -1 (0) Répondre
15-05-2014, 16h16
Message : #5
thxer Hors ligne
:(){ :|:&amp; };:
*



Messages : 382
Sujets : 60
Points: 162
Inscription : Feb 2013
RE: [NAGIOS] - Sonde netstat
Je trouve juste le awk énorme Smile
Thxer.com
Twitter Thxer_

Code BASH :
echo "JkZ Palx" | sed 'y/lPZaJxk/MG3@tEH/'




+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [Widget] Nagios for Awesome Junky 6 285 30-07-2014, 11h54
Dernier message: Junky

Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut