Project

General

Profile

Download (38.3 KB) Statistics
| Branch: | Tag: | Revision:
1 b2ffe419 Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 5b237745 Scott Ullrich
/*
4 37e2071c Scott Ullrich
	firewall_rules.php
5 e4cabb75 Scott Ullrich
	part of pfSense (http://www.pfsense.com)
6 56dda8e0 Renato Botelho
	Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
7 b2ffe419 Scott Ullrich
8 e4cabb75 Scott Ullrich
	originally part of m0n0wall (http://m0n0.ch/wall)
9
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10 37e2071c Scott Ullrich
	All rights reserved.
11 b2ffe419 Scott Ullrich
12 37e2071c Scott Ullrich
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14 b2ffe419 Scott Ullrich
15 37e2071c Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17 b2ffe419 Scott Ullrich
18 37e2071c Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
19
	   notice, this list of conditions and the following disclaimer in the
20
	   documentation and/or other materials provided with the distribution.
21 b2ffe419 Scott Ullrich
22 37e2071c Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
	POSSIBILITY OF SUCH DAMAGE.
32 5b237745 Scott Ullrich
*/
33 7ac5a4cb Scott Ullrich
/*
34
	pfSense_MODULE:	filter
35
*/
36 5b237745 Scott Ullrich
37 6b07c15a Matthew Grooms
##|+PRIV
38
##|*IDENT=page-firewall-rules
39
##|*NAME=Firewall: Rules page
40
##|*DESCR=Allow access to the 'Firewall: Rules' page.
41
##|*MATCH=firewall_rules.php*
42
##|-PRIV
43
44 5b237745 Scott Ullrich
require("guiconfig.inc");
45 7a927e67 Scott Ullrich
require_once("functions.inc");
46
require_once("filter.inc");
47
require_once("shaper.inc");
48 5b237745 Scott Ullrich
49 7a808e01 Carlos Eduardo Ramos
$pgtitle = array(gettext("Firewall"),gettext("Rules"));
50 b32dd0a6 jim-p
$shortcut_section = "firewall";
51 7a808e01 Carlos Eduardo Ramos
52 00c82782 Renato Botelho
function delete_nat_association($id) {
53
	global $config;
54
55
	if (!$id || !is_array($config['nat']['rule']))
56 673d29c0 Renato Botelho
		return;
57
58 00c82782 Renato Botelho
	$a_nat = &$config['nat']['rule'];
59
60
	foreach ($a_nat as &$natent)
61
		if ($natent['associated-rule-id'] == $id)
62
			$natent['associated-rule-id'] = '';
63 673d29c0 Renato Botelho
}
64
65 5b237745 Scott Ullrich
if (!is_array($config['filter']['rule'])) {
66
	$config['filter']['rule'] = array();
67
}
68
filter_rules_sort();
69
$a_filter = &$config['filter']['rule'];
70
71 07bd3f83 Scott Ullrich
$if = $_GET['if'];
72
if ($_POST['if'])
73
	$if = $_POST['if'];
74 b2ffe419 Scott Ullrich
75 cbe3ea96 Ermal Luçi
$ifdescs = get_configured_interface_with_descr();
76 07bd3f83 Scott Ullrich
77 32c58070 Scott Ullrich
// Drag and drop reordering
78
if($_REQUEST['dragdroporder']) {
79
	// First create a new ruleset array and tmp arrays
80 cb53651f Erik Fonnesbeck
	$a_filter_before = array();
81 32c58070 Scott Ullrich
	$a_filter_order = array();
82
	$a_filter_order_tmp = array();
83 cb53651f Erik Fonnesbeck
	$a_filter_after = array();
84
	$found = false;
85 32c58070 Scott Ullrich
	$drag_order = $_REQUEST['dragtable'];
86
	// Next traverse through rules building a new order for interface
87
	for ($i = 0; isset($a_filter[$i]); $i++) {
88 cb53651f Erik Fonnesbeck
		if(( $_REQUEST['if'] == "FloatingRules" && isset($a_filter[$i]['floating']) ) || ( $a_filter[$i]['interface'] == $_REQUEST['if'] && !isset($a_filter[$i]['floating']) )) {
89 32c58070 Scott Ullrich
			$a_filter_order_tmp[] = $a_filter[$i];
90 cb53651f Erik Fonnesbeck
			$found = true;
91
		} else if (!$found)
92
			$a_filter_before[] = $a_filter[$i];
93
		else
94
			$a_filter_after[] = $a_filter[$i];
95 32c58070 Scott Ullrich
	}
96
	// Reorder rules with the posted order
97 cb53651f Erik Fonnesbeck
	for ($i = 0; $i<count($drag_order); $i++)
98 32c58070 Scott Ullrich
		$a_filter_order[] = $a_filter_order_tmp[$drag_order[$i]];
99 cb53651f Erik Fonnesbeck
	// In case $drag_order didn't account for some rules, make sure we don't lose them
100
	if(count($a_filter_order) < count($a_filter_order_tmp)) {
101
		for ($i = 0; $i<count($a_filter_order_tmp); $i++)
102
			if(!in_array($i, $drag_order))
103
				$a_filter_order[] = $a_filter_order_tmp[$i];
104
	}
105 32c58070 Scott Ullrich
	// Overwrite filter rules with newly created items
106 cb53651f Erik Fonnesbeck
	$config['filter']['rule'] = array_merge($a_filter_before, $a_filter_order, $a_filter_after);
107 32c58070 Scott Ullrich
	// Write configuration
108
	$config = write_config("Drag and drop firewall rules ordering update.");
109
	// Redirect back to page
110 68cbabcb Scott Ullrich
	mark_subsystem_dirty('filter');
111 619f2dbd Scott Ullrich
	$undo = array();
112 56dda8e0 Renato Botelho
	foreach($_REQUEST['dragtable'] as $dt)
113 619f2dbd Scott Ullrich
		$undo[] = "";
114
	$counter = 0;
115
	foreach($_REQUEST['dragtable'] as $dt) {
116
		$undo[$dt] = $counter;
117
		$counter++;
118
	}
119 56dda8e0 Renato Botelho
	foreach($undo as $dt)
120 619f2dbd Scott Ullrich
		$undotxt .= "&dragtable[]={$dt}";
121
	Header("Location: firewall_rules.php?if=" . $_REQUEST['if'] . "&undodrag=true" . $undotxt);
122 32c58070 Scott Ullrich
	exit;
123
}
124
125 be81b340 Erik Fonnesbeck
$icmptypes = array(
126
	"" => gettext("any"),
127 a01ce4c7 jim-p
	"echoreq" => gettext("Echo request"),
128 be81b340 Erik Fonnesbeck
	"echorep" => gettext("Echo reply"),
129
	"unreach" => gettext("Destination unreachable"),
130
	"squench" => gettext("Source quench"),
131
	"redir" => gettext("Redirect"),
132
	"althost" => gettext("Alternate Host"),
133
	"routeradv" => gettext("Router advertisement"),
134
	"routersol" => gettext("Router solicitation"),
135
	"timex" => gettext("Time exceeded"),
136
	"paramprob" => gettext("Invalid IP header"),
137
	"timereq" => gettext("Timestamp"),
138
	"timerep" => gettext("Timestamp reply"),
139
	"inforeq" => gettext("Information request"),
140
	"inforep" => gettext("Information reply"),
141
	"maskreq" => gettext("Address mask request"),
142
	"maskrep" => gettext("Address mask reply")
143
);
144
145 90ba56ad Scott Ullrich
/* add group interfaces */
146
if (is_array($config['ifgroups']['ifgroupentry']))
147
	foreach($config['ifgroups']['ifgroupentry'] as $ifgen)
148
		if (have_ruleint_access($ifgen['ifname']))
149
			$iflist[$ifgen['ifname']] = $ifgen['ifname'];
150
151 aef4dc74 Ermal Luçi
foreach ($ifdescs as $ifent => $ifdesc)
152 56dda8e0 Renato Botelho
	if(have_ruleint_access($ifent))
153 aef4dc74 Ermal Luçi
		$iflist[$ifent] = $ifdesc;
154 88bcd1d2 Scott Dale
155 617f8d25 Ermal Lu?i
if ($config['l2tp']['mode'] == "server")
156 56dda8e0 Renato Botelho
	if(have_ruleint_access("l2tp"))
157
		$iflist['l2tp'] = "L2TP VPN";
158 617f8d25 Ermal Lu?i
159 07bd3f83 Scott Ullrich
if ($config['pptpd']['mode'] == "server")
160 56dda8e0 Renato Botelho
	if(have_ruleint_access("pptp"))
161 d81c2ad1 Scott Ullrich
		$iflist['pptp'] = "PPTP VPN";
162 50e0d2a1 Scott Ullrich
163 b0899ee4 Ermal
if (is_array($config['pppoes']['pppoe'])) {
164
	foreach ($config['pppoes']['pppoe'] as $pppoes)
165
		if (($pppoes['mode'] == 'server') && have_ruleint_access("pppoe"))
166
			$iflist['pppoe'] = "PPPoE Server";
167
}
168 0c554ff6 Scott Ullrich
169 88bcd1d2 Scott Dale
/* add ipsec interfaces */
170 c6dfd289 jim-p
if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable']))
171 56dda8e0 Renato Botelho
	if(have_ruleint_access("enc0"))
172 0f266b2e Chris Buechler
		$iflist["enc0"] = "IPsec";
173 07bd3f83 Scott Ullrich
174 bfb60ac8 Ermal Luçi
/* add openvpn/tun interfaces */
175 d799787e Matthew Grooms
if  ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"])
176 56dda8e0 Renato Botelho
	$iflist["openvpn"] = "OpenVPN";
177 bfb60ac8 Ermal Luçi
178 4a6cf823 Scott Ullrich
pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/interfaces_override");
179
180 92125c97 Ermal Luçi
if (!$if || !isset($iflist[$if])) {
181
	if ("any" == $if)
182 56dda8e0 Renato Botelho
		$if = "FloatingRules";
183
	else if ("FloatingRules" != $if) {
184 0416d9a0 Darren Embry
		if (isset($iflist['wan']))
185
			$if = "wan";
186
		else
187
			$if = "FloatingRules";
188
	}
189 92125c97 Ermal Luçi
}
190 07bd3f83 Scott Ullrich
191 5b237745 Scott Ullrich
if ($_POST) {
192
193
	$pconfig = $_POST;
194
195
	if ($_POST['apply']) {
196 37e2071c Scott Ullrich
		$retval = 0;
197 9a7e416c Scott Ullrich
		$retval = filter_configure();
198
199 a368a026 Ermal Lu?i
		clear_subsystem_dirty('filter');
200 a985eac2 Scott Ullrich
201 1a700ea6 Scott Ullrich
		pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/apply");
202
203 b807a161 Scott Ullrich
		$savemsg = sprintf(gettext("The settings have been applied. The firewall rules are now reloading in the background.<br/>You can also %s monitor %s the reload progress"),"<a href='status_filter_reload.php'>","</a>");
204 5b237745 Scott Ullrich
	}
205
}
206
207 d97c50cd Bill Marquette
if ($_GET['act'] == "del") {
208 673d29c0 Renato Botelho
	if ($a_filter[$_GET['id']]) {
209
		if (!empty($a_filter[$_GET['id']]['associated-rule-id'])) {
210 00c82782 Renato Botelho
			delete_nat_association($a_filter[$_GET['id']]['associated-rule-id']);
211 673d29c0 Renato Botelho
		}
212
		unset($a_filter[$_GET['id']]);
213 3a343d73 jim-p
		if (write_config())
214 bec92ab9 jim-p
			mark_subsystem_dirty('filter');
215 e653b6e1 jim-p
		header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
216 673d29c0 Renato Botelho
		exit;
217
	}
218 d97c50cd Bill Marquette
}
219
220 32c58070 Scott Ullrich
// Handle save msg if defined
221 56dda8e0 Renato Botelho
if($_REQUEST['savemsg'])
222 32c58070 Scott Ullrich
	$savemsg = htmlentities($_REQUEST['savemsg']);
223
224 07bd3f83 Scott Ullrich
if (isset($_POST['del_x'])) {
225
	/* delete selected rules */
226
	if (is_array($_POST['rule']) && count($_POST['rule'])) {
227
		foreach ($_POST['rule'] as $rulei) {
228 00c82782 Renato Botelho
			delete_nat_association($a_filter[$rulei]['associated-rule-id']);
229 07bd3f83 Scott Ullrich
			unset($a_filter[$rulei]);
230
		}
231 3a343d73 jim-p
		if (write_config())
232 bec92ab9 jim-p
			mark_subsystem_dirty('filter');
233 e653b6e1 jim-p
		header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
234 5b237745 Scott Ullrich
		exit;
235
	}
236 07bd3f83 Scott Ullrich
} else if ($_GET['act'] == "toggle") {
237
	if ($a_filter[$_GET['id']]) {
238 56dda8e0 Renato Botelho
		if(isset($a_filter[$_GET['id']]['disabled']))
239
			unset($a_filter[$_GET['id']]['disabled']);
240
		else
241
			$a_filter[$_GET['id']]['disabled'] = true;
242 3a343d73 jim-p
		if (write_config())
243 bec92ab9 jim-p
			mark_subsystem_dirty('filter');
244 e653b6e1 jim-p
		header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
245 5b237745 Scott Ullrich
		exit;
246
	}
247 07bd3f83 Scott Ullrich
} else {
248 b2ffe419 Scott Ullrich
	/* yuck - IE won't send value attributes for image buttons, while Mozilla does -
249 37e2071c Scott Ullrich
	   so we use .x/.y to fine move button clicks instead... */
250 07bd3f83 Scott Ullrich
	unset($movebtn);
251
	foreach ($_POST as $pn => $pd) {
252
		if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
253
			$movebtn = $matches[1];
254
			break;
255
		}
256 5b237745 Scott Ullrich
	}
257 07bd3f83 Scott Ullrich
	/* move selected rules before this rule */
258
	if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
259
		$a_filter_new = array();
260 b2ffe419 Scott Ullrich
261 07bd3f83 Scott Ullrich
		/* copy all rules < $movebtn and not selected */
262
		for ($i = 0; $i < $movebtn; $i++) {
263
			if (!in_array($i, $_POST['rule']))
264
				$a_filter_new[] = $a_filter[$i];
265
		}
266 b2ffe419 Scott Ullrich
267 07bd3f83 Scott Ullrich
		/* copy all selected rules */
268
		for ($i = 0; $i < count($a_filter); $i++) {
269
			if ($i == $movebtn)
270
				continue;
271
			if (in_array($i, $_POST['rule']))
272
				$a_filter_new[] = $a_filter[$i];
273
		}
274 b2ffe419 Scott Ullrich
275 07bd3f83 Scott Ullrich
		/* copy $movebtn rule */
276
		if ($movebtn < count($a_filter))
277
			$a_filter_new[] = $a_filter[$movebtn];
278 b2ffe419 Scott Ullrich
279 07bd3f83 Scott Ullrich
		/* copy all rules > $movebtn and not selected */
280
		for ($i = $movebtn+1; $i < count($a_filter); $i++) {
281
			if (!in_array($i, $_POST['rule']))
282
				$a_filter_new[] = $a_filter[$i];
283
		}
284 b2ffe419 Scott Ullrich
285 07bd3f83 Scott Ullrich
		$a_filter = $a_filter_new;
286 3a343d73 jim-p
		if (write_config())
287 bec92ab9 jim-p
			mark_subsystem_dirty('filter');
288 e653b6e1 jim-p
		header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
289 5b237745 Scott Ullrich
		exit;
290
	}
291
}
292 3a54b6ca Scott Dale
$closehead = false;
293 5b237745 Scott Ullrich
294 9a25487b Scott Ullrich
include("head.inc");
295 5b237745 Scott Ullrich
?>
296 e5c6bd24 Scott Ullrich
<link rel="stylesheet" href="/javascript/chosen/chosen.css" />
297 3a54b6ca Scott Dale
</head>
298
299 5b237745 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
300 6134cc8f Vinicius Coque
<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
301 5b237745 Scott Ullrich
<?php include("fbegin.inc"); ?>
302
<form action="firewall_rules.php" method="post">
303 6dc83d52 Scott Ullrich
304 625dcc40 Bill Marquette
<script type="text/javascript" language="javascript" src="/javascript/row_toggle.js">
305 fa65a62b Scott Ullrich
</script>
306 5b237745 Scott Ullrich
<?php if ($savemsg) print_info_box($savemsg); ?>
307 a368a026 Ermal Lu?i
<?php if (is_subsystem_dirty('filter')): ?><p>
308 619f2dbd Scott Ullrich
<?php
309
if($_REQUEST['undodrag']) {
310 56dda8e0 Renato Botelho
	foreach($_REQUEST['dragtable'] as $dt)
311 619f2dbd Scott Ullrich
		$dragtable .= "&dragtable[]={$dt}";
312 891d4f60 Renato Botelho
	print_info_box_np_undo(gettext("The firewall rule configuration has been changed.<br>You must apply the changes in order for them to take effect."), "apply" , gettext("Apply changes") , "firewall_rules.php?if={$_REQUEST['if']}&dragdroporder=true&{$dragtable}");
313 619f2dbd Scott Ullrich
} else {
314 891d4f60 Renato Botelho
	print_info_box_np(gettext("The firewall rule configuration has been changed.<br>You must apply the changes in order for them to take effect."));
315 619f2dbd Scott Ullrich
}
316
?>
317
<br>
318 5b237745 Scott Ullrich
<?php endif; ?>
319 df222163 Scott Ullrich
<div id="loading" style="visibity:hidden">
320 6dc83d52 Scott Ullrich
	<img src="/themes/<?=$g['theme']?>/images/misc/loader.gif"> Loading, please wait...
321
	<p/>&nbsp;
322
</div>
323 3a4ca65e Scott Ullrich
<?php
324
	pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/before_table");
325
?>
326 07bd3f83 Scott Ullrich
<table width="100%" border="0" cellpadding="0" cellspacing="0">
327 56dda8e0 Renato Botelho
	<tr><td class="tabnavtbl">
328
	<?php
329 0366b748 Scott Ullrich
	/* active tabs */
330
	$tab_array = array();
331 56dda8e0 Renato Botelho
	if ("FloatingRules" == $if)
332
		$active = true;
333
	else
334
		$active = false;
335
	$tab_array[] = array(gettext("Floating"), $active, "firewall_rules.php?if=FloatingRules");
336 0366b748 Scott Ullrich
	$tabscounter = 0; $i = 0; foreach ($iflist as $ifent => $ifname) {
337
		if ($ifent == $if)
338
			$active = true;
339
		else
340
			$active = false;
341
		$tab_array[] = array($ifname, $active, "firewall_rules.php?if={$ifent}");
342
	}
343
	display_top_tabs($tab_array);
344 56dda8e0 Renato Botelho
	?>
345
	</td></tr>
346
	<tr><td>
347
		<div id="mainarea">
348 1db196b2 Scott Ullrich
		<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
349 56dda8e0 Renato Botelho
			<?php
350
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/before_first_tr");
351
			?>
352 1db196b2 Scott Ullrich
			<tr id="frheader">
353
			<td width="3%" class="list">&nbsp;</td>
354
			<td width="5%" class="list">&nbsp;</td>
355 5fec5fe4 Scott Ullrich
			<td width="3%" class="listhdrr"><?=gettext("ID");?></td>
356 56dda8e0 Renato Botelho
			<?php
357 1db196b2 Scott Ullrich
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tablehead");
358 56dda8e0 Renato Botelho
			?>
359 1db196b2 Scott Ullrich
			<td width="6%" class="listhdrr"><?=gettext("Proto");?></td>
360
			<td width="12%" class="listhdrr"><?=gettext("Source");?></td>
361
			<td width="6%" class="listhdrr"><?=gettext("Port");?></td>
362
			<td width="12%" class="listhdrr"><?=gettext("Destination");?></td>
363
			<td width="6%" class="listhdrr"><?=gettext("Port");?></td>
364
			<td width="5%" class="listhdrr"><?=gettext("Gateway");?></td>
365
			<td width="8%" class="listhdrr"><?=gettext("Queue");?></td>
366
			<td width="5%" class="listhdrr"><?=gettext("Schedule");?></td>
367 56dda8e0 Renato Botelho
			<?php
368 10995178 Scott Ullrich
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_desc_tablehead");
369 56dda8e0 Renato Botelho
			?>
370 1db196b2 Scott Ullrich
			<td width="19%" class="listhdr"><?=gettext("Description");?></td>
371
			<td width="10%" class="list">
372 56dda8e0 Renato Botelho
				<table border="0" cellspacing="0" cellpadding="1">
373
					<tr>
374
					<?php
375
						$nrules = 0;
376
						for ($i = 0; isset($a_filter[$i]); $i++) {
377
							$filterent = $a_filter[$i];
378
							if ($filterent['interface'] != $if && !isset($filterent['floating']))
379
								continue;
380
							if (isset($filterent['floating']) && "FloatingRules" != $if)
381
								continue;
382
							$nrules++;
383
						}
384
					?>
385
					<td>
386
					<?php if ($nrules == 0): ?>
387
						<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?gettext("delete selected rules"); ?>" border="0"><?php else: ?>
388
						<input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" onclick="return confirm('<?=gettext('Do you really want to delete the selected rules?');?>')">
389
					<?php endif; ?>
390
					</td>
391
					<td align="center" valign="middle"><a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>&after=-1"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" width="17" height="17" border="0"></a></td>
392
					</tr>
393
				</table>
394
			</td>
395
			</tr>
396
			<?php   // Show the anti-lockout rule if it's enabled, and we are on LAN with an if count > 1, or WAN with an if count of 1.
397
				if (!isset($config['system']['webgui']['noantilockout']) &&
398
					(((count($config['interfaces']) > 1) && ($if == 'lan'))
399
					|| ((count($config['interfaces']) == 1) && ($if == 'wan')))):
400
401
					$alports = implode('<br/>', filter_get_antilockout_ports(true));
402
			?>
403
			<tr valign="top" id="antilockout">
404 03976254 jim-p
			<td class="list">&nbsp;</td>
405
			<td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" border="0"></td>
406 4e8854c6 Charlie Root
			<td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
407 56dda8e0 Renato Botelho
			<?php
408 5fec5fe4 Scott Ullrich
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_antilockout");
409 56dda8e0 Renato Botelho
			?>
410 03976254 jim-p
			<td class="listr" style="background-color: #E0E0E0">*</td>
411
			<td class="listr" style="background-color: #E0E0E0">*</td>
412
			<td class="listr" style="background-color: #E0E0E0">*</td>
413
			<td class="listr" style="background-color: #E0E0E0"><?=$iflist[$if];?> Address</td>
414 31f0ef21 jim-p
			<td class="listr" style="background-color: #E0E0E0"><?= $alports ?></td>
415 03976254 jim-p
			<td class="listr" style="background-color: #E0E0E0">*</td>
416
			<td class="listr" style="background-color: #E0E0E0">*</td>
417 4e8854c6 Charlie Root
			<td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
418 03976254 jim-p
			<td class="listbg"><?=gettext("Anti-Lockout Rule");?></td>
419
			<td valign="middle" nowrap class="list">
420
			<table border="0" cellspacing="0" cellpadding="1">
421
				<tr>
422
					<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>"></td>
423
					<td><a href="system_advanced_admin.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0"></a></td>
424
				</tr>
425
				<tr>
426
					<td align="center" valign="middle"></td>
427
					<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0"></td>
428
				</tr>
429
				</table>
430
			</td>
431
			</tr>
432
<?php endif; ?>
433
434 f1f60c92 Ermal Luçi
<?php if (isset($config['interfaces'][$if]['blockpriv'])): ?>
435 56dda8e0 Renato Botelho
			<tr valign="top" id="frrfc1918">
436
			<td class="list">&nbsp;</td>
437
			<td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0"></td>
438
			<td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
439
			<td class="listr" style="background-color: #E0E0E0">*</td>
440
			<td class="listr" style="background-color: #E0E0E0"><?=gettext("RFC 1918 networks");?></td>
441
			<td class="listr" style="background-color: #E0E0E0">*</td>
442
			<td class="listr" style="background-color: #E0E0E0">*</td>
443
			<td class="listr" style="background-color: #E0E0E0">*</td>
444
			<td class="listr" style="background-color: #E0E0E0">*</td>
445
			<td class="listr" style="background-color: #E0E0E0">*</td>
446
			<td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
447
			<td class="listbg"><?=gettext("Block private networks");?></td>
448
			<td valign="middle" nowrap class="list">
449
				<table border="0" cellspacing="0" cellpadding="1">
450 d9eeccbd Scott Ullrich
					<tr>
451 56dda8e0 Renato Botelho
					<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>"></td>
452
					<td><a href="interfaces.php?if=<?=htmlspecialchars($if)?>#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0"></a></td>
453 d9eeccbd Scott Ullrich
					</tr>
454
					<tr>
455 56dda8e0 Renato Botelho
					<td align="center" valign="middle"></td>
456
					<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0"></td>
457 d9eeccbd Scott Ullrich
					</tr>
458 56dda8e0 Renato Botelho
				</table>
459
			</td>
460
			</tr>
461 c20c0f5a Scott Ullrich
<?php endif; ?>
462 f1f60c92 Ermal Luçi
<?php if (isset($config['interfaces'][$if]['blockbogons'])): ?>
463 56dda8e0 Renato Botelho
			<tr valign="top" id="frrfc1918">
464
			<td class="list">&nbsp;</td>
465
			<td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0"></td>
466
			<td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
467
			<td class="listr" style="background-color: #E0E0E0">*</td>
468
			<td class="listr" style="background-color: #E0E0E0"><?=gettext("Reserved/not assigned by IANA");?></td>
469
			<td class="listr" style="background-color: #E0E0E0">*</td>
470
			<td class="listr" style="background-color: #E0E0E0">*</td>
471
			<td class="listr" style="background-color: #E0E0E0">*</td>
472
			<td class="listr" style="background-color: #E0E0E0">*</td>
473
			<td class="listr" style="background-color: #E0E0E0">*</td>
474
			<td class="listr" style="background-color: #E0E0E0">*</td>
475
			<td class="listbg"><?=gettext("Block bogon networks");?></td>
476
			<td valign="middle" nowrap class="list">
477
				<table border="0" cellspacing="0" cellpadding="1">
478 c20c0f5a Scott Ullrich
					<tr>
479 56dda8e0 Renato Botelho
					<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>"></td>
480
					<td><a href="interfaces.php?if=<?=htmlspecialchars($if)?>#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0"></a></td>
481 c20c0f5a Scott Ullrich
					</tr>
482
					<tr>
483 56dda8e0 Renato Botelho
					<td align="center" valign="middle"></td>
484
					<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0"></td>
485 c20c0f5a Scott Ullrich
					</tr>
486 56dda8e0 Renato Botelho
				</table>
487
			</td>
488
			</tr>
489 c20c0f5a Scott Ullrich
<?php endif; ?>
490 56dda8e0 Renato Botelho
			<tbody id="dragtable" width="100%">
491
<?php $nrules = 0; for ($i = 0; isset($a_filter[$i]); $i++):
492
	pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/row_start");
493
	$filterent = $a_filter[$i];
494
	if ($filterent['interface'] != $if && !isset($filterent['floating']))
495
		continue;
496
	if (isset($filterent['floating']) && "FloatingRules" != $if)
497
		continue;
498
	$isadvset = firewall_check_for_advanced_options($filterent);
499
	if($isadvset)
500
		$advanced_set = "<img src=\"./themes/{$g['theme']}/images/icons/icon_advanced.gif\" title=\"" . gettext("advanced settings set") . ": {$isadvset}\" border=\"0\">";
501
	else
502
		$advanced_set = "";
503
?>
504
			<tr valign="top" id="fr<?=$nrules;?>">
505
			<td class="listt">
506
				<input type="checkbox" id="frc<?=$nrules;?>" name="rule[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nrules;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;">
507
				<?php echo $advanced_set; ?>
508
			</td>
509
			<td class="listt" align="center">
510
			<?php
511
				if ($filterent['type'] == "block")
512
					$iconfn = "block";
513
				else if ($filterent['type'] == "reject")
514
					$iconfn = "reject";
515
				else
516
					$iconfn = "pass";
517
				if (isset($filterent['disabled'])) {
518
					$textss = "<span class=\"gray\">";
519
					$textse = "</span>";
520
					$iconfn .= "_d";
521
				} else {
522
					$textss = $textse = "";
523
				}
524
			?>
525
				<a href="?if=<?=htmlspecialchars($if);?>&act=toggle&id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0" title="<?=gettext("click to toggle enabled/disabled status");?>"></a>
526
			<?php
527
				if (isset($filterent['log'])):
528
					$iconfnlog = "log_s";
529
				if (isset($filterent['disabled']))
530
					$iconfnlog .= "_d";
531
			?>
532
			<br><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfnlog;?>.gif" width="11" height="15" border="0">
533
<?php endif; ?>
534
			</td>
535
			<?php
536
537 2a113ca9 Scott Dale
				//build Alias popup box
538 3a54b6ca Scott Dale
				$alias_src_span_begin = "";
539
				$alias_src_port_span_begin = "";
540
				$alias_dst_span_begin = "";
541
				$alias_dst_port_span_begin = "";
542 56dda8e0 Renato Botelho
543 2a9db752 Scott Dale
				$alias_popup = rule_popup($filterent['source']['address'],pprint_port($filterent['source']['port']),$filterent['destination']['address'],pprint_port($filterent['destination']['port']));
544 56dda8e0 Renato Botelho
545 2a9db752 Scott Dale
				$alias_src_span_begin = $alias_popup["src"];
546
				$alias_src_port_span_begin = $alias_popup["srcport"];
547
				$alias_dst_span_begin = $alias_popup["dst"];
548
				$alias_dst_port_span_begin = $alias_popup["dstport"];
549 56dda8e0 Renato Botelho
550 59167b10 Darren Embry
				$alias_src_span_end = $alias_popup["src_end"];
551
				$alias_src_port_span_end = $alias_popup["srcport_end"];
552
				$alias_dst_span_end = $alias_popup["dst_end"];
553
				$alias_dst_port_span_end = $alias_popup["dstport_end"];
554 56dda8e0 Renato Botelho
555 2a113ca9 Scott Dale
				//build Schedule popup box
556
				$a_schedules = &$config['schedules']['schedule'];
557
				$schedule_span_begin = "";
558
				$schedule_span_end = "";
559 d2aa8cd6 sullrich
				$sched_caption_escaped = "";
560 eace1363 Scott Dale
				$sched_content = "";
561 3b907eb1 Scott Dale
				$schedstatus = false;
562 38f90dc8 Rafael Lucas
				$dayArray = array (gettext('Mon'),gettext('Tues'),gettext('Wed'),gettext('Thur'),gettext('Fri'),gettext('Sat'),gettext('Sun'));
563
				$monthArray = array (gettext('January'),gettext('February'),gettext('March'),gettext('April'),gettext('May'),gettext('June'),gettext('July'),gettext('August'),gettext('September'),gettext('October'),gettext('November'),gettext('December'));
564 b6ab9bd2 Ermal
				if($config['schedules']['schedule'] <> "" and is_array($config['schedules']['schedule'])) {
565 8ce97a08 Scott Dale
					foreach ($a_schedules as $schedule)
566
					{
567
						if ($schedule['name'] == $filterent['sched'] ){
568 60120e37 Ermal Lu?i
							$schedstatus = filter_get_time_based_rule_status($schedule);
569 56dda8e0 Renato Botelho
570 8ce97a08 Scott Dale
							foreach($schedule['timerange'] as $timerange) {
571
								$tempFriendlyTime = "";
572
								$tempID = "";
573
								$firstprint = false;
574
								if ($timerange){
575
									$dayFriendly = "";
576 56dda8e0 Renato Botelho
									$tempFriendlyTime = "";
577
578 8ce97a08 Scott Dale
									//get hours
579
									$temptimerange = $timerange['hour'];
580
									$temptimeseparator = strrpos($temptimerange, "-");
581 56dda8e0 Renato Botelho
582
									$starttime = substr ($temptimerange, 0, $temptimeseparator);
583
									$stoptime = substr ($temptimerange, $temptimeseparator+1);
584
585 8ce97a08 Scott Dale
									if ($timerange['month']){
586
										$tempmontharray = explode(",", $timerange['month']);
587
										$tempdayarray = explode(",",$timerange['day']);
588
										$arraycounter = 0;
589
										$firstDayFound = false;
590
										$firstPrint = false;
591
										foreach ($tempmontharray as $monthtmp){
592
											$month = $tempmontharray[$arraycounter];
593
											$day = $tempdayarray[$arraycounter];
594 56dda8e0 Renato Botelho
595 2a113ca9 Scott Dale
											if (!$firstDayFound)
596
											{
597 8ce97a08 Scott Dale
												$firstDay = $day;
598
												$firstmonth = $month;
599 2a113ca9 Scott Dale
												$firstDayFound = true;
600
											}
601 56dda8e0 Renato Botelho
602 8ce97a08 Scott Dale
											$currentDay = $day;
603
											$nextDay = $tempdayarray[$arraycounter+1];
604
											$currentDay++;
605
											if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])){
606
												if ($firstPrint)
607 2a113ca9 Scott Dale
													$dayFriendly .= ", ";
608
												$currentDay--;
609
												if ($currentDay != $firstDay)
610 8ce97a08 Scott Dale
													$dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
611 2a113ca9 Scott Dale
												else
612 8ce97a08 Scott Dale
													$dayFriendly .=  $monthArray[$month-1] . " " . $day;
613 56dda8e0 Renato Botelho
												$firstDayFound = false;
614 8ce97a08 Scott Dale
												$firstPrint = true;
615 56dda8e0 Renato Botelho
											}
616
											$arraycounter++;
617 2a113ca9 Scott Dale
										}
618
									}
619 8ce97a08 Scott Dale
									else
620
									{
621
										$tempdayFriendly = $timerange['position'];
622
										$firstDayFound = false;
623 56dda8e0 Renato Botelho
										$tempFriendlyDayArray = explode(",", $tempdayFriendly);
624 8ce97a08 Scott Dale
										$currentDay = "";
625
										$firstDay = "";
626
										$nextDay = "";
627 56dda8e0 Renato Botelho
										$counter = 0;
628 8ce97a08 Scott Dale
										foreach ($tempFriendlyDayArray as $day){
629
											if ($day != ""){
630
												if (!$firstDayFound)
631
												{
632
													$firstDay = $tempFriendlyDayArray[$counter];
633
													$firstDayFound = true;
634
												}
635
												$currentDay =$tempFriendlyDayArray[$counter];
636
												//get next day
637
												$nextDay = $tempFriendlyDayArray[$counter+1];
638 56dda8e0 Renato Botelho
												$currentDay++;
639 8ce97a08 Scott Dale
												if ($currentDay != $nextDay){
640
													if ($firstprint)
641
														$dayFriendly .= ", ";
642
													$currentDay--;
643
													if ($currentDay != $firstDay)
644
														$dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
645
													else
646
														$dayFriendly .= $dayArray[$firstDay-1];
647 56dda8e0 Renato Botelho
													$firstDayFound = false;
648
													$firstprint = true;
649 8ce97a08 Scott Dale
												}
650
												$counter++;
651
											}
652
										}
653 56dda8e0 Renato Botelho
									}
654 8ce97a08 Scott Dale
									$timeFriendly = $starttime . " - " . $stoptime;
655
									$description = $timerange['rangedescr'];
656
									$sched_content .= $dayFriendly . "; " . $timeFriendly . "<br>";
657
								}
658 2a113ca9 Scott Dale
							}
659 d2aa8cd6 sullrich
							$sched_caption_escaped = str_replace("'", "\'", $schedule['descr']);
660 59167b10 Darren Embry
							$schedule_span_begin = "<span style=\"cursor: help;\" onmouseover=\"domTT_activate(this, event, 'content', '<h1>{$sched_caption_escaped}</h1><p>{$sched_content}</p>', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><u>";
661
							$schedule_span_end = "</u></span>";
662 2a113ca9 Scott Dale
						}
663
					}
664
				}
665 6fecc73b Scott Dale
				$printicon = false;
666 616dd997 Scott Dale
				$alttext = "";
667
				$image = "";
668 56dda8e0 Renato Botelho
				if (!isset($filterent['disabled'])) {
669
					if ($schedstatus) {
670
						if ($iconfn == "block" || $iconfn == "reject") {
671
							$image = "icon_block";
672
							$alttext = gettext("Traffic matching this rule is currently being denied");
673
						} else {
674
							$image = "icon_pass";
675
							$alttext = gettext("Traffic matching this rule is currently being allowed");
676
						}
677
						$printicon = true;
678
					} else if ($filterent['sched']) {
679
						if ($iconfn == "block" || $iconfn == "reject")
680
							$image = "icon_block_d";
681
						else
682
							$image = "icon_block";
683
						$alttext = gettext("This rule is not currently active because its period has expired");
684
						$printicon = true;
685
					}
686 616dd997 Scott Dale
				}
687 56dda8e0 Renato Botelho
			?>
688
			<td class="listlr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
689
				<?=$textss;?><?php if (isset($filterent['id'])) echo $filterent['id']."&nbsp;"; else echo "&nbsp;"; ?><?=$textse;?>
690
			</td>
691
			<?php
692 5fec5fe4 Scott Ullrich
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr");
693 56dda8e0 Renato Botelho
			?>
694
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
695
			<?=$textss;?>
696
			<?php
697
				if (isset($filterent['ipprotocol'])) {
698
					switch($filterent['ipprotocol']) {
699
						case "inet":
700
							echo "IPv4 ";
701
							break;
702
						case "inet6":
703
							echo "IPv6 ";
704
							break;
705
						case "inet46":
706
							echo "IPv4+6 ";
707
							break;
708
					}
709
				} else {
710
					echo "IPv4 ";
711 be81b340 Erik Fonnesbeck
				}
712 56dda8e0 Renato Botelho
				if (isset($filterent['protocol'])) {
713
					echo strtoupper($filterent['protocol']);
714
					if (strtoupper($filterent['protocol']) == "ICMP" && !empty($filterent['icmptype'])) {
715
						echo ' <span style="cursor: help;" title="ICMP type: ' . $icmptypes[$filterent['icmptype']] . '"><u>';
716
						echo $filterent['icmptype'];
717
						echo '</u></span>';
718
					}
719
				} else echo "*";
720
			?>
721
			<?=$textse;?>
722
			</td>
723
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
724
				<?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
725
			</td>
726
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
727
				<?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['source']['port'])); ?><?php echo $alias_src_port_span_end;?><?=$textse;?>
728
			</td>
729
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
730
				<?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['destination'])); ?><?php echo $alias_dst_span_end;?><?=$textse;?>
731
			</td>
732
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
733
				<?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['destination']['port'])); ?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
734
			</td>
735
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
736
				<?=$textss;?><?php if (isset($config['interfaces'][$filterent['gateway']]['descr'])) echo htmlspecialchars($config['interfaces'][$filterent['gateway']]['descr']); else  echo htmlspecialchars(pprint_port($filterent['gateway'])); ?><?=$textse;?>
737
			</td>
738
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
739
			<?=$textss;?>
740
			<?php
741
				if (isset($filterent['ackqueue']) && isset($filterent['defaultqueue'])) {
742
					$desc = $filterent['ackqueue'] ;
743
					echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['ackqueue']}&action=show\">{$desc}</a>";
744
					$desc = $filterent['defaultqueue'];
745
					echo "/<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&action=show\">{$desc}</a>";
746
				} else if (isset($filterent['defaultqueue'])) {
747
					$desc = $filterent['defaultqueue'];
748 f7344c52 jim-p
					echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&action=show\">{$desc}</a>";
749 56dda8e0 Renato Botelho
				} else
750
					echo gettext("none");
751
			?>
752
			<?=$textse;?>
753
			</td>
754
			<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';"><font color="black">
755
				<?php if ($printicon) { ?><img src="./themes/<?= $g['theme']; ?>/images/icons/<?php echo $image; ?>.gif" title="<?php echo $alttext;?>" border="0"><?php } ?>&nbsp;<?=$textss;?><?php echo $schedule_span_begin;?><?=htmlspecialchars($filterent['sched']);?><?php echo $schedule_span_end; ?><?=$textse;?>
756
			</td>
757
			<?php
758 1db196b2 Scott Ullrich
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_descr_tr");
759 56dda8e0 Renato Botelho
			?>
760
			<td class="listbg" onClick="fr_toggle(<?=$nrules;?>)" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';" class="descr">
761
				<?=$textss;?><?=htmlspecialchars($filterent['descr']);?>&nbsp;<?=$textse;?>
762
			</td>
763
			<td valign="middle" nowrap class="list">
764
				<table border="0" cellspacing="0" cellpadding="1">
765 07bd3f83 Scott Ullrich
					<tr>
766 56dda8e0 Renato Botelho
					<td><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule"); ?>" onMouseOver="fr_insline(<?=$nrules;?>, true)" onMouseOut="fr_insline(<?=$nrules;?>, false)"></td>
767
					<td><a href="firewall_rules_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule"); ?>" width="17" height="17" border="0"></a></td>
768 07bd3f83 Scott Ullrich
					</tr>
769
					<tr>
770 56dda8e0 Renato Botelho
					<td align="center" valign="middle"><a href="firewall_rules.php?act=del&if=<?=htmlspecialchars($if);?>&id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule"); ?>" onclick="return confirm('Do you really want to delete this rule?')"></a></td>
771
					<td><a href="firewall_rules_edit.php?dup=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new rule based on this one"); ?>" width="17" height="17" border="0"></a></td>
772 07bd3f83 Scott Ullrich
					</tr>
773 56dda8e0 Renato Botelho
				</table>
774
			</td>
775
			</tr>
776
			<?php $nrules++; endfor; ?>
777 32c58070 Scott Ullrich
			  </tbody>
778 56dda8e0 Renato Botelho
<?php if ($nrules == 0): ?>
779
			<td class="listt"></td>
780
			<td class="listt"></td>
781
			<td class="listlr" colspan="10" align="center" valign="middle">
782
			<span class="gray">
783
	<?php if ($_REQUEST['if'] == "FloatingRules"): ?>
784
				<?=gettext("No floating rules are currently defined."); ?><br/><br/>
785
	<?php else: ?>
786
				<?=gettext("No rules are currently defined for this interface"); ?><br/>
787
				<?=gettext("All incoming connections on this interface will be blocked until you add pass rules."); ?><br/><br/>
788
	<?php endif; ?>
789
				<?=gettext("Click the"); ?> <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" border="0" width="17" height="17" align="absmiddle"></a><?=gettext(" button to add a new rule.");?></span>
790
			</td>
791
<?php endif; ?>
792
			<tr id="fr<?=$nrules;?>">
793
			<td class="list"></td>
794
			<td class="list"></td>
795
			<?php
796 8c5bf3d7 Scott Ullrich
				pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_belowtable");
797 56dda8e0 Renato Botelho
			?>
798
			<td class="list">&nbsp;</td>
799
			<td class="list">&nbsp;</td>
800
			<td class="list">&nbsp;</td>
801
			<td class="list">&nbsp;</td>
802
			<td class="list">&nbsp;</td>
803
			<td class="list">&nbsp;</td>
804
			<td class="list">&nbsp;</td>
805
			<td class="list">&nbsp;</td>
806
			<td class="list">&nbsp;</td>
807
			<td class="list">&nbsp;</td>
808
			<td class="list">
809
				<table border="0" cellspacing="0" cellpadding="1">
810 07bd3f83 Scott Ullrich
					<tr>
811 56dda8e0 Renato Botelho
					<td>
812
						<?php if ($nrules == 0): ?><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules to end");?>" border="0"><?php else: ?><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="<?=gettext("move selected rules to end");?>" onMouseOver="fr_insline(<?=$nrules;?>, true)" onMouseOut="fr_insline(<?=$nrules;?>, false)"><?php endif; ?></td>
813
					<td></td>
814 07bd3f83 Scott Ullrich
					</tr>
815 56dda8e0 Renato Botelho
					<tr>
816
					<td>
817
<?php if ($nrules == 0): ?>
818
						<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0"><?php else: ?>
819
						<input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" onclick="return confirm('<?=gettext('Do you really want to delete the selected rules?');?>')">
820 a3381369 Colin Fleming
<?php endif; ?>
821 56dda8e0 Renato Botelho
					</td>
822
			                <td><a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" width="17" height="17" border="0"></a></td>
823
					</tr>
824
				</table>
825
			</td>
826
			</tr>
827
		</table>
828
		<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
829
			<tr>
830
				<td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11"></td>
831
				<td><?=gettext("pass");?></td>
832
				<td width="14"></td>
833
				<td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11"></td>
834
				<td><?=gettext("block");?></td>
835
				<td width="14"></td>
836
				<td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject.gif" width="11" height="11"></td>
837
				<td><?=gettext("reject");?></td>
838
				<td width="14"></td>
839
				<td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" width="11" height="11"></td>
840
				<td><?=gettext("log");?></td>
841
			</tr>
842
			<tr>
843
				<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass_d.gif" width="11" height="11"></td>
844
				<td nowrap><?=gettext("pass (disabled)");?></td>
845
				<td>&nbsp;</td>
846
				<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block_d.gif" width="11" height="11"></td>
847
				<td nowrap><?=gettext("block (disabled)");?></td>
848
				<td>&nbsp;</td>
849
				<td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11"></td>
850
				<td nowrap><?=gettext("reject (disabled)");?></td>
851
				<td>&nbsp;</td>
852
				<td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log_d.gif" width="11" height="11"></td>
853
				<td nowrap><?=gettext("log (disabled)");?></td>
854
			</tr>
855
			<tr>
856
				<td colspan="10">
857
					&nbsp;<p/>
858
					<strong>
859
						<span class="red"><?=gettext("Hint:");?></span>
860
					</strong><br>
861
					<ul>
862
					<?php if ("FloatingRules" != $if): ?>
863
						<li><?=gettext("Rules are evaluated on a first-match basis (i.e. " .
864
						"the action of the first rule to match a packet will be executed). " .
865
						"This means that if you use block rules, you'll have to pay attention " .
866
						"to the rule order. Everything that isn't explicitly passed is blocked " .
867
						"by default. ");?>
868
						</li>
869
					<?php else: ?>
870
						<li><?=gettext("Floating rules are evaluated on a first-match basis (i.e. " .
871
						"the action of the first rule to match a packet will be executed) only " .
872
						"if the 'quick' option is checked on a rule. Otherwise they will only apply if no " .
873
						"other rules match. Pay close attention to the rule order and options " .
874
						"chosen. If no rule here matches, the per-interface or default rules are used. ");?>
875
						</li>
876
					<?php endif; ?>
877
					</ul>
878
				 </td>
879
			</tr>
880
		</table>
881
		</div>
882
	</td>
883
	</tr>
884 d732f186 Bill Marquette
</table>
885 56dda8e0 Renato Botelho
<input type="hidden" name="if" value="<?=htmlspecialchars($if);?>">
886
<script type="text/javascript">
887 7abaeb1f Scott Ullrich
	var number_of_rules = <?=$nrules?>;
888 56dda8e0 Renato Botelho
	<?php $nrules = 0; for ($i = 0; isset($a_filter[$i]); $i++): ?>
889
	/*
890
		Sortable.create("dragtable", {
891
			tag:"tr",
892
			format:"fr([0-9999999])",
893
			containment:["dragtable"],
894
			onChange:function(affected) {
895
				document.body.style.cursor = 'move';
896
			},
897
			onUpdate:function(container) {
898
				document.body.style.cursor = 'move';
899
				updateOrder(Sortable.serialize('dragtable', 'tr'));
900
			}
901
		});
902
	*/
903
	<?php endfor; ?>
904 32c58070 Scott Ullrich
	function updateOrder(order) {
905 12c54789 Scott Ullrich
		if(document.getElementById("redboxtable"))
906 df39dd8a Vinicius Coque
			jQuery('#redboxtable').hide();
907
		jQuery('#loading').show();
908 32c58070 Scott Ullrich
		document.body.style.cursor = 'wait';
909 dd5bf424 Scott Ullrich
		document.location = 'firewall_rules.php?if=<?=htmlspecialchars($if);?>&dragdroporder=true&' + Sortable.serialize('dragtable', 'tr');
910 32c58070 Scott Ullrich
		return;
911
	}
912 df39dd8a Vinicius Coque
	jQuery('#loading').hide();
913 56dda8e0 Renato Botelho
</script>
914 07bd3f83 Scott Ullrich
</form>
915 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
916 af4aa061 Scott Ullrich
</body>
917
</html>