Erreur ! Le fichier /var/log/portalauth.log reste vide suite à une sauvegarde



  • Bonjour,

    J'ai mis en place le service de portail captif intégré au pfsense et je propose donc un Wifi à mes invités. Quand un utilisateur se connecte au portail captif, les informations de celui-ci sont stockées dans le fichier /var/log/portalauth.log et cela fonctionnait jusqu'à ce matin.

    Afin de garder une trace de l'activité de chacun des utilisateurs utilisant le service (en cas de demande d'une autorité), j'ai créer quelques scripts permettant de sauvegarder les logs suivants :

    • /var/log/portalauth.log : Fichier contenant la date & l'heure de connexion, l'adresse MAC de l'utilisateur et l'adresse IP associée
    Jul 10 08:04:21 pfsense logportalauth[6777]: ACCEPT unauthenticated, XX:XX:XX:XX:XX:XX, YYY.YYY.YYY.YYY
    
    • /var/squid/logs/access.log : Fichier contenant l'historique des utilisateurs
    1436479176.965     68 172.21.8.69 TCP_MISS/304 239 GET http://[url] - DIRECT/[IP] -
    
    Voici les scripts me permettant de réaliser ces fonctions :
    - Script /usr/local/bin/rotate_portalauth.sh : Ce script permet de sauvegarder chaque jour le fichier /var/log/portalauth.log en portalauth.log.YYYYmmdd
    [code]
    #!/bin/sh
    #----------------------------------------------------------------------------------------------------
    #
    # Nom : /usr/local/bin/rotate_portalauth.sh
    # Auteur : kaizen2a
    # Date : 2015/07/09
    # Version : 1.0
    #
    # /usr/local/bin/rotate_portalauth.sh
    #       - Rotation du fichier /var/log/portalauth.log tous les jours a 23h00 au format
    #       /var/log/portalauth.log.YYYYmmdd
    #
    #----------------------------------------------------------------------------------------------------
    
    # Mode debug
    #set -x
    
    ####
    # Commandes
    
    MV=`/bin/mv -f`
    DATE=`/bin/date +%Y%m%d`
    
    ####
    # Variables
    
    FILE_PORTALAUTH=/var/log/portalauth.log
    
    BACKUP_PORTALAUTH=${FILE_PORTALAUTH}.${DATE}
    
    ####
    # Programme
    
    # Creation d'une copie du fichier /var/log/portalauth.log en /var/log/portalauth.log.YYYYmmdd
    ${MV} ${FILE_PORTALAUTH} ${BACKUP_PORTALAUTH}
    
    # Remise a zero du fichier /var/log/portalauth.log
    echo "" > ${FILE_PORTALAUTH}
    [/code]
    
    - Script /usr/local/bin/rotate_access.sh : Ce script permet de sauvegarder chaque jour le fichier /var/squid/logs/access.log en access.log.YYYYmmdd
    [code]
    #!/bin/sh
    #----------------------------------------------------------------------------------------------------
    #
    # Nom : /usr/local/bin/rotate_access_log.sh
    # Auteur : kaizen2a
    # Date : 2015/07/09
    # Version : 1.0
    #
    # /usr/local/bin/rotate_access_log.sh
    #       - Rotation du fichier /var/squid/logs/access.log tous les jours a 23h00 au format
    #       /var/squid/logs/access.log.YYYYmmdd
    #
    #----------------------------------------------------------------------------------------------------
    
    # Mode debug
    #set -x
    
    ####
    # Commandes
    
    DATE=`/bin/date +%Y%m%d`
    
    ####
    # Variables
    
    PATH=/var/squid/logs
    
    FILE_ACCESS=${PATH}/access.log
    
    BACKUP_ACCESS=${FILE_ACCESS}.${DATE}
    
    ####
    # Programme
    
    # Creation d'une copie du fichier /var/squid/logs/access.log en /var/squid/logs/access.log.YYYYmmdd
    mv ${FILE_ACCESS} ${BACKUP_ACCESS}
    
    # Remise a zero du fichier /var/squid/logs/access.log
    echo "" > ${FILE_ACCESS}
    [/code]
    
    - Script /usr/local/bin/archivage_logs_cnil.sh : Ce script permet d'archiver les logs (portalauth.log.YYYYmmdd et access.log.YYYYmmdd) dans le dossier /logs-cnil/cnil-YYYYmmdd/
    [code]
    #!/bin/sh
    #----------------------------------------------------------------------------------------------------
    #
    # Nom : /usr/local/bin/archivage_logs_cnil.sh
    # Auteur : kaizen2a
    # Date : 2015/07/09
    # Version : 1.0
    #
    # /usr/local/bin/archivage_logs_cnil.sh
    #       - Deplacement du fichier access.log.YYYYmmdd dans le dossier /logs-cnil/cnil-YYYYmmdd
    #       - Deplacement du fichier portalauth.log.YYYYmmdd dans le dossier /logs-cnil/cnil-YYYYmmdd
    #       - Creation d'une archive du dossier /logs-cnil/cnil-YYYYmmdd
    #
    #----------------------------------------------------------------------------------------------------
    
    # Mode debug
    #set -x
    
    ####
    # Commandes
    DATE=`/bin/date +%Y%m%d`
    TAR=`/usr/bin/tar`
    
    ####
    # Variables
    
    FILE_PORTALAUTH_LOG=/var/log/portalauth.log.${DATE}
    FILE_ACCESS_LOG=/var/squid/logs/access.log.${DATE}
    
    FOLDER_CNIL=/logs-cnil/cnil-${DATE}
    
    ####
    # Programme
    
    # Creation du dossier /logs-cnil/cnil-${DATE} si il n'existe pas
    if [ ! -d ${FOLDER_CNIL} ];
    then
            mkdir ${FOLDER_CNIL}
    fi
    
    # Deplacement du fichier access.log.XX dans le dossier /logs-cnil/cnil-YYYYmmdd
    mv ${FILE_ACCESS_LOG} ${FOLDER_CNIL}
    
    # Deplacement du fichier portalauth.log.YYYYmmdd dans le dossier /logs-cnil/cnil-YYYYmmdd
    ${MV} ${FILE_PORTALAUTH_LOG} ${FOLDER_CNIL}
    
    # Creation d'une archive du dossier /logs-cnil/cnil-YYYYmmdd
    ${TAR} -czf ${FOLDER_CNIL} ${FOLDER_CNIL}.tar.gz
    [/code]
    
    - Script  /usr/local/bin/clear_dhcpd_leases.sh : Ce script permet de vider les leases DHCP présent dans les fichiers /var/dhcpd/var/db/dhcpd.leases et /var/dhcpd/var/db/dhcpd.leases~
    [code]
    #!/bin/sh
    #----------------------------------------------------------------------------------------------------
    #
    # Nom : /usr/local/bin/clear_dhcpd_leases.sh
    # Auteur : kaizen2a
    # Date : 2015/07/09
    # Version : 1.0
    #
    # /usr/local/bin/clear_dhcpd_leases.sh
    #       - Suppression des leases dhcpd enregistres dans le fichier /var/dhcpd/var/db/dhcpd.leases~
    #       - Suppression des leases dhcpd enregistres dans le fichier /var/dhcpd/var/db/dhcpd.leases
    #
    #----------------------------------------------------------------------------------------------------
    
    # Mode debug
    #set -x
    
    ####
    # Variables
    
    PATH=/var/dhcpd/var/db
    FILE_DHCPD="dhcpd.leases"
    FILE_DHCPD_TILD="dhcpd.leases~"
    
    ####
    # Programme
    
    echo "" > ${PATH}/${FILE_DHCPD}
    echo "" > ${PATH}/${FILE_DHCPD_TILD}
    [/code]
    
    - Script  /usr/local/bin/rotate_logs.sh : Ce script exécute les scripts précédents
    [code]
    #!/bin/sh
    #----------------------------------------------------------------------------------------------------
    #
    # Nom : rotate_logs.sh
    # Auteur :   /usr/local/bin/kaizen2a
    # Date : 2015/07/09
    # Version : 1.0
    #
    # /usr/local/bin/rotate_logs.sh
    #       - Execution du script /usr/local/bin/rotate_portalauth.sh
    #       - Execution du script /usr/local/bin/rotate_access_log.sh
    #       - Execution du script /usr/local/bin/archivage_logs_cnil.sh
    #       - Execution du script /usr/local/bin/clear_dhcpd_leases.sh
    #
    #----------------------------------------------------------------------------------------------------
    
    # Mode debug
    #set -x
    
    ####
    # Variables
    
    SCRIPT_ROTATE_PORTALAUTH="/usr/local/bin/rotate_portalauth.sh"
    SCRIPT_ROTATE_ACCESS="/usr/local/bin/rotate_access_log.sh"
    SCRIPT_ARCHIVAGE="/usr/local/bin/archivage_logs_cnil.sh"
    SCRIPT_CLEAR_DHCP_LEASES="/usr/local/bin/clear_dhcpd_leases.sh"
    
    ####
    # Programme
    
    # Execution du script /usr/local/bin/rotate_portalauth.sh
    ${SCRIPT_ROTATE_PORTALAUTH}
    
    # Execution du script /usr/local/bin/rotate_access_log.sh
    ${SCRIPT_ROTATE_ACCESS}
    
    # Execution du script /usr/local/bin/archivage_logs_cnil.sh
    ${SCRIPT_ARCHIVAGE}
    
    # Execution du script /usr/local/bin/clear_dhcpd_leases.sh
    ${SCRIPT_CLEAR_DHCP_LEASES}
    [/code]
    
    L'exécution de ce script est gérée par le cron de l'utilisateur root :
    [code]
    # 09/07/2015 - Rotation des fichiers de logs (portalauth.log et access.log) du portal captif, avec archivage et suppression des leases DHCP tous les jours a 23h59
    59 23 * * * /usr/local/bin/rotate_logs.sh
    [/code]
    
    Et tous les soirs à minuit le PFSENSE redémarre.
    [code]
    # 09/07/2015 - Redemarrage du pfsense tous les jours a 00h00
    0 0 * * * /sbin/reboot
    [/code]
    
    Concernant les informations de mon PFSENSE :
    [b]Version [/b]: [b]2.1.5-RELEASE [/b] (amd64) 
     built on Mon Aug 25 07:44:45 EDT 2014 
     [url]FreeBSD 8.3-RELEASE-p16[/url]
    
    Ce matin, je suis aller vérifier la bonne exécution de mes scripts et la surprise, le fichier /var/log/portalauth.log reste vide. Cependant via l'interface graphique dans " Status -> Captive Portal -> [Zone]" je vois bien les utilisateurs connectés.
    
    Est ce que quelqu'un a déjà rencontré ce problème ? ou avec vous des pistes afin de corriger cette erreur.
    
    Merci d'avance.
    Cordialement,
    
    kaizen2a
    [/url]
    


  • Je vois que pas mal de monde regarde le topic mais personne ne prends le temps de me répondre ….



  • Bonjour,

    Idée et/ou piste … peut être :

    Pf n'aime pas que l'on lui supprime ses fichiers de log ---> peut être les re-créer vide après leurs suppression  ;)

    cdt



  • Quelques réflexions :

    • le stockage de logs, et à fortiori d'archives de logs, n'est pas souhaitable sur un firewall.
    • l'exécution de cron n'est pas souhaitable sur un firewall.
    • placer un proxy sur firewall est discutable … (pour moi 'pas souhaitable')
    • la rotation de logs access.log de squid n'est pas chose aisée : il est à conseiller d'utiliser 'squid -k'
    • plutôt que 'mv', il est parfois préférable de faire 'cp' puis '>', ce qui évite d'effacer le fichier


  • ou avec vous des pistes afin de corriger cette erreur.

    Dans le sens de ce qui est indiqué précédemment, une solution sûre est bien évidement d'externaliser les logs hors du firewall pour une exploitation un peu sérieuse. Il y a peu j'ai détaillé les risques qu'il y a à faire ce type de modification. Il n'y a que des inconvénients avec ce type de manipulation. A proscrire.


Log in to reply