Marius Cramer
2015-08-06 37b29231e47a0c4458dc1c15d98588f16f07e1e2
commit | author | age
5de2af 1 <?php
M 2
3 /*
4 Copyright (c) 2013, Marius Cramer, pixcept KG
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without modification,
8 are permitted provided that the following conditions are met:
9
10     * Redistributions of source code must retain the above copyright notice,
11       this list of conditions and the following disclaimer.
12     * Redistributions in binary form must reproduce the above copyright notice,
13       this list of conditions and the following disclaimer in the documentation
14       and/or other materials provided with the distribution.
15     * Neither the name of ISPConfig nor the names of its contributors
16       may be used to endorse or promote products derived from this software without
17       specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 class cronjob_monitor_iptables extends cronjob {
32
b1a6a5 33     // job schedule
MC 34     protected $_schedule = '*/5 * * * *';
35     protected $_run_at_new = true;
5de2af 36
b1a6a5 37     private $_tools = null;
5de2af 38
b1a6a5 39     /* this function is optional if it contains no custom code */
MC 40     public function onPrepare() {
41         global $app;
42
43         parent::onPrepare();
44     }
45
46     /* this function is optional if it contains no custom code */
47     public function onBeforeRun() {
48         global $app;
49
50         return parent::onBeforeRun();
51     }
52
53     public function onRunJob() {
54         global $app, $conf;
55
56         /* used for all monitor cronjobs */
57         $app->load('monitor_tools');
58         $this->_tools = new monitor_tools();
59         /* end global section for monitor cronjobs */
60
61         /* the id of the server as int */
62         $server_id = intval($conf['server_id']);
63
64         /** The type of the data */
65
66
67         $type = 'iptables_rules';
68
69         /* This monitoring is only available if fail2ban is installed */
70         system('which iptables', $retval); // Debian, Ubuntu, Fedora
71         if ($retval === 0) {
72             /*  Get the data of the log */
73             $data['output'] = '<h2>iptables -S (ipv4)</h2>'.shell_exec('iptables -S 2>/dev/null');
74
75             /*
5de2af 76                  * At this moment, there is no state (maybe later)
M 77                  */
b1a6a5 78             $state = 'no_state';
MC 79         } else {
80             $state = 'no_state';
81             $data = '';
82         }
5de2af 83
M 84
b1a6a5 85         /* This monitoring is only available if fail2ban is installed */
MC 86         system('which ip6tables', $retval); // Debian, Ubuntu, Fedora
87         if ($retval === 0) {
88             /*  Get the data of the log */
89             $data['output'] .= '<br><h2>ip6tables -S (ipv6)</h2>'.shell_exec('ip6tables -S 2>/dev/null');
5de2af 90
b1a6a5 91             /*
5de2af 92                  * At this moment, there is no state (maybe later)
M 93                  */
b1a6a5 94             $state = 'no_state';
MC 95         } else {
96             $state = 'no_state';
97             $data = '';
98         }
5de2af 99
b1a6a5 100         $res = array();
MC 101         $res['server_id'] = $server_id;
102         $res['type'] = $type;
103         $res['data'] = $data;
104         $res['state'] = $state;
5de2af 105
M 106         /*
107          * Insert the data into the database
108          */
109         $sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
cc7a82 110             'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
MC 111         $app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
5de2af 112
M 113         /* The new data is written, now we can delete the old one */
114         $this->_tools->delOldRecords($res['type'], $res['server_id']);
b1a6a5 115
MC 116         parent::onRunJob();
117     }
118
119     /* this function is optional if it contains no custom code */
120     public function onAfterRun() {
121         global $app;
122
123         parent::onAfterRun();
124     }
5de2af 125
M 126 }
127
128 ?>