Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
sysadmin:tips:logcheck [2014/10/21 11:10] james créée |
sysadmin:tips:logcheck [2015/08/06 11:01] (Version actuelle) james [burp-backup] nouvelles regles |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
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). | 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 :<code>egrep "^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$" /var/log/syslog</code> | ||
+ | |||
+ | Un autre moyen est de lancer un dryrun de logcheck sur un fichier particulier (ici /var/log/syslog), pour se faire : <code> | ||
+ | su logcheck -s /bin/bash -c "/usr/sbin/logcheck -l /var/log/syslog -o -t"</code> | ||
+ | |||
+ | ===== 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 | ||
+ | <note>Ce nommage en accord avec le service n'est en rien obligatoire mais il permet de retrouver ses petits</note> | ||
+ | |||
+ | 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 : | Voici donc quelques règles que j'utilise en plus de celles par défaut : | ||
- | ===== snmpd ===== | + | ==== snmpd ==== |
{{tag>logcheck sysadmin tips debian wheezy ipv6 snmp 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 :<code> | pour gérer correctement l'ipv6 : ajouter dans le fichier /etc/logcheck/ignore.d.server/snmpd :<code> | ||
Ligne 13: | Ligne 26: | ||
pour matcher les règles similaires à : <code>Oct 21 09:05:02 cerbere snmpd[11878]: Connection from UDP/IPv6: [2607:f0d0:1002:51::4]:59407</code> | pour matcher les règles similaires à : <code>Oct 21 09:05:02 cerbere snmpd[11878]: Connection from UDP/IPv6: [2607:f0d0:1002:51::4]:59407</code> | ||
- | ===== bind ===== | + | ==== bind ==== |
{{tag>logcheck sysadmin tips debian wheezy bind}} | {{tag>logcheck sysadmin tips debian wheezy bind}} | ||
pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/bind :<code> | pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/bind :<code> | ||
Ligne 19: | Ligne 32: | ||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ named\[[0-9]+\]: (general: )?(info: )?dumpstats complete$</code> | ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ named\[[0-9]+\]: (general: )?(info: )?dumpstats complete$</code> | ||
- | ===== openvpn ===== | + | ==== openvpn ==== |
{{tag>logcheck sysadmin tips debian wheezy openvpn}} | {{tag>logcheck sysadmin tips debian wheezy openvpn}} | ||
- | pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/openvpn :<code> | + | pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/openvpn : |
- | ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})? CRL CHECK OK:.*$ | + | * CRL CHECK :<code> |
+ | ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})? CRL CHECK OK:.*$</code> | ||
+ | * ajout de [AF_INET] devant les IP :<code> | ||
+ | ^\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}$ | ||
</code> | </code> | ||
+ | {{tag>logcheck sysadmin tips debian jessie openvpn}} | ||
+ | * VERIFY OK debian jessie :<code> | ||
+ | ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ (openvpn|ovpn-[._[:alnum:]-]+)\[[[:digit:]]+\]:( ([-_.@[:alnum:]]+/)?[.[:digit:]]{7,15}:[[:digit:]]{2,5})? VERIFY (SCRIPT )?OK: depth=[[:digit:]]+, (/|C=)[-:_./=@[:alnum:], ]+$</code> | ||
- | ===== amavisd-new ===== | + | ==== amavisd-new ==== |
{{tag>logcheck sysadmin tips debian wheezy amavisd-new amavis}} | {{tag>logcheck sysadmin tips debian wheezy amavisd-new amavis}} | ||
- | pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/openvpn :<code> | + | pour gérer correctement certains messages : ajouter dans le fichier /etc/logcheck/ignore.d.server/amavisd-new :<code> |
^\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$</code>pour gérer les messages type <code> | ^\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$</code>pour gérer les messages type <code> | ||
Oct 16 22:51:57 mailserver amavis[32039]: (32039-11) Passed CLEAN {RelayedInbound}, [10.0.0.1]:39213 [10.0.0.1] <root@domain.com> -> <root@domain.com>, Queue-ID: 8589710013F, Message-ID: <20141016205157.1B85842A6@mailserver.domain.com>, mail_id: DpzmaAs5yyiC,Hits: 4.799, size: 786, queued_as: B5161100158, 140 ms</code> | Oct 16 22:51:57 mailserver amavis[32039]: (32039-11) Passed CLEAN {RelayedInbound}, [10.0.0.1]:39213 [10.0.0.1] <root@domain.com> -> <root@domain.com>, Queue-ID: 8589710013F, Message-ID: <20141016205157.1B85842A6@mailserver.domain.com>, mail_id: DpzmaAs5yyiC,Hits: 4.799, size: 786, queued_as: B5161100158, 140 ms</code> | ||
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. | 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 :<code> | ||
+ | ^\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:]:]+.$ | ||
+ | </code> | ||
+ | |||
+ | ==== 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 :<code> | ||
+ | .... | ||
+ | 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 | ||
+ | .... | ||
+ | </code> 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 : | ||
+ | <code># grep connect /etc/logcheck/ignore.d.server/postfix | grep from</code> | ||
+ | qui devrait vous montrer quelques lignes dont une intéressante qui va servir de base pour notre règle custom :<code> | ||
+ | ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$</code> | ||
+ | on va donc ajouter la présence optionnelle de "submission/" ou "smtps/" entre "postfix/" et "smtpd", ce qui nous donne la ligne : <code>^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/(submission/|smtps/)?smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$</code> | ||
+ | On valide cette règle avec un coup de <code>egrep -e "^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/(submission/|smtps/)?smtpd\[[[:digit:]]+\]: (dis)?connect from [^[:space:]]+$" /var/log/syslog | grep smtps</code> 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 : <code>^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ postfix/(submission/|smtps/)?smtpd\[[[:digit:]]+\]: [[:alnum:]]+: client=[^[:space:]]+, sasl_method=[-[:alnum:]]+, sasl_username=[-_.@[:alnum:]]+$</code> | ||
+ | |||
+ | ===== 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) : | ||
+ | <code> | ||
+ | # 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></code> | ||
+ | et sa règle correspondante :<code> | ||
+ | ^\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:]/\+]+>)?$</code> | ||