Que font ces lignes d'analyse de journaux Perl et comment puis-je trouver quelque chose qui pourrait fonctionner ?

StackOverflow https://stackoverflow.com//questions/9660941

  •  12-12-2019
  •  | 
  •  

Question

Ce problème s'inscrit dans le contexte de pop-before-smtp / Postfix / Dovecot, mais si je connaissais l'analyse des chaînes Perl, je pourrais trouver une réponse moi-même.Cependant, je suis tellement perdu que je ne connais même pas la question précise.En être témoin:

Nous utilisons Postfix depuis LONGTEMPS maintenant et nous en sommes plutôt accros.Nous devons maintenant « entrer dans l’ère moderne » et permettre aux gens d’ENVOYER des e-mails depuis nos serveurs SMTP même lorsqu’ils sont en dehors de notre réseau.Donc, chargé de ce travail, j'ai trouvé pop-before-smtp.

Tu peux le trouver ici.

Donc, j'ai tout configuré mais les tests échouent.Je l'ai résolu en suivant les instructions ici, et a déterminé que le Perl qui tente d'analyser le journal semble être incorrect.Nous utilisons Dovecot comme serveur IMAP/POP, et trois choix sont proposés dans le fichier de configuration.Voici un extrait du fichier de configuration montrant les trois ensembles :

# For Dovecot POP3/IMAP when using syslog.
#$pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
#    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
#$out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
#    'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';

# For Dovecot POP3/IMAP when it does its own logging.
##$logtime_pat = '(\d\d\d\d-\d+-\d+ \d+:\d+:\d+)';
#$pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
#    'Login: .+? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';
#$out_pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
#    'Disconnected.*? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';

# For older Dovecot POP3/IMAP when it does its own logging.
#$pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
#    'Login: \S+ \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';
#$out_pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
#    'Disconnected.*? \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';

Il faut décommenter ceux qui s'appliquent, cependant, aucun d'entre eux ne fonctionne.

Je suppose que « pat » est le modèle de connexion et que out-pat est le modèle de déconnexion ou de déconnexion.

Le format d'enregistrement du journal réel est clairement différent de ces trois formats, mais ils sont proches.Voici un exemple de paire :

Mar 11 17:53:55 imap-login: Info: Login: user=<username>, method=PLAIN, rip=208.54.4.205, lip=192.168.1.1, TLS

Mar 11 17:59:10 IMAP(username): Info: Disconnected: Logged out bytes=352/43743

Lors de l'utilisation de POP, « imap-login » est remplacé par « pop-login », et lors de la déconnexion, « POP » remplace « IMAP » - pourquoi les changements de majuscules, je ne peux pas le dire !

Les données importées sont :L'horodatage, le nom d'utilisateur et, lors de la connexion, l'adresse IP "distante" ("rip").

Avec suffisamment de temps, je pourrai peut-être reconstituer quelque chose qui fonctionne, mais comme je ne connais pas vraiment Perl, c'est un peu difficile.S'il vous plaît, aidez-moi à écrire de nouvelles règles pour analyser la sortie de journalisation utilisée avec notre package Dovecot.

Était-ce utile?

La solution

Le (:?.. une partie d'une expression régulière Perl demande regroupement mais non capturer;cela permet à des groupes entiers d'être mis en correspondance ou ignorés en tant que groupe sans influencer les numéros de groupe de capture ;toutes les lignes capturent exactement un champ, l'adresse IP à autoriser.(Ce qui est un peu étrange, j'aurais pu m'attendre à la fois au nom d'utilisateur et à l'adresse IP, mais cela pourrait être plus facile à long terme.)

# For Dovecot POP3/IMAP when using syslog.
$pat = '^[LOGTIME] \S+ (?:imap|pop3)-login: Info: ' .
    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
# not necessary? see comment header START OF PATTERNS
# $out_pat = '^[LOGTIME] \S+ (?:IMAP|POP3)\(\S+\): Info: ' .
#    'Disconnected.*';

J'ai supprimé le dovecot morceaux car ils ne figuraient pas dans votre entrée.J'ai ajouté le Info: aux deux lignes.J'ai modifié le $out_pat utiliser IMAP(username) au lieu de celui qui n'est plus là imap-login de l'original.(L'utilisation de \S+ sera interrompu si les noms d'utilisateur contiennent des espaces.Puisque cette hypothèse a été faite ailleurs dans le fichier, j'espère que tout va bien.)

Puisqu'il n'y a plus d'adresse IP à capturer pour la ligne de déconnexion, il est probablement préférable de ne pas définir $out_pat -- le START OF PATTERNS le bloc de commentaires inclut la phrase Si l'entrée de votre choix propose également $out_pat, vous devez également décommenter cette variable, ce qui nous permet de garder une trace des utilisateurs qui sont toujours connectés au serveur (par ex.Thunderbird met en cache les connexions IMAP ouvertes).

Je n'ai pas testé cela mais j'en ai de bons sentiments.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top