Les scripts se trouvent dans le répertoire /home/ossecdnc/public_html/ossec2prtg.
- <?php
- /* prtg_demo_1
- 2017/11/08
- Exemple d'interface simple Ossec vers PRTG
- D'une façon générale, l’interface consiste en un service HTTPD Rest local à ce serveur (ce script)
- dont l’URL va être interrogée régulièrement par le capteur (sensor) HTTP Data Advanced.
- La réponse est au format XML imposé par PRTG.
- Dans cet exemple, nous utilisons les bibliothèques bas-niveau d'Ossec WUI (dossier /ossec-wui/lib)
- Copyright (c) 2017 DnC
- auteur B.Degoy bertrand@degoy.com
- Tous droits réservés
- */
- /*
- ***** L'objet Ossec_Alert représente une alerte, exemple :
- $alert
- : object(Ossec_Alert) =
- time: string = "1510095600"
- id: string = "5715"
- level: string = "3"
- user: string = "root"
- srcip: string = "90.109.30.219"
- description: string = "SSHD authentication success."
- location: string = "vps365605->/var/log/secure\n"
- msg: array =
- 0: string = "Nov 7 23:59:58 vps365605 sshd[26329]: Accepted password for root from 90.109.30.219 port 54025 ssh2"
- 1: undefined = NULL
- ***** A propos du nom de l'agent :
- Dans le cas général, location commence par le nom de l'agent entre parenthèses, suivi de l'IP et du nom de fichier.
- Exemple : (agent-test) 78.228.135.29->WinEvtLog
- S'il s'agit du serveur, c'est le nom d'hôte qui est mentionné dans le logs, sans les parenthèses.
- Exemple : vps365605->/var/log/maillog
- Notons que Ossec-WUI liste le serveur dans les agents sous le nom ossec-server.
- ***** Exemple de retour :
- <?xml version="1.0" encoding="UTF-8" ?>
- <prtg>
- <result>
- <channel>ossec-server</channel>
- <value>2</value>
- </result><result>
- <channel>agent-test</channel>
- <value>0</value>
- </result><result>
- <channel>vps411862</channel>
- <value>0</value>
- </result>
- </prtg>
- */
- require_once '../ossec-wui/ossec_conf.php';
- require_once 'os_lib_handle.php';
- $ossec_handle = os_handle_start($ossec_dir);
- require_once 'os_lib_alerts.php';
- require_once 'Ossec/AlertList.php';
- //$log_file = $ossec_handle{'dir'}.'/logs/alerts/alerts.log';
- $log_file = '../ossec/logs/alerts/alerts.log';
- // Mémoriser l'instant de la mesure et calculer l'intervalle avec la précédente
- // Ouvrir le log
- if($fp === false) {
- // ???
- } else {
- $alert_list = new Ossec_AlertList( );
- // Relever les alertes dans l'intervalle
- $alert = __os_parsealert( // objet Ossec_Alert
- $fp, $thistime, $thistime-$intervalle, $thistime, 0, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
- );
- if($alert == NULL) {
- break;
- }
- $alert_list->addAlert( $alert );
- }
- echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
- <prtg>
- ";
- // Lister les agents
- require_once 'os_lib_agent.php';
- if(($agent_list = os_getagents($ossec_handle)) !== NULL) {
- // Distribuer les alertes parmi les agents
- foreach ($agent_list as $agent ) {
- if ( $agent['name'] == "ossec-server" ) {
- // Ossec WUI nomme le serveur "ossec-server", mais ce n'est pas sous ce nom qu'il apparait dans les logs.
- $agent_name = SERVER_NAME;
- } else {
- // Le nom qui nous intéresse est entre parenthèses.
- $agent_name = '(' . $agent['name'] . ')';
- }
- $alert_level_agent[$agent['name']] = 0;
- foreach($alert_list->_alerts as $alert) {
- // Retenir le niveau d'alerte le plus élevé
- }
- }
- echo"<result>
- <channel>" . $agent['name'] . "</channel>
- <value>" . $alert_level_agent[$agent['name']] . "</value>
- </result>";
- }
- }
- echo"
- </prtg>";
- }