= '2.2') {
preg_match ("/@(\d+)\(/",$result, $rule);
} else {
preg_match ("/@(\d+)\s/",$result, $rule);
}
$id = $rule[1];
# Create array of Rule Description and pfctl Rule Number
$rule_list['id'][] = $id;
$rule_list[$id]['name'] = $descr;
}
}
// Add IP to the Suppression Alias
if (isset($_POST['addsuppress'])) {
$ip = "";
if (isset($_POST['ip'])) {
$ip = $_POST['ip'];
$table = $_POST['table'];
$descr = $_POST['descr'];
$cidr = $_POST['cidr'];
// If Description or CIDR field is empty, exit.
if (empty($descr) || empty($cidr)) {
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
if (is_ipaddr($ip)) {
$savemsg1 = "Host IP address {$ip}";
if (is_ipaddrv4($ip)) {
$iptrim1 = preg_replace("/(\d{1,3})\.(\d{1,3}).(\d{1,3}).(\d{1,3})/", '$1.$2.$3.0/24', $ip);
$iptrim2 = preg_replace("/(\d{1,3})\.(\d{1,3}).(\d{1,3}).(\d{1,3})/", '$1.$2.$3.', $ip);
$iptrim3 = preg_replace("/(\d{1,3})\.(\d{1,3}).(\d{1,3}).(\d{1,3})/", '$4', $ip);
if ($cidr == "32") {
$pfb_pfctl = exec ("/sbin/pfctl -t {$table} -T show | grep {$iptrim1} 2>&1");
if ($pfb_pfctl == "") {
$savemsg2 = " : Removed /32 entry";
exec ("/sbin/pfctl -t {$table} -T delete {$ip}");
} else {
$savemsg2 = " : Removed /24 entry, added 254 addr";
exec ("/sbin/pfctl -t {$table} -T delete {$iptrim1}");
for ($add_ip=0; $add_ip <= 255; $add_ip++){
if ($add_ip != $iptrim3) {
exec ("/sbin/pfctl -t {$table} -T add {$iptrim2}{$add_ip}");
}
}
}
} else {
$cidr = 24;
$savemsg2 = " : Removed /24 entry";
exec ("/sbin/pfctl -t {$table} -T delete {$iptrim1} 2>&1", $pfb_pfctl);
if (!preg_grep("/1\/1 addresses deleted/", $pfb_pfctl)) {
$savemsg2 = " : Removed all entries";
// Remove 0-255 IP Address from Alias Table
for ($del_ip=0; $del_ip <= 255; $del_ip++){
exec ("/sbin/pfctl -t {$table} -T delete {$iptrim2}{$del_ip}");
}
}
}
}
// Collect pfBlockerNGSuppress Alias Contents
$pfb_sup_list = array();
$pfb_sup_array = array();
$pfb['found'] = FALSE;
$pfb['update'] = FALSE;
if (is_array($config['aliases']['alias'])) {
foreach ($config['aliases']['alias'] as $alias) {
if ($alias['name'] == "pfBlockerNGSuppress") {
$data = $alias['address'];
$data2 = $alias['detail'];
$arr1 = explode(" ",$data);
$arr2 = explode("||",$data2);
if (!empty($data)) {
$row = 0;
foreach ($arr1 as $host) {
$pfb_sup_list[] = $host;
$pfb_sup_array[$row]['host'] = $host;
$row++;
}
$row = 0;
foreach ($arr2 as $detail) {
$pfb_sup_array[$row]['detail'] = $detail;
$row++;
}
}
$pfb['found'] = TRUE;
}
}
}
// Call Function to Create Suppression Alias if not found.
if (!$pfb['found'])
pfb_create_suppression_alias();
// Save New Suppress IP to pfBlockerNGSuppress Alias
if (in_array($ip . '/' . $cidr, $pfb_sup_list)) {
$savemsg = gettext("Host IP address {$ip} already exists in the pfBlockerNG Suppress Table.");
} else {
if (!$pfb['found'] && empty($pfb_sup_list)) {
$next_id = 0;
} else {
$next_id = count($pfb_sup_list);
}
$pfb_sup_array[$next_id]['host'] = $ip . '/' . $cidr;
$pfb_sup_array[$next_id]['detail'] = $descr;
$address = "";
$detail = "";
foreach ($pfb_sup_array as $pfb_sup) {
$address .= $pfb_sup['host'] . " ";
$detail .= $pfb_sup['detail'] . "||";
}
// Find pfBlockerNGSuppress Array ID Number
if (is_array($config['aliases']['alias'])) {
$pfb_id = 0;
foreach ($config['aliases']['alias'] as $alias) {
if ($alias['name'] == "pfBlockerNGSuppress") {
break;
}
$pfb_id++;
}
}
$config['aliases']['alias'][$pfb_id]['address'] = rtrim($address, " ");
$config['aliases']['alias'][$pfb_id]['detail'] = rtrim($detail, "||");
$savemsg = gettext($savemsg1) . gettext($savemsg2) . gettext(" and added Host to the pfBlockerNG Suppress Table.");
$pfb['update'] = TRUE;
}
if ($pfb['found'] || $pfb['update']) {
// Save all Changes to pfsense config file
write_config();
}
}
}
}
// Host Resolve Function lookup
function getpfbhostname($type = 'src', $hostip, $countme = 0) {
$hostnames['src'] = '';
$hostnames['dst'] = '';
$hostnames[$type] = '
';
return $hostnames;
}
// Determine if Alert Host 'Dest' is within the Local Lan IP Range.
function check_lan_dest($lan_ip,$lan_mask,$dest_ip,$dest_mask="32") {
$result = check_subnets_overlap($lan_ip, $lan_mask, $dest_ip, $dest_mask);
return $result;
}
$pgtitle = gettext("pfBlockerNG: Alerts");
include_once("head.inc");
?>