return '/tmp/run_pman_admin_iptables-'.$db;
}
- function get($opt = '')
+ function get($opt = '', $opts = Array())
{
// monitor file
*/
//DB_DataObject::debugLevel(1);
- $p = DB_DataObject::Factory('Person');
+ $p = DB_DataObject::Factory('core_person');
$p->autoJoin();
$p->whereAdd("join_company_id_id.comptype = 'OWNER'");
$p->selectAdd();
max(event_when) + $interval as expires
");
- $e->person_table = DB_DataObject::factory('person')->tableName();
+ $e->person_table = DB_DataObject::factory('core_person')->tableName();
$e->whereAddIn('person_id', $peps, 'int');
$e->groupBy('ipaddr');
$e->whereAdd("event_when > NOW() - $interval");
require_once 'System.php';
//inet addr:202.67.151.28 Bcast:202.67.151.255 Mask:255.255.255.0
- $ifconfig = System::which('ifconfig');
+ $ifconfig = System::which('ifconfig','/sbin/ifconfig');
- if (!$ifconfig) {
+ if (!$ifconfig || !file_exists($ifconfig)) {
$this->jerr("ifconfig could not be found.");
}
exit;
}
- function updateTables()
+
+ function readChain($chain)
{
-
- require_once 'System.php';
- $iptables = System::which('iptables');
+ static $iptables;
- if (!$iptables) {
- $this->jerr("iptables could not be found.");
+ if (!$iptables) {
+ require_once 'System.php';
+
+ $iptables = System::which('iptables', '/sbin/iptables');
+
+ if (!$iptables || !file_exists($iptables)) {
+ $this->jerr("iptables could not be found.");
+ }
}
// this should have been set up already..
// in the base firewall code.
-
- // -A INPUT -p udp -m udp --dport 5432 -j postgres
- // -A INPUT -p tcp -m tcp --dport 5432 -j postgres
+ $res = $this->exec("{$iptables} -L {$chain} -v -n --line-numbers");
- // /sbin/iptables -L postgres -v -n --line-numbers
- $res = $this->exec("{$iptables} -L postgres -v -n --line-numbers");
-
-
$lastrulenum = 1;
$remove = array();
}
// print_r($row);
//var_dump($row['target']);
- if ($row['target'] != 'ACCEPT') {
- continue;
- }
+
// got input rules now..
if (!empty($row['comments'])) {
$row[$k] = $v;
}
}
+ $rows[] = $row;
+
+
+ }
+ if (empty($head)) {
+ return false;
+ }
+
+ return $rows;
+
+ }
+
+
+
+ function updateTables()
+ {
+ static $iptables;
+
+ if (!$iptables) {
+ require_once 'System.php';
+
+ $iptables = System::which('iptables', '/sbin/iptables');
+
+ if (!$iptables || !file_exists($iptables)) {
+ $this->jerr("iptables could not be found.");
+ }
+ }
+ // this should have been set up already..
+ // in the base firewall code.
+
+
+ $rows = $this->readChain('INPUT');
+ $gotpg = false;
+ foreach($rows as $r) {
+ if ($r['target'] == 'postgres') {
+ $gotpg = true;
+ }
+ }
+ if (!$gotpg) {
+ $this->exec("{$iptables} -A INPUT -p udp -m udp --dport 5432 -j postgres");
+ $this->exec("{$iptables} -A INPUT -p tcp -m udp --dport 5432 -j postgres");
+ }
+
+
+ $rows = $this->readChain('postgres');
+ if ($rows === false) {
+ $this->createBase();
+ $rows = array();
+ }
+
+ $lastrulenum = 1;
+
+ $remove = array();
+ $cur = array();
+
+ foreach($rows as $row) {
+
+ // print_r($row);
+ //var_dump($row['target']);
+ if ($row['target'] != 'ACCEPT') {
+ continue;
+ }
+
if (!empty($row['expires'])) {
if (strtotime($row['expires']) < time()) {
$remove[ $row['source'] ] = $row;
$lastrulenum = $row['num'];
}
- if (empty($head)) {
- // then there was no chain.
- $this->createBase();
- }
+
- print_r($cur);
+ //print_r($cur);
//--comment
// remove rules that need deleting..
foreach($remove as $ip => $r) {
- $this->exec("{$iptables} -d postgres {$r['num']} ");
+
+ $this->removeIp($ip);
+
}
-
+ $this->exec("{$iptables} -L postgres -v -n --line-numbers");
+
}
+ function removeIp($ip)
+ {
+ static $iptables;
+
+ if (!$iptables) {
+ require_once 'System.php';
+
+ $iptables = System::which('iptables', '/sbin/iptables');
+
+ if (!$iptables || !file_exists($iptables)) {
+ $this->jerr("iptables could not be found.");
+ }
+ }
+ // we need to scan the list each time, as the order get's renumbered when we remove wone...
+ $ar = $this->readChain('postgres');
+ foreach($ar as $row) {
+ if ($row['target'] != 'ACCEPT') {
+ continue;
+ }
+
+ if ($row['source'] != $ip) {
+ continue;
+ }
+ $this->exec("{$iptables} -D postgres {$row['num']} ");
+ break;
+ }
+ }
+
+
function createBase()
{
- $iptables = System::which('iptables');
- if (!$iptables) {
+ require_once 'System.php';
+
+ $iptables = System::which('iptables', '/sbin/iptables');
+
+ if (!$iptables || !file_exists($iptables)) {
$this->jerr("iptables could not be found.");
}