Project

General

Profile

Download (17.3 KB) Statistics
| Branch: | Tag: | Revision:
1 340e6dca Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 5b237745 Scott Ullrich
/*
4
	firewall_nat.php
5 c55b323d Scott Ullrich
	Copyright (C) 2004 Scott Ullrich
6
	All rights reserved.
7 340e6dca Scott Ullrich
8 c55b323d Scott Ullrich
	originally part of m0n0wall (http://m0n0.ch/wall)
9 5b237745 Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
	All rights reserved.
11 340e6dca Scott Ullrich
12 5b237745 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 340e6dca Scott Ullrich
15 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17 340e6dca Scott Ullrich
18 5b237745 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 340e6dca Scott Ullrich
22 5b237745 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
*/
33 7ac5a4cb Scott Ullrich
/*
34
	pfSense_MODULE:	nat
35
*/
36 5b237745 Scott Ullrich
37 6b07c15a Matthew Grooms
##|+PRIV
38
##|*IDENT=page-firewall-nat-portforward
39
##|*NAME=Firewall: NAT: Port Forward page
40
##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward' page.
41
##|*MATCH=firewall_nat.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 483e6de8 Scott Ullrich
require_once("itemid.inc");
49 5b237745 Scott Ullrich
50 e8c2c890 Bill Marquette
if (!is_array($config['nat']['rule']))
51 5b237745 Scott Ullrich
	$config['nat']['rule'] = array();
52 fbe94068 Scott Ullrich
53 5b237745 Scott Ullrich
$a_nat = &$config['nat']['rule'];
54
55 514dbaf8 Scott Ullrich
/* if a custom message has been passed along, lets process it */
56
if ($_GET['savemsg'])
57
	$savemsg = $_GET['savemsg'];
58
59 5b237745 Scott Ullrich
if ($_POST) {
60
61
	$pconfig = $_POST;
62
63
	if ($_POST['apply']) {
64 e8c2c890 Bill Marquette
65
		write_config();
66
67 5b237745 Scott Ullrich
		$retval = 0;
68 7a6c350f Scott Ullrich
69 7d04082e Scott Ullrich
		unlink_if_exists("/tmp/config.cache");
70 e2c9ef13 Scott Ullrich
		$retval |= filter_configure();
71 05da8941 Erik Fonnesbeck
		$savemsg = get_std_save_message($retval);
72 7d04082e Scott Ullrich
73 1a700ea6 Scott Ullrich
		pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/apply");
74
75 5b237745 Scott Ullrich
		if ($retval == 0) {
76 a368a026 Ermal Lu?i
			clear_subsystem_dirty('natconf');
77
			clear_subsystem_dirty('filter');
78 5b237745 Scott Ullrich
		}
79 7d04082e Scott Ullrich
80 5b237745 Scott Ullrich
	}
81
}
82
83 759d0de1 Renato Botelho
if ($_GET['act'] == "del") {
84
	if ($a_nat[$_GET['id']]) {
85 3a343d73 jim-p
86 759d0de1 Renato Botelho
		if (isset($a_nat[$_GET['id']]['associated-rule-id'])) {
87
			delete_id($a_nat[$_GET['id']]['associated-rule-id'], $config['filter']['rule']);
88 3a343d73 jim-p
			$want_dirty_filter = true;
89 759d0de1 Renato Botelho
		}
90
		unset($a_nat[$_GET['id']]);
91 3a343d73 jim-p
92
		if (write_config()) {
93
			mark_subsystem_dirty('natconf');
94
			if ($want_dirty_filter)
95
				mark_subsystem_dirty('filter');
96
		}
97 759d0de1 Renato Botelho
		header("Location: firewall_nat.php");
98
		exit;
99
	}
100
}
101
102 00bcbdd0 Bill Marquette
if (isset($_POST['del_x'])) {
103 4b9a670c Scott Ullrich
    /* delete selected rules */
104
    if (is_array($_POST['rule']) && count($_POST['rule'])) {
105
	    foreach ($_POST['rule'] as $rulei) {
106 049a688e Ermal Lu?i
		$target = $rule['target'];
107 b9e28d57 unknown
			// Check for filter rule associations
108 9b16b834 Ermal Lu?i
			if (isset($a_nat[$rulei]['associated-rule-id'])){
109
				delete_id($a_nat[$rulei]['associated-rule-id'], $config['filter']['rule']);
110 b9e28d57 unknown
				
111
				mark_subsystem_dirty('filter');
112
			}
113 4b9a670c Scott Ullrich
	        unset($a_nat[$rulei]);
114
	    }
115 3a343d73 jim-p
		if (write_config())
116
			mark_subsystem_dirty('natconf');
117
		header("Location: firewall_nat.php");
118
		exit;
119 4b9a670c Scott Ullrich
	}
120 00bcbdd0 Bill Marquette
121
} else {
122
        /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
123
        unset($movebtn);
124
        foreach ($_POST as $pn => $pd) {
125
                if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
126
                        $movebtn = $matches[1];
127
                        break;
128
                }
129
        }
130
        /* move selected rules before this rule */
131
        if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
132
                $a_nat_new = array();
133
134
                /* copy all rules < $movebtn and not selected */
135
                for ($i = 0; $i < $movebtn; $i++) {
136
                        if (!in_array($i, $_POST['rule']))
137
                                $a_nat_new[] = $a_nat[$i];
138
                }
139
140
                /* copy all selected rules */
141
                for ($i = 0; $i < count($a_nat); $i++) {
142
                        if ($i == $movebtn)
143
                                continue;
144
                        if (in_array($i, $_POST['rule']))
145
                                $a_nat_new[] = $a_nat[$i];
146
                }
147
148
                /* copy $movebtn rule */
149
                if ($movebtn < count($a_nat))
150
                        $a_nat_new[] = $a_nat[$movebtn];
151
152
                /* copy all rules > $movebtn and not selected */
153
                for ($i = $movebtn+1; $i < count($a_nat); $i++) {
154
                        if (!in_array($i, $_POST['rule']))
155
                                $a_nat_new[] = $a_nat[$i];
156
                }
157
                $a_nat = $a_nat_new;
158 3a343d73 jim-p
		if (write_config())
159
			mark_subsystem_dirty('natconf');
160 00bcbdd0 Bill Marquette
                header("Location: firewall_nat.php");
161
                exit;
162
        }
163 5b237745 Scott Ullrich
}
164 00bcbdd0 Bill Marquette
165 7fcd0934 Renato Botelho
$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("Port Forward"));
166 6eb17647 Scott Ullrich
include("head.inc");
167
168 2a9db752 Scott Dale
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/domLib.js\"></script>";
169
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/domTT.js\"></script>";
170
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/behaviour.js\"></script>";
171
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>";
172
173 24f600b0 Scott Ullrich
?>
174 a8726a3d Scott Ullrich
<body link="#000000" vlink="#000000" alink="#000000">
175 5b237745 Scott Ullrich
<?php include("fbegin.inc"); ?>
176 00bcbdd0 Bill Marquette
<form action="firewall_nat.php" method="post" name="iform">
177 625dcc40 Bill Marquette
<script type="text/javascript" language="javascript" src="/javascript/row_toggle.js"></script>
178 05da8941 Erik Fonnesbeck
<?php if ($savemsg) print_info_box($savemsg); ?>
179 a368a026 Ermal Lu?i
<?php if (is_subsystem_dirty('natconf')): ?><p>
180 05da8941 Erik Fonnesbeck
<?php print_info_box_np(gettext("The NAT configuration has been changed") . ".<br>" . gettext("You must apply the changes in order for them to take effect."));?><br>
181 5b237745 Scott Ullrich
<?php endif; ?>
182
<table width="100%" border="0" cellpadding="0" cellspacing="0">
183
  <tr><td>
184 a8726a3d Scott Ullrich
<?php
185
	$tab_array = array();
186 5463dd9f me
	$tab_array[] = array(gettext("Port Forward"), true, "firewall_nat.php");
187 7fcd0934 Renato Botelho
	$tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
188 5463dd9f me
	$tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
189 292ef22a Seth Mos
	$tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
190 a8726a3d Scott Ullrich
	display_top_tabs($tab_array);
191
?>
192
 </td></tr>
193 340e6dca Scott Ullrich
  <tr>
194 d732f186 Bill Marquette
    <td>
195
	<div id="mainarea">
196
              <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
197 00bcbdd0 Bill Marquette
                <tr id="frheader">
198
		  <td width="3%" class="list">&nbsp;</td>
199
                  <td width="3%" class="list">&nbsp;</td>
200 7fcd0934 Renato Botelho
		  <td width="5%" class="listhdrr"><?=gettext("If");?></td>
201
		  <td width="5%" class="listhdrr"><?=gettext("Proto");?></td>
202 9b4e0168 Scott Ullrich
		  <td width="11%" class="listhdrr"><nobr><?=gettext("Src. addr");?></nobr></td>
203
		  <td width="11%" class="listhdrr"><nobr><?=gettext("Src. ports");?></nobr></td>
204
		  <td width="11%" class="listhdrr"><nobr><?=gettext("Dest. addr");?></nobr></td>
205
		  <td width="11%" class="listhdrr"><nobr><?=gettext("Dest. ports");?></nobr></td>
206
		  <td width="11%" class="listhdrr"><nobr><?=gettext("NAT IP");?></nobr></td>
207
		  <td width="11%" class="listhdrr"><nobr><?=gettext("NAT Ports");?></nobr></td>
208 7fcd0934 Renato Botelho
		  <td width="11%" class="listhdr"><?=gettext("Description");?></td>
209 d415d821 Seth Mos
                  <td width="5%" class="list">
210
                    <table border="0" cellspacing="0" cellpadding="1">
211
                      <tr>
212 759d0de1 Renato Botelho
			<td width="17">
213
			<?php if (count($a_nat) == 0): ?>
214 7fcd0934 Renato Botelho
				<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0">
215 759d0de1 Renato Botelho
			<?php else: ?>
216 3ced0d25 Erik Fonnesbeck
				<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?");?>')">
217 759d0de1 Renato Botelho
			<?php endif; ?>
218
			</td>
219 d415d821 Seth Mos
                        <td><a href="firewall_nat_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
220
                      </tr>
221
                    </table>
222
		  </td>
223 00bcbdd0 Bill Marquette
		</tr>
224
	<?php $nnats = $i = 0; foreach ($a_nat as $natent): ?>
225 40b56dc1 Scott Ullrich
	<?php 
226 2a9db752 Scott Dale
	
227
		//build Alias popup box
228
		$span_end = "</U></span>";
229 ec223192 Renato Botelho
230
		$alias_popup = rule_popup($natent['source']['address'], pprint_port($natent['source']['port']), $natent['destination']['address'], pprint_port($natent['destination']['port']));
231
232
		$alias_src_span_begin      = $alias_popup["src"];
233 2a9db752 Scott Dale
		$alias_src_port_span_begin = $alias_popup["srcport"];
234 ec223192 Renato Botelho
		$alias_dst_span_begin      = $alias_popup["dst"];
235 2a9db752 Scott Dale
		$alias_dst_port_span_begin = $alias_popup["dstport"];
236
237 00ad21b9 Darren Embry
		$alias_src_span_end        = $alias_popup["src_end"];
238
		$alias_src_port_span_end   = $alias_popup["srcport_end"];
239
		$alias_dst_span_end        = $alias_popup["dst_end"];
240
		$alias_dst_port_span_end   = $alias_popup["dstport_end"];
241
242 ec223192 Renato Botelho
		$alias_popup = rule_popup("","",$natent['target'], pprint_port($natent['local-port']));
243
244
		$alias_target_span_begin     = $alias_popup["dst"];
245
		$alias_local_port_span_begin = $alias_popup["dstport"];
246 6a459cef Renato Botelho
247 00ad21b9 Darren Embry
		$alias_target_span_end       = $alias_popup["dst_end"];
248
		$alias_local_port_span_end   = $alias_popup["dstport_end"];
249
250 96cde230 Renato Botelho
		if (isset($natent['disabled']))
251 6a459cef Renato Botelho
			$textss = "<span class=\"gray\">";
252 96cde230 Renato Botelho
		else
253
			$textss = "<span>";
254
255
		$textse = "</span>";
256 2a9db752 Scott Dale
	
257 40b56dc1 Scott Ullrich
		/* if user does not have access to edit an interface skip on to the next record */
258
		if(!have_natpfruleint_access($natent['interface'])) 
259
			continue;
260
	?>
261 00bcbdd0 Bill Marquette
                <tr valign="top" id="fr<?=$nnats;?>">
262
                  <td class="listt"><input type="checkbox" id="frc<?=$nnats;?>" name="rule[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nnats;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;"></td>
263 b9e28d57 unknown
                  <td class="listt" align="center">
264 9b16b834 Ermal Lu?i
					<?php if($natent['associated-rule-id'] == "pass"): ?>
265 ebe08ebe Carlos Eduardo Ramos
					<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" title="<?=gettext("All traffic matching this NAT entry is passed"); ?>" border="0">
266 3bb6bb18 Vinicius Coque
					<?php elseif (!empty($natent['associated-rule-id'])): ?>
267 ebe08ebe Carlos Eduardo Ramos
					<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_chain.png" width="17" height="17" title="<?=gettext("Firewall rule ID"); ?> <?=htmlspecialchars($nnatid); ?> <?=gettext("is managed with this rule"); ?>" border="0">
268 537dff78 Chris Buechler
					<?php endif; ?>
269 b9e28d57 unknown
				  </td>
270 b8a0de00 Bill Marquette
                  <td class="listlr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
271 6a459cef Renato Botelho
                    <?=$textss;?>
272 8b1fab53 Scott Ullrich
		    <?php
273 8b35aa77 Erik Fonnesbeck
			if (!$natent['interface'])
274
				echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
275 00bcbdd0 Bill Marquette
			else
276 8b35aa77 Erik Fonnesbeck
				echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
277 00bcbdd0 Bill Marquette
		    ?>
278 6a459cef Renato Botelho
                    <?=$textse;?>
279 5b237745 Scott Ullrich
                  </td>
280 ec223192 Renato Botelho
281 b8a0de00 Bill Marquette
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
282 6a459cef Renato Botelho
					<?=$textss;?><?=strtoupper($natent['protocol']);?><?=$textse;?>
283 5b237745 Scott Ullrich
                  </td>
284 ec223192 Renato Botelho
285
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
286
				    <?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($natent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
287
                  </td>
288 b8a0de00 Bill Marquette
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
289 ec223192 Renato Botelho
				    <?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($natent['source']['port']));?><?php echo $alias_src_port_span_end;?><?=$textse;?>
290
                  </td>
291
292
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
293
				    <?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($natent['destination']));?><?php echo $alias_dst_span_end;?><?=$textse;?>
294 5b237745 Scott Ullrich
                  </td>
295 b8a0de00 Bill Marquette
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
296 ec223192 Renato Botelho
				    <?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($natent['destination']['port']));?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
297 5b237745 Scott Ullrich
                  </td>
298 ec223192 Renato Botelho
299 b8a0de00 Bill Marquette
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
300 ec223192 Renato Botelho
				    <?=$textss;?><?php echo $alias_target_span_begin;?><?php echo htmlspecialchars($natent['target']);?><?php echo $alias_target_span_end;?><?=$textse;?>
301 5b237745 Scott Ullrich
                  </td>
302 ec223192 Renato Botelho
                  <td class="listr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
303 47c5a08f Renato Botelho
					<?php
304 50dc3f41 Renato Botelho
						$localport = $natent['local-port'];
305
306 cfbfd941 smos
						list($dstbeginport, $dstendport) = explode("-", $natent['destination']['port']);
307 50dc3f41 Renato Botelho
308
						if ($dstendport) {
309
							$localendport = $natent['local-port'] + $dstendport - $dstbeginport;
310
							$localport   .= '-' . $localendport;
311
						}
312 47c5a08f Renato Botelho
					?>
313
				    <?=$textss;?><?php echo $alias_local_port_span_begin;?><?php echo htmlspecialchars(pprint_port($localport));?><?php echo $alias_local_port_span_end;?><?=$textse;?>
314 ec223192 Renato Botelho
                  </td>
315
316 8b1fab53 Scott Ullrich
                  <td class="listbg" onClick="fr_toggle(<?=$nnats;?>)" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
317 6a459cef Renato Botelho
				  <?=$textss;?><?=htmlspecialchars($natent['descr']);?>&nbsp;<?=$textse;?>
318 5b237745 Scott Ullrich
                  </td>
319 00bcbdd0 Bill Marquette
                  <td valign="middle" class="list" nowrap>
320
                    <table border="0" cellspacing="0" cellpadding="1">
321
                      <tr>
322 7fcd0934 Renato Botelho
			<td><input onmouseover="fr_insline(<?=$nnats;?>, true)" onmouseout="fr_insline(<?=$nnats;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected rules before this rule");?>" height="17" type="image" width="17" border="0"></td>
323 ebe08ebe Carlos Eduardo Ramos
                        <td><a href="firewall_nat_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule"); ?>"></a></td>
324 00bcbdd0 Bill Marquette
                      </tr>
325
                      <tr>
326 d4628582 Erik Fonnesbeck
					    <td align="center" valign="middle"><a href="firewall_nat.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>"></a></td>
327 7fcd0934 Renato Botelho
			<td><a href="firewall_nat_edit.php?dup=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new nat based on this one");?>" width="17" height="17" border="0"></a></td>
328 00bcbdd0 Bill Marquette
                      </tr>
329
                    </table>
330
		</tr>
331
  	     <?php $i++; $nnats++; endforeach; ?>
332 340e6dca Scott Ullrich
                <tr>
333 00bcbdd0 Bill Marquette
                  <td class="list" colspan="8"></td>
334 ec223192 Renato Botelho
                  <td>&nbsp;</td>
335
                  <td>&nbsp;</td>
336
                  <td>&nbsp;</td>
337 00bcbdd0 Bill Marquette
                  <td class="list" valign="middle" nowrap>
338
                    <table border="0" cellspacing="0" cellpadding="1">
339
                      <tr>
340 ebe08ebe Carlos Eduardo Ramos
			<td><?php if ($nnats == 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");?>" border="0"><?php endif; ?></td>
341 00bcbdd0 Bill Marquette
                      </tr>
342
                      <tr>
343 759d0de1 Renato Botelho
			<td width="17">
344
			<?php if (count($a_nat) == 0): ?>
345 7fcd0934 Renato Botelho
				<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0">
346 759d0de1 Renato Botelho
			<?php else: ?>
347 3ced0d25 Erik Fonnesbeck
				<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?");?>')">
348 759d0de1 Renato Botelho
			<?php endif; ?>
349
			</td>
350
                        <td><a href="firewall_nat_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
351 00bcbdd0 Bill Marquette
                      </tr>
352 d415d821 Seth Mos
                    </table>
353
		  </td>
354 1b43f08f Scott Ullrich
		</tr>
355 5fbcc12a Scott Ullrich
		<tr><td>&nbsp;</td></tr>
356 68b0c7eb Chris Buechler
          <tr>
357
            <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11"></td>
358 ebe08ebe Carlos Eduardo Ramos
            <td colspan="3"><?=gettext("pass"); ?></td>
359 1b43f08f Scott Ullrich
			</tr>
360
		   <tr>
361
            <td width="14"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_chain.png" width="11" height="11"></td>
362 7fcd0934 Renato Botelho
	    <td colspan="3"><?=gettext("linked rule");?></td>
363 68b0c7eb Chris Buechler
          </tr>
364
    </table>
365 d732f186 Bill Marquette
	</div>
366
	</td>
367 5b237745 Scott Ullrich
  </tr>
368
</table>
369 3d335c4d Scott Ullrich
370
<?php
371
if ($pkg['tabs'] <> "") {
372
    echo "</td></tr></table>";
373
}
374
?>
375
376
</form>
377 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
378
</body>
379
</html>