{{tag>log mail surveillance sysadmin tips debian logcheck}} ====== Logcheck ====== Pour surveiller les différents serveurs j'utilise [[http://logcheck.org/|Logcheck]] qui est un très bon logiciel : "apt-get install logcheck" si vous ne l'avez pas encore. La configuration de base est triviale et ne sera pas détaillée ici : il faut juste mettre l'adresse mail vers laquelle seront envoyé les extraites de log. La ou bât blesse c'est qu'il arrive que certaines règles ne suffisent pas (ou les logs générés par les différents services changent de format). ===== Deja comment tester une regle ===== Pour tester une règle qui est une regexp on peut utiliser la commande grep, comme par exemple avec une règle pour postfix (donc sur le fichier /var/log/mail.log) : les lignes affichées ici seront ignorées par logcheck :egrep "^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$" /var/log/syslog Un autre moyen est de lancer un dryrun de logcheck sur un fichier particulier (ici /var/log/syslog), pour se faire : su logcheck -s /bin/bash -c "/usr/sbin/logcheck -l /var/log/syslog -o -t" ===== Ajouter des regles ===== Pour ajouter des regles (en fonction du role défini, mais par défaut "server"), cela se passe dans le fichier "/etc/logcheck/ignore.d.server/$SERVICE" en remplaçant $SERVICE par le nom du service Ce nommage en accord avec le service n'est en rien obligatoire mais il permet de retrouver ses petits Le conseil du chef est de ne pas modifier les règles existantes mais d'ajouter les vôtres à un endroit simple pour gérer les futures mises a jour, par exemple ... la fin du fichier :-) Voici donc quelques règles que j'utilise en plus de celles par défaut : ==== snmpd ==== {{tag>logcheck sysadmin tips debian wheezy ipv6 snmp snmpd}} pour gérer correctement l'ipv6 : ajouter dans le fichier /etc/logcheck/ignore.d.server/snmpd : ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ snmpd\[[0-9]+\]: Connection from UDP(/IPv6): \[[.:[:xdigit:]]+\]:[0-9]{4,5}(->\[[.:[:xdigit:]]+\])?$ pour matcher les règles similaires à : Oct 21 09:05:02 cerbere snmpd[11878]: Connection from UDP/IPv6: [2607:f0d0:1002:51::4]:59407 ==== bind ==== {{tag>logcheck sysadmin tips debian wheezy bind}} pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/bind : ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ named\[[0-9]+\]: (general: )?(info: )?received control channel command 'stats'$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ named\[[0-9]+\]: (general: )?(info: )?dumpstats complete$ ==== openvpn ==== {{tag>logcheck sysadmin tips debian wheezy openvpn}} pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/openvpn : * CRL CHECK : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})? CRL CHECK OK:.*$ * ajout de [AF_INET] devant les IP : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:(( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})?( \[[-._[:alnum:]]+\])?)? Peer Connection Initiated with (\[AF_INET\])?[[:digit:].]{7,15}:[[:digit:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})? TLS: Initial packet from (\[AF_INET\])?[.[:digit:]]{7,15}:[[:digit:]]+, sid=[[:xdigit:]]{8} [[:xdigit:]]{8}$ {{tag>logcheck sysadmin tips debian jessie openvpn}} * VERIFY OK debian jessie : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})? VERIFY (SCRIPT )?OK: depth=[[:digit:]]+, (/|C=)[-:_./=@[:alnum:], ]+$ ==== amavisd-new ==== {{tag>logcheck sysadmin tips debian wheezy amavisd-new amavis}} pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/amavisd-new : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) Passed (CLEAN|SPAM(MY)?)( {RelayedInbound})?,( LOCAL)?( \[(IPv6:)?[[:xdigit:].:]{3,39}\](:[[:xdigit:]]{0,5})?){0,2} <[^>]*> -> <[^>]*>(,<[^>]*>)*,( quarantine: ([[:alnum:]]/)?spam-[-+[:alnum:]]+(\.gz)?,)?( Queue-ID: [[:xdigit:]]*,)?( Message-ID: <[^>]+>( \((added by[^)]+|sfid-[_[:xdigit:]]+)\))?,)?( Resent-Message-ID: <[^>]+>,)? mail_id: [-+_[:alnum:]]+, Hits: (-?[.[:digit:]]*)+, size: [[:xdigit:]]+, queued_as: [[:xdigit:]]+( OK id=[-[:alnum:]]+)?, [[:digit:]]+ ms$pour gérer les messages type Oct 16 22:51:57 mailserver amavis[32039]: (32039-11) Passed CLEAN {RelayedInbound}, [10.0.0.1]:39213 [10.0.0.1] -> , Queue-ID: 8589710013F, Message-ID: <20141016205157.1B85842A6@mailserver.domain.com>, mail_id: DpzmaAs5yyiC,Hits: 4.799, size: 786, queued_as: B5161100158, 140 ms ou "[ADRESSE_IP]:PORT [ADRESSE_IP]" ne sont pas filtrés par défaut. De plus il peut y avoir des "_" dans le champs mail_id ajoutés dans cette règle. ==== burp-backup ==== {{tag>logcheck sysadmin tips debian jessie burp backup sauvegarde}} Pour [[http://burp.grke.org/|BURP]], un super logiciel de backup qui supporte aussi (tres bien) les clients windows en plus des linux, ici installé sur une debian jessie : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: auth ok for: [[:alnum:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: Client [[:alnum:]]+ does not want a certificate signed$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: Client uses TLSv1/SSLv3 (-|[[:alnum:]])+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: Client supports being sent counters.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: in do_backup_server$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: Do a backup of [[:alnum:]]+ now.$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: Running backup of [[:alnum:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: Running timer script: [[:alnum:]]+ .*$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: (Out of|In) timeband: .*$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: (Last backup|Next after ): ([[:digit:]]|-)+ ([[:digit:]]|:)+( \(interval [[:digit:]]+h\))?$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: (Not yet time for a backup of|Not running backup of) [[:alnum:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: (/etc/burp/timer_script returned: (0|1)|exit child)$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: forked( status server)? child pid [[:digit:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: deleting [[:alnum:]]+ backup [[:digit:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: exit(ing| status server)$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: (Logging to|Compressing) /[[:alnum:]/]+([[:digit:][:space:]:-]+)?/log( to /[[:alnum:]/]+log.gz...)?$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ burp\[[[:digit:]]+\]: [[:digit:]-]+ [[:digit:]:]+ < [[:digit:]-]+ [[:digit:]:]+.$ ==== Si comme moi vous utilisez des log custom ==== === postfix === J'utilise des logs custom dans postfix car cela permet de tracer plus simplement les connexions d'ou proviennent les mails, et parce que c'est simple de le faire : voici un extrait de mon /etc/postfixmaster.cf : .... submission inet n - - - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING -o syslog_name=postfix/submission smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING -o syslog_name=postfix/smtps .... ou on peut voir que **syslog_name** ont été changé de leur valeur par defaut "postfix" pour devenir "postfix/submission" ou "postfix/smtps" respectivement pour les connexions originaires du port submission ou encore établies en smtps (SSL). Le problème de cette conf est que les règles logcheck d'origine ne matchent plus les logs obtenus : on va donc changer ca. Pour rechercher les règles "connect from" en place par défaut : # grep connect /etc/logcheck/ignore.d.server/postfix | grep from qui devrait vous montrer quelques lignes dont une intéressante qui va servir de base pour notre règle custom : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$ on va donc ajouter la présence optionnelle de "submission/" ou "smtps/" entre "postfix/" et "smtpd", ce qui nous donne la ligne : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/(submission/|smtps/)?smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$ On valide cette règle avec un coup de egrep -e "^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/(submission/|smtps/)?smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$" /var/log/syslog | grep smtps et si on obtient bien les resultats a filtrer on peut ajouter ce filtre au fichier "/etc/logcheck/ignore.d.server/postfix". Autre règle a rajouter : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/(submission/|smtps/)?smtpd\[[[:digit:]]+\]: [[:alnum:]]+: client=[^[:space:]]+, sasl_method=[-[:alnum:]]+, sasl_username=[-_.@[:alnum:]]+$ ===== Le monitoring a une facheuse tendance à faire des faux positifs ===== exemple de log obtenu (adapter à vos IPs de serveurs de monitoring 2607:f0d0:1002:51::1 et serveur dovecot 2607:f0d0:1002:51::2, mais vous ne voulez **pas** mettre ici des "[.:[:xdigit:]]+" pour ne pas cacher de vrais problèmes éventuels) : # Oct 21 09:05:02 monserveur dovecot: imap-login: Aborted login (no auth attempts in 1 secs): user=<>, rip=2607:f0d0:1002:51::1, lip=2607:f0d0:1002:51::2, TLS, session=<2DV5XVTN0gAqAQ41i0SEwAAAAAAAAAAC> et sa règle correspondante : ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ dovecot: (pop3|imap)-login: Aborted login( \([[:digit:]]+ authentication attempts\)| \(no auth attempts in [[:digit:]]+ secs\))?: (user=<[-_.@[:alnum:]]+>, method=[[:alnum:]-]+, |user=<>, )?rip=2607:f0d0:1002:51::1, lip=2607:f0d0:1002:51::2(, (TLS( handshake)?|secured))?(, session=<[[:alnum:]/\+]+>)?$