Project

General

Profile

Download (29.9 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
	firewall_rules.php
5
	part of pfSense (http://www.pfsense.com)
6
        Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
7

    
8
	originally part of m0n0wall (http://m0n0.ch/wall)
9
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
	All rights reserved.
11

    
12
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14

    
15
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17

    
18
	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

    
22
	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
*/
33

    
34
##|+PRIV
35
##|*IDENT=page-firewall-rules
36
##|*NAME=Firewall: Rules page
37
##|*DESCR=Allow access to the 'Firewall: Rules' page.
38
##|*MATCH=firewall_rules.php*
39
##|-PRIV
40

    
41

    
42
$pgtitle = array("Firewall", "Rules");
43
require("guiconfig.inc");
44

    
45
if (!is_array($config['filter']['rule'])) {
46
	$config['filter']['rule'] = array();
47
}
48
filter_rules_sort();
49
$a_filter = &$config['filter']['rule'];
50

    
51
$if = $_GET['if'];
52
if ($_POST['if'])
53
	$if = $_POST['if'];
54

    
55
$ifdescs = get_configured_interface_with_descr();
56

    
57
/* add group interfaces */
58
if (is_array($config['ifgroups']['ifgroupentry']))
59
	foreach($config['ifgroups']['ifgroupentry'] as $ifgen)
60
		if (have_ruleint_access($ifgen['ifname']))
61
			$iflist[$ifgen['ifname']] = $ifgen['ifname'];
62

    
63
foreach ($ifdescs as $ifent => $ifdesc)
64
	if(have_ruleint_access($ifent)) 
65
		$iflist[$ifent] = $ifdesc;
66

    
67
if ($config['l2tp']['mode'] == "server")
68
        if(have_ruleint_access("l2tp"))
69
                $iflist['l2tp'] = "L2TP VPN";
70

    
71
if ($config['pptpd']['mode'] == "server")
72
	if(have_ruleint_access("pptp")) 
73
		$iflist['pptp'] = "PPTP VPN";
74

    
75
if ($config['pppoe']['mode'] == "server")
76
	if(have_ruleint_access("pppoe")) 
77
		$iflist['pppoe'] = "PPPoE VPN";
78

    
79
/* add ipsec interfaces */
80
if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable']))
81
	if(have_ruleint_access("enc0")) 
82
		$iflist["enc0"] = "IPsec";
83

    
84
/* add openvpn/tun interfaces */
85
if  ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"])
86
   	$iflist["openvpn"] = "OpenVPN";
87

    
88
if (!$if || !isset($iflist[$if])) {
89
	if ("any" == $if)
90
                $if = "FloatingRules";
91
        else if ("FloatingRules" != $if)
92
                $if = "wan";
93
}
94

    
95
if ($_POST) {
96

    
97
	$pconfig = $_POST;
98

    
99
	if ($_POST['apply']) {
100
		$retval = 0;
101
		config_lock();
102
		$retval = filter_configure();
103
		config_unlock();
104

    
105
		if (file_exists($d_filterconfdirty_path))
106
			unlink($d_filterconfdirty_path);
107

    
108
		$savemsg = "The settings have been applied.  The firewall rules are now reloading in the background.  You can also <a href='status_filter_reload.php'>monitor</a> the reload progress.";
109
	}
110
}
111

    
112
if ($_GET['act'] == "del") {
113
        if ($a_filter[$_GET['id']]) {
114
                unset($a_filter[$_GET['id']]);
115
                write_config();
116
                touch($d_filterconfdirty_path);
117
                header("Location: firewall_rules.php?if={$if}");
118
                exit;
119
        }
120
}
121

    
122
if (isset($_POST['del_x'])) {
123
	/* delete selected rules */
124
	if (is_array($_POST['rule']) && count($_POST['rule'])) {
125
		foreach ($_POST['rule'] as $rulei) {
126
			unset($a_filter[$rulei]);
127
		}
128
		write_config();
129
		touch($d_filterconfdirty_path);
130
		header("Location: firewall_rules.php?if={$if}");
131
		exit;
132
	}
133
} else if ($_GET['act'] == "toggle") {
134
	if ($a_filter[$_GET['id']]) {
135
                if(isset($a_filter[$_GET['id']]['disabled']))
136
                        unset($a_filter[$_GET['id']]['disabled']);
137
                else
138
                        $a_filter[$_GET['id']]['disabled'] = true;
139
		write_config();
140
		touch($d_filterconfdirty_path);
141
		header("Location: firewall_rules.php?if={$if}");
142
		exit;
143
	}
144
} else {
145
	/* yuck - IE won't send value attributes for image buttons, while Mozilla does -
146
	   so we use .x/.y to fine move button clicks instead... */
147
	unset($movebtn);
148
	foreach ($_POST as $pn => $pd) {
149
		if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
150
			$movebtn = $matches[1];
151
			break;
152
		}
153
	}
154
	/* move selected rules before this rule */
155
	if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
156
		$a_filter_new = array();
157

    
158
		/* copy all rules < $movebtn and not selected */
159
		for ($i = 0; $i < $movebtn; $i++) {
160
			if (!in_array($i, $_POST['rule']))
161
				$a_filter_new[] = $a_filter[$i];
162
		}
163

    
164
		/* copy all selected rules */
165
		for ($i = 0; $i < count($a_filter); $i++) {
166
			if ($i == $movebtn)
167
				continue;
168
			if (in_array($i, $_POST['rule']))
169
				$a_filter_new[] = $a_filter[$i];
170
		}
171

    
172
		/* copy $movebtn rule */
173
		if ($movebtn < count($a_filter))
174
			$a_filter_new[] = $a_filter[$movebtn];
175

    
176
		/* copy all rules > $movebtn and not selected */
177
		for ($i = $movebtn+1; $i < count($a_filter); $i++) {
178
			if (!in_array($i, $_POST['rule']))
179
				$a_filter_new[] = $a_filter[$i];
180
		}
181

    
182
		$a_filter = $a_filter_new;
183
		write_config();
184
		touch($d_filterconfdirty_path);
185
		header("Location: firewall_rules.php?if={$if}");
186
		exit;
187
	}
188
}
189
$closehead = false;
190

    
191
include("head.inc");
192

    
193
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/domLib.js\"></script>";
194
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/domTT.js\"></script>";
195
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/behaviour.js\"></script>";
196
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>";
197
?>
198
</head>
199

    
200
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
201
<?php include("fbegin.inc"); ?>
202
<form action="firewall_rules.php" method="post">
203
<script type="text/javascript" language="javascript" src="/javascript/row_toggle.js">
204
</script>
205
<?php if ($savemsg) print_info_box($savemsg); ?>
206
<?php if (file_exists($d_filterconfdirty_path)): ?><p>
207
<?php print_info_box_np("The firewall rule configuration has been changed.<br>You must apply the changes in order for them to take effect.");?><br>
208
<?php endif; ?>
209
<table width="100%" border="0" cellpadding="0" cellspacing="0">
210
  <tr><td class="tabnavtbl">
211
  <?php
212
	/* active tabs */
213
	$tab_array = array();
214
       if ("FloatingRules" == $if)
215
                        $active = true;
216
                else
217
                        $active = false;
218
        $tab_array[] = array("Floating", $active, "firewall_rules.php?if=FloatingRules");
219
	$tabscounter = 0; $i = 0; foreach ($iflist as $ifent => $ifname) {
220
		if ($ifent == $if)
221
			$active = true;
222
		else
223
			$active = false;
224
		$tab_array[] = array($ifname, $active, "firewall_rules.php?if={$ifent}");
225
	}
226
	display_top_tabs($tab_array);
227
  ?>
228
  </td></tr>
229
  <tr>
230
    <td>
231
	<div id="mainarea">
232
              <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
233
                <tr id="frheader">
234
                  <td width="3%" class="list">&nbsp;</td>
235
                  <td width="5%" class="list">&nbsp;</td>
236
                  <td width="6%" class="listhdrr">Proto</td>
237
                  <td width="15%" class="listhdrr">Source</td>
238
                  <td width="7%" class="listhdrr">Port</td>
239
                  <td width="15%" class="listhdrr">Destination</td>
240
                  <td width="7%" class="listhdrr">Port</td>
241
		  <td width="5%" class="listhdrr">Gateway</td>
242
		  <td width="10%" class="listhdrr">Queue</td>
243
		  <td width="5%" class="listhdrr">Schedule</td>
244
                  <td width="22%" class="listhdr">Description</td>
245
                  <td width="10%" class="list">
246
			<table border="0" cellspacing="0" cellpadding="1">
247
			   <tr>
248
				<?php
249
					$nrules = 0;
250
					for ($i = 0; isset($a_filter[$i]); $i++) {
251
						$filterent = $a_filter[$i];
252
						if ($filterent['interface'] != $if && !isset($filterent['floating']))
253
                                                       continue;
254
                                               if (isset($filterent['floating']) && "FloatingRules" != $if)
255
							continue;
256
						$nrules++;
257
					}
258
				?>
259
				<td>
260
				<?php if ($nrules == 0): ?>
261
				<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="delete selected rules" border="0"><?php else: ?>
262
				<input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="delete selected rules" onclick="return confirm('Do you really want to delete the selected rules?')"><?php endif; ?>
263
				</td>
264
				<td align="center" valign="middle"><a href="firewall_rules_edit.php?if=<?=$if;?>&after=-1"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="add new rule" width="17" height="17" border="0"></a></td>
265
			   </tr>
266
			</table>
267
		  </td>
268
		</tr>
269
<?php if (isset($config['interfaces'][$if]['blockpriv'])): ?>
270
                <tr valign="top" id="frrfc1918">
271
                  <td width="3%" class="list">&nbsp;</td>
272
                  <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0"></td>
273
                  <td class="listlr" style="background-color: #e0e0e0">*</td>
274
                  <td class="listr" style="background-color: #e0e0e0">RFC 1918 networks</td>
275
                  <td class="listr" style="background-color: #e0e0e0">*</td>
276
                  <td class="listr" style="background-color: #e0e0e0">*</td>
277
                  <td class="listr" style="background-color: #e0e0e0">*</td>
278
                  <td class="listr" style="background-color: #e0e0e0">*</td>
279
		<td class="listr" style="background-color: #e0e0e0">*</td>
280
	 		 <td class="listr" style="background-color: #e0e0e0"></td>
281
                  <td class="listbg">Block private networks</td>
282
                  <td valign="middle" nowrap class="list">
283
				    <table border="0" cellspacing="0" cellpadding="1">
284
					<tr>
285
					  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="move selected rules before this rule"></td>
286
					  <td><a href="interfaces.php#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="edit rule" width="17" height="17" border="0"></a></td>
287
					</tr>
288
					<tr>
289
					  <td align="center" valign="middle"></td>
290
					  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="add a new rule based on this one" width="17" height="17" border="0"></td>
291
					</tr>
292
					</table>
293
				  </td>
294
				</tr>
295
<?php endif; ?>
296
<?php if (isset($config['interfaces'][$if]['blockbogons'])): ?>
297
                <tr valign="top" id="frrfc1918">
298
                  <td width="3%" class="list">&nbsp;</td>
299
                  <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0"></td>
300
                  <td class="listlr" style="background-color: #e0e0e0">*</td>
301
                  <td class="listr" style="background-color: #e0e0e0">Reserved/not assigned by IANA</td>
302
                  <td class="listr" style="background-color: #e0e0e0">*</td>
303
                  <td class="listr" style="background-color: #e0e0e0">*</td>
304
                  <td class="listr" style="background-color: #e0e0e0">*</td>
305
				  <td class="listr" style="background-color: #e0e0e0">*</td>
306
				   <td class="listr" style="background-color: #e0e0e0">*</td>
307
		  <td class="listr" style="background-color: #e0e0e0">*</td>
308
                  <td class="listbg">Block bogon networks</td>
309
                  <td valign="middle" nowrap class="list">
310
				    <table border="0" cellspacing="0" cellpadding="1">
311
					<tr>
312
					  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="move selected rules before this rule"></td>
313
					  <td><a href="interfaces.php#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="edit rule" width="17" height="17" border="0"></a></td>
314
					</tr>
315
					<tr>
316
					  <td align="center" valign="middle"></td>
317
					  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="add a new rule based on this one" width="17" height="17" border="0"></td>
318
					</tr>
319
					</table>
320
				  </td>
321
				</tr>
322
<?php endif; ?>
323
				<?php $nrules = 0; for ($i = 0; isset($a_filter[$i]); $i++):
324
					$filterent = $a_filter[$i];
325
					if ($filterent['interface'] != $if && !isset($filterent['floating']))
326
                                               continue;
327
                                        if (isset($filterent['floating']) && "FloatingRules" != $if)
328
                                                continue;
329
				?>
330
                <tr valign="top" id="fr<?=$nrules;?>">
331
                  <td class="listt"><input type="checkbox" id="frc<?=$nrules;?>" name="rule[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nrules;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;"></td>
332
                  <td class="listt" align="center">
333
				  <?php if ($filterent['type'] == "block")
334
				  			$iconfn = "block";
335
						else if ($filterent['type'] == "reject") {
336
							if ($filterent['protocol'] == "tcp" || $filterent['protocol'] == "udp" || $filterent['protocol'] == "tcp/udp")
337
								$iconfn = "reject";
338
							else
339
								$iconfn = "block";
340
						} else
341
							$iconfn = "pass";
342
						if (isset($filterent['disabled'])) {
343
							$textss = "<span class=\"gray\">";
344
							$textse = "</span>";
345
							$iconfn .= "_d";
346
						} else {
347
							$textss = $textse = "";
348
						}
349
				  ?>
350
				  <a href="?if=<?=$if;?>&act=toggle&id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0" title="click to toggle enabled/disabled status"></a>
351
				  <?php if (isset($filterent['log'])):
352
							$iconfnlog = "log_s";
353
						if (isset($filterent['disabled']))
354
							$iconfnlog .= "_d";
355
				  	?>
356
				  <br><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfnlog;?>.gif" width="11" height="15" border="0">
357
				  <?php endif; ?>
358
				  </td>
359
				<?php
360
				
361
				//build Alias popup box
362
				$span_end = "";
363
				$alias_src_span_begin = "";
364
				$alias_src_port_span_begin = "";
365
				$alias_dst_span_begin = "";
366
				$alias_dst_port_span_begin = "";
367
				
368
				$alias_popup = rule_popup($filterent['source']['address'],pprint_port($filterent['source']['port']),$filterent['destination']['address'],pprint_port($filterent['destination']['port']));
369
				$span_end = "</U></span>";
370
					
371
				$alias_src_span_begin = $alias_popup["src"];
372
				 									
373
				$alias_src_port_span_begin = $alias_popup["srcport"];
374
													
375
				$alias_dst_span_begin = $alias_popup["dst"];
376
														
377
				$alias_dst_port_span_begin = $alias_popup["dstport"];
378
					
379
				//build Schedule popup box
380
				$a_schedules = &$config['schedules']['schedule'];
381
				$schedule_span_begin = "";
382
				$schedule_span_end = "";
383
				$sched_caption = "";
384
				$sched_content = "";
385
				$schedstatus = false;
386
				$dayArray = array ('Mon','Tues','Wed','Thur','Fri','Sat','Sun');
387
				$monthArray = array ('January','February','March','April','May','June','July','August','September','October','November','December');
388
				if($config['schedules']['schedule'] <> "" and is_array($config['schedules']['schedule'])){
389
					foreach ($a_schedules as $schedule)
390
					{
391
						if ($schedule['name'] == $filterent['sched'] ){
392
							$schedstatus = filter_get_time_based_rule_status($schedule);
393
							
394
							foreach($schedule['timerange'] as $timerange) {
395
								$tempFriendlyTime = "";
396
								$tempID = "";
397
								$firstprint = false;
398
								if ($timerange){
399
									$dayFriendly = "";
400
									$tempFriendlyTime = "";							
401
										
402
									//get hours
403
									$temptimerange = $timerange['hour'];
404
									$temptimeseparator = strrpos($temptimerange, "-");
405
									
406
									$starttime = substr ($temptimerange, 0, $temptimeseparator); 
407
									$stoptime = substr ($temptimerange, $temptimeseparator+1); 
408
										
409
									if ($timerange['month']){
410
										$tempmontharray = explode(",", $timerange['month']);
411
										$tempdayarray = explode(",",$timerange['day']);
412
										$arraycounter = 0;
413
										$firstDayFound = false;
414
										$firstPrint = false;
415
										foreach ($tempmontharray as $monthtmp){
416
											$month = $tempmontharray[$arraycounter];
417
											$day = $tempdayarray[$arraycounter];
418
											
419
											if (!$firstDayFound)
420
											{
421
												$firstDay = $day;
422
												$firstmonth = $month;
423
												$firstDayFound = true;
424
											}
425
												
426
											$currentDay = $day;
427
											$nextDay = $tempdayarray[$arraycounter+1];
428
											$currentDay++;
429
											if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])){
430
												if ($firstPrint)
431
													$dayFriendly .= ", ";
432
												$currentDay--;
433
												if ($currentDay != $firstDay)
434
													$dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
435
												else
436
													$dayFriendly .=  $monthArray[$month-1] . " " . $day;
437
												$firstDayFound = false;	
438
												$firstPrint = true;
439
											}													
440
											$arraycounter++;	
441
										}
442
									}
443
									else
444
									{
445
										$tempdayFriendly = $timerange['position'];
446
										$firstDayFound = false;
447
										$tempFriendlyDayArray = explode(",", $tempdayFriendly);								
448
										$currentDay = "";
449
										$firstDay = "";
450
										$nextDay = "";
451
										$counter = 0;													
452
										foreach ($tempFriendlyDayArray as $day){
453
											if ($day != ""){
454
												if (!$firstDayFound)
455
												{
456
													$firstDay = $tempFriendlyDayArray[$counter];
457
													$firstDayFound = true;
458
												}
459
												$currentDay =$tempFriendlyDayArray[$counter];
460
												//get next day
461
												$nextDay = $tempFriendlyDayArray[$counter+1];
462
												$currentDay++;					
463
												if ($currentDay != $nextDay){
464
													if ($firstprint)
465
														$dayFriendly .= ", ";
466
													$currentDay--;
467
													if ($currentDay != $firstDay)
468
														$dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
469
													else
470
														$dayFriendly .= $dayArray[$firstDay-1];
471
													$firstDayFound = false;	
472
													$firstprint = true;			
473
												}
474
												$counter++;
475
											}
476
										}
477
									}		
478
									$timeFriendly = $starttime . " - " . $stoptime;
479
									$description = $timerange['rangedescr'];
480
									$sched_content .= $dayFriendly . "; " . $timeFriendly . "<br>";
481
								}
482
							}
483
							$sched_caption = $schedule['descr'];
484
							$schedule_span_begin = "<span style=\"cursor: help;\" onmouseover=\"domTT_activate(this, event, 'content', '<h1>$sched_caption</h1><p>$sched_content</p>', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><U>";
485
							$schedule_span_end = "</U></span>";
486
						}
487
					}
488
				}
489
				$printicon = false;
490
				$alttext = "";
491
				$image = "";
492
				if (!isset($filterent['disabled'])){
493
					 if ($schedstatus) 
494
					 { 
495
					 	if ($iconfn == "block" || $iconfn == "reject")
496
					 	{
497
					 		$image = "icon_block";
498
					 		$alttext = "Traffic matching this rule is currently being denied";
499
					 	}
500
					 	else
501
					 	{
502
					 		$image = "icon_pass";
503
					 		$alttext = "Traffic matching this rule is currently being allowed";
504
					 	}
505
					 	$printicon = true;
506
					  }
507
					  else if ($filterent['sched'])
508
					  { 
509
					 	if ($iconfn == "block" || $iconfn == "reject")
510
					 	{
511
					 		$image = "icon_block_d";
512
					 		$alttext = "Traffic matching this rule is currently being allowed";
513
					 	}
514
					 	else
515
					 	{
516
					 		$image = "icon_block";
517
					 		$alttext = "Traffic matching this rule is currently being denied";
518
					 	}
519
					 	$printicon = true;				  	
520
					  }
521
				}
522
				?>
523
                  <td class="listlr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
524
                    <?=$textss;?><?php if (isset($filterent['protocol'])) echo strtoupper($filterent['protocol']); else echo "*"; ?><?=$textse;?>
525
                  </td>
526
                  <td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
527
				    <?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
528
                  </td>
529
                  <td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
530
                    <?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['source']['port'])); ?><?php echo $alias_src_port_span_end;?><?=$textse;?>
531
                  </td>
532
                  <td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
533
				    <?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['destination'])); ?><?php echo $alias_dst_span_end;?><?=$textse;?>
534
                  </td>
535
	              <td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
536
                    <?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['destination']['port'])); ?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
537
                  </td>
538
                  <td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
539
                    <?=$textss;?><?php if (isset($config['interfaces'][$filterent['gateway']]['descr'])) echo htmlspecialchars($config['interfaces'][$filterent['gateway']]['descr']); else  echo htmlspecialchars(pprint_port($filterent['gateway'])); ?><?=$textse;?>
540
                  </td>
541
<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';"><?=$textss;?>
542
                          <?php
543
							if (isset($filterent['ackqueue']) && isset($filterent['defaultqueue'])) {
544
								$desc = $filterent['ackqueue'] ;
545
							    echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['ackqueue']}&action=show\">{$desc}</a>";
546
								$desc = $filterent['defaultqueue'];
547
							    echo "/<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&action=show\">{$desc}</a>";
548
							} else if (isset($filterent['defaultqueue'])) {
549
								$desc = $filterent['defaultqueue'];
550
							    echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&action=show\">{$desc}</a>"; }
551
							else echo "none";
552
						  ?><?=$textse;?>
553
                        </td>
554
                  <td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';"><font color="black">
555
                    <?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;?>
556
                  </td>
557
                  <td class="listbg" onClick="fr_toggle(<?=$nrules;?>)" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';" class="descr">
558
                    <?=$textss;?><?=htmlspecialchars($filterent['descr']);?>&nbsp;<?=$textse;?>
559
                  </td>
560
                  <td valign="middle" nowrap class="list">
561
				    <table border="0" cellspacing="0" cellpadding="1">
562
					<tr>
563
					  <td><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" width="17" height="17" title="move selected rules before this rule" onMouseOver="fr_insline(<?=$nrules;?>, true)" onMouseOut="fr_insline(<?=$nrules;?>, false)"></td>
564
					  <td><a href="firewall_rules_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="edit rule" width="17" height="17" border="0"></a></td>
565
					</tr>
566
					<tr>
567
					  <td align="center" valign="middle"><a href="firewall_rules.php?act=del&if=<?=$if;?>&id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="delete rule" onclick="return confirm('Do you really want to delete this rule?')"></a></td>
568
					  <td><a href="firewall_rules_edit.php?dup=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="add a new rule based on this one" width="17" height="17" border="0"></a></td>
569
					</tr>
570
					</table>
571
				  </td>
572
				</tr>
573
			  <?php $nrules++; endfor; ?>
574
			  <?php if ($nrules == 0): ?>
575
              <td class="listt"></td>
576
			  <td class="listt"></td>
577
			  <td class="listlr" colspan="9" align="center" valign="middle">
578
			  <span class="gray">
579
			  No rules are currently defined for this interface.<br>
580
			  All incoming connections on this interface will be blocked until you add pass rules.<br><br>
581
			  Click the <a href="firewall_rules_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="add new rule" border="0" width="17" height="17" align="absmiddle"></a> button to add a new rule.</span>
582
			  </td>
583
			  <?php endif; ?>
584
                <tr id="fr<?=$nrules;?>">
585
                  <td class="list"></td>
586
                  <td class="list"></td>
587
                  <td class="list">&nbsp;</td>
588
                  <td class="list">&nbsp;</td>
589
                  <td class="list">&nbsp;</td>
590
		  <td class="list">&nbsp;</td>
591
		  <td class="list">&nbsp;</td>
592
                  <td class="list">&nbsp;</td>
593
                  <td class="list">&nbsp;</td>
594
                  <td class="list">&nbsp;</td>
595
                  <td class="list">&nbsp;</td>
596
                  <td class="list">
597
				    <table border="0" cellspacing="0" cellpadding="1">
598
					<tr>
599
				      <td>
600
					  <?php if ($nrules == 0): ?><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="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="move selected rules to end" onMouseOver="fr_insline(<?=$nrules;?>, true)" onMouseOut="fr_insline(<?=$nrules;?>, false)"><?php endif; ?></td>
601
					  <td></td>
602
				    </tr>
603
					<tr>
604
					  <td>
605
					  <?php if ($nrules == 0): ?>
606
					  <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="delete selected rules" border="0"><?php else: ?>
607
					  <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="delete selected rules" onclick="return confirm('Do you really want to delete the selected rules?')"><?php endif; ?>
608
					  </td>
609
			                  <td><a href="firewall_rules_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="add new rule" width="17" height="17" border="0"></a></td>
610
					</tr>
611
				    </table>
612
				  </td>
613
				</tr>
614
              </table>
615
	      <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
616
                <tr>
617
                  <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11"></td>
618
                  <td>pass</td>
619
                  <td width="14"></td>
620
                  <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11"></td>
621
                  <td>block</td>
622
                  <td width="14"></td>
623
                  <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject.gif" width="11" height="11"></td>
624
                  <td>reject</td>
625
                  <td width="14"></td>
626
                  <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" width="11" height="11"></td>
627
                  <td>log</td>
628
                </tr>
629
                <tr>
630
                  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass_d.gif" width="11" height="11"></td>
631
                  <td nowrap>pass (disabled)</td>
632
                  <td>&nbsp;</td>
633
                  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block_d.gif" width="11" height="11"></td>
634
                  <td nowrap>block (disabled)</td>
635
                  <td>&nbsp;</td>
636
                  <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11"></td>
637
                  <td nowrap>reject (disabled)</td>
638
                  <td>&nbsp;</td>
639
                  <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log_d.gif" width="11" height="11"></td>
640
                  <td nowrap>log (disabled)</td>
641
                </tr>
642
		<tr>
643
		  <td colspan="10">
644
  <p>
645
  <strong><span class="red">Hint:<br>
646
  </span></strong>Rules are evaluated on a first-match basis (i.e.
647
  the action of the first rule to match a packet will be executed).
648
  This means that if you use block rules, you'll have to pay attention
649
  to the rule order. Everything that isn't explicitly passed is blocked
650
  by default.</p>
651
		 </td>
652
	        </tr>
653
              </table>
654
	</div>
655
    </td>
656
  </tr>
657
</table>
658
  <input type="hidden" name="if" value="<?=$if;?>">
659
</form>
660
<?php include("fend.inc"); ?>
661
</body>
662
</html>
(51-51/206)