Project

General

Profile

Download (18.1 KB) Statistics
| Branch: | Tag: | Revision:
1 df81417f Matthew Grooms
<?php
2
/* $Id$ */
3
/*
4
	system_advanced_firewall.php
5
	part of pfSense
6
	Copyright (C) 2005-2007 Scott Ullrich
7
8
	Copyright (C) 2008 Shrew Soft Inc
9
10
	originally part of m0n0wall (http://m0n0.ch/wall)
11
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
12
	All rights reserved.
13
14
	Redistribution and use in source and binary forms, with or without
15
	modification, are permitted provided that the following conditions are met:
16
17
	1. Redistributions of source code must retain the above copyright notice,
18
	   this list of conditions and the following disclaimer.
19
20
	2. Redistributions in binary form must reproduce the above copyright
21
	   notice, this list of conditions and the following disclaimer in the
22
	   documentation and/or other materials provided with the distribution.
23
24
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
25
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
26
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
	POSSIBILITY OF SUCH DAMAGE.
34
*/
35 1d333258 Scott Ullrich
/*
36
	pfSense_MODULE:	system
37
*/
38 df81417f Matthew Grooms
39
##|+PRIV
40
##|*IDENT=page-system-advanced-firewall
41
##|*NAME=System: Advanced: Firewall and NAT page
42
##|*DESCR=Allow access to the 'System: Advanced: Firewall and NAT' page.
43
##|*MATCH=system_advanced.php*
44
##|-PRIV
45
46
require("guiconfig.inc");
47 7a927e67 Scott Ullrich
require_once("functions.inc");
48
require_once("filter.inc");
49
require_once("shaper.inc");
50 df81417f Matthew Grooms
51
$pconfig['disablefilter'] = $config['system']['disablefilter'];
52
$pconfig['rfc959workaround'] = $config['system']['rfc959workaround'];
53
$pconfig['scrubnodf'] = $config['system']['scrubnodf'];
54 2867fa7b Ermal Luçi
$pconfig['scrubrnid'] = $config['system']['scrubrnid'];
55 df81417f Matthew Grooms
$pconfig['tcpidletimeout'] = $config['filter']['tcpidletimeout'];
56
$pconfig['optimization'] = $config['filter']['optimization'];
57
$pconfig['maximumstates'] = $config['system']['maximumstates'];
58 fb586a16 jim-p
$pconfig['maximumtableentries'] = $config['system']['maximumtableentries'];
59 df81417f Matthew Grooms
$pconfig['disablenatreflection'] = $config['system']['disablenatreflection'];
60 9fc22c6f Erik Fonnesbeck
if (!isset($config['system']['enablebinatreflection']))
61
	$pconfig['disablebinatreflection'] = "yes";
62
else
63
	$pconfig['disablebinatreflection'] = "";
64 bff94015 Erik Fonnesbeck
$pconfig['reflectiontimeout'] = $config['system']['reflectiontimeout'];
65 df81417f Matthew Grooms
$pconfig['bypassstaticroutes'] = isset($config['filter']['bypassstaticroutes']);
66
$pconfig['disablescrub'] = isset($config['system']['disablescrub']);
67 1beafceb Erik Fonnesbeck
$pconfig['tftpinterface'] = explode(",", $config['system']['tftpinterface']);
68 df81417f Matthew Grooms
69
if ($_POST) {
70
71
	unset($input_errors);
72
	$pconfig = $_POST;
73
74
	/* input validation */
75
	if ($_POST['maximumstates'] && !is_numericint($_POST['maximumstates'])) {
76 ca23c2f8 Renato Botelho
		$input_errors[] = gettext("The Firewall Maximum States value must be an integer.");
77 df81417f Matthew Grooms
	}
78 fb586a16 jim-p
	if ($_POST['maximumtableentries'] && !is_numericint($_POST['maximumtableentries'])) {
79
		$input_errors[] = gettext("The Firewall Maximum Table Entries value must be an integer.");
80
	}
81 df81417f Matthew Grooms
	if ($_POST['tcpidletimeout'] && !is_numericint($_POST['tcpidletimeout'])) {
82 ca23c2f8 Renato Botelho
		$input_errors[] = gettext("The TCP idle timeout must be an integer.");
83 df81417f Matthew Grooms
	}
84 bff94015 Erik Fonnesbeck
	if ($_POST['reflectiontimeout'] && !is_numericint($_POST['reflectiontimeout'])) {
85
		$input_errors[] = gettext("The Reflection timeout must be an integer.");
86
	}
87 df81417f Matthew Grooms
88
    ob_flush();
89
    flush();
90
91
	if (!$input_errors) {
92
93
		if($_POST['disablefilter'] == "yes")
94
			$config['system']['disablefilter'] = "enabled";
95
		else
96
			unset($config['system']['disablefilter']);
97
98
		if($_POST['rfc959workaround'] == "yes")
99
			$config['system']['rfc959workaround'] = "enabled";
100
		else
101
			unset($config['system']['rfc959workaround']);
102
103
		if($_POST['scrubnodf'] == "yes")
104
			$config['system']['scrubnodf'] = "enabled";
105
		else
106
			unset($config['system']['scrubnodf']);
107
108 2867fa7b Ermal Luçi
		if($_POST['scrubrnid'] == "yes")
109
                        $config['system']['scrubrnid'] = "enabled";
110
                else
111
                        unset($config['system']['scrubrnid']);
112
113 df81417f Matthew Grooms
		$config['system']['optimization'] = $_POST['optimization'];
114
		$config['system']['maximumstates'] = $_POST['maximumstates'];
115 fb586a16 jim-p
		$config['system']['maximumtableentries'] = $_POST['maximumtableentries'];
116 df81417f Matthew Grooms
117
		if($_POST['disablenatreflection'] == "yes")
118
			$config['system']['disablenatreflection'] = $_POST['disablenatreflection'];
119
		else
120
			unset($config['system']['disablenatreflection']);
121 9fc22c6f Erik Fonnesbeck
122
		if($_POST['disablebinatreflection'] == "yes")
123
			unset($config['system']['enablebinatreflection']);
124
		else
125
			$config['system']['enablebinatreflection'] = "yes";
126 df81417f Matthew Grooms
127 a2b6c52f Erik Fonnesbeck
		if($_POST['enablenatreflectionhelper'] == "yes")
128
			$config['system']['enablenatreflectionhelper'] = "yes";
129
		else
130
			unset($config['system']['enablenatreflectionhelper']);
131
132 bff94015 Erik Fonnesbeck
		$config['system']['reflectiontimeout'] = $_POST['reflectiontimeout'];
133
134 df81417f Matthew Grooms
		if($_POST['bypassstaticroutes'] == "yes")
135 668c4990 Seth Mos
			$config['filter']['bypassstaticroutes'] = $_POST['bypassstaticroutes'];
136 df81417f Matthew Grooms
		else
137 668c4990 Seth Mos
			unset($config['filter']['bypassstaticroutes']);
138 df81417f Matthew Grooms
139
		if($_POST['disablescrub'] == "yes")
140
			$config['system']['disablescrub'] = $_POST['disablescrub'];
141
		else
142
			unset($config['system']['disablescrub']);
143
144 cfdce2ad Ermal
		if ($_POST['tftpinterface'])
145
			$config['system']['tftpinterface'] = implode(",", $_POST['tftpinterface']);
146
		else
147
			unset($config['system']['tftpinterface']);
148
	
149 df81417f Matthew Grooms
		write_config();
150
151 bd448e7f Ermal Lu?i
		/* 
152
		 * XXX: This is a kludge here but its the better place than on every filter reload.
153
		 * NOTE: This is only for setting the ipfw state limits. 
154
		 */
155
		if ($_POST['maximumstates'] && is_numeric($_POST['maximumstates']) && is_module_loaded("ipfw.ko"))
156
			filter_load_ipfw();
157
			
158 df81417f Matthew Grooms
		$retval = 0;
159
		$retval = filter_configure();
160
		if(stristr($retval, "error") <> true)
161
		    $savemsg = get_std_save_message($retval);
162
		else
163
		    $savemsg = $retval;
164
	}
165
}
166
167 ca23c2f8 Renato Botelho
$pgtitle = array(gettext("System"),gettext("Advanced: Firewall and NAT"));
168 df81417f Matthew Grooms
include("head.inc");
169
170
?>
171
172
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
173
<?php include("fbegin.inc"); ?>
174
175
<script language="JavaScript">
176
<!--
177
178
var descs=new Array(5);
179 ca23c2f8 Renato Botelho
descs[0]="<?=gettext("as the name says, it's the normal optimization algorithm");?>";
180
descs[1]="<?=gettext("used for high latency links, such as satellite links.  Expires idle connections later than default");?>";
181
descs[2]="<?=gettext("expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate connections");?>";
182
descs[3]="<?=gettext("tries to avoid dropping any legitimate connections at the expense of increased memory usage and CPU utilization.");?>";
183 df81417f Matthew Grooms
184
function update_description(itemnum) {
185
        document.forms[0].info.value=descs[itemnum];
186
187
}
188
189
//-->
190
</script>
191
192
<?php
193
	if ($input_errors)
194
		print_input_errors($input_errors);
195
	if ($savemsg)
196
		print_info_box($savemsg);
197
?>
198 ab3c8553 Matthew Grooms
	<form action="system_advanced_firewall.php" method="post" name="iform" id="iform">
199
		<table width="100%" border="0" cellpadding="0" cellspacing="0">
200
			<tr>
201
				<td class="tabnavtbl">
202
					<?php
203
						$tab_array = array();
204 ca23c2f8 Renato Botelho
						$tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
205
						$tab_array[] = array(gettext("Firewall / NAT"), true, "system_advanced_firewall.php");
206
						$tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
207
						$tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
208
						$tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
209
						$tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
210 ab3c8553 Matthew Grooms
						display_top_tabs($tab_array);
211
					?>
212 df81417f Matthew Grooms
				</ul>
213 ab3c8553 Matthew Grooms
				</td>
214
			</tr>
215
			<tr>
216 2ff19bfd Matthew Grooms
				<td id="mainarea">
217
					<div class="tabcont">
218
						<span class="vexpl">
219
							<span class="red">
220 ea53e38f Renato Botelho
								<strong><?=gettext("NOTE:");?>&nbsp</strong>
221 2ff19bfd Matthew Grooms
							</span>
222 ca23c2f8 Renato Botelho
							<?=gettext("The options on this page are intended for use by advanced users only.");?>
223 2ff19bfd Matthew Grooms
							<br/>
224
						</span>
225
						<br/>
226
						<table width="100%" border="0" cellpadding="6" cellspacing="0">
227 ab3c8553 Matthew Grooms
							<tr>
228 ca23c2f8 Renato Botelho
								<td colspan="2" valign="top" class="listtopic"><?=gettext("Firewall Advanced");?></td>
229 ab3c8553 Matthew Grooms
							</tr>
230
							<tr>
231 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("IP Do-Not-Fragment compatibility");?></td>
232 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
233
									<input name="scrubnodf" type="checkbox" id="scrubnodf" value="yes" <?php if (isset($config['system']['scrubnodf'])) echo "checked"; ?> />
234 ca23c2f8 Renato Botelho
									<strong><?=gettext("Clear invalid DF bits instead of dropping the packets");?></strong><br/>
235 f0d1af93 Carlos Eduardo Ramos
									<?=gettext("This allows for communications with hosts that generate fragmented " .
236
									"packets with the don't fragment (DF) bit set. Linux NFS is known to " .
237
									"do this. This will cause the filter to not drop such packets but " .
238
									"instead clear the don't fragment bit.");?>
239 2867fa7b Ermal Luçi
								</td>
240
							</tr>
241
							<tr>
242 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("IP Random id generation");?></td>
243 2867fa7b Ermal Luçi
								<td width="78%" class="vtable">
244
									<input name="scrubrnid" type="checkbox" id="scrubnodf" value="yes" <?php if (isset($config['system']['scrubrnid'])) echo "checked"; ?> />
245 ca23c2f8 Renato Botelho
									<strong><?=gettext("Insert a stronger id into IP header of packets passing through the filter.");?></strong><br/>
246 f0d1af93 Carlos Eduardo Ramos
									<?=gettext("Replaces the IP identification field of packets with random values to " .
247
									"compensate for operating systems that use predicatable values. " .
248
									"This option only applies to packets that are not fragmented after the " .
249
									"optional packet reassembly.");?>
250 ab3c8553 Matthew Grooms
								</td>
251
							</tr>
252
							<tr>
253 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("Firewall Optimization Options");?></td>
254 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
255
									<select onChange="update_description(this.selectedIndex);" name="optimization" id="optimization">
256 ca23c2f8 Renato Botelho
										<option value="normal"<?php if($config['system']['optimization']=="normal") echo " selected"; ?>><?=gettext("normal");?></option>
257
										<option value="high-latency"<?php if($config['system']['optimization']=="high-latency") echo " selected"; ?>><?=gettext("high-latency");?></option>
258
										<option value="aggressive"<?php if($config['system']['optimization']=="aggressive") echo " selected"; ?>><?=gettext("aggressive");?></option>
259
										<option value="conservative"<?php if($config['system']['optimization']=="conservative") echo " selected"; ?>><?=gettext("conservative");?></option>
260 ab3c8553 Matthew Grooms
									</select>
261
									<br/>
262 dc4f649e Scott Ullrich
									<textarea readonly="yes" cols="60" rows="2" id="info" name="info"style="padding:5px; border:1px dashed #990000; background-color: #ffffff; color: #000000; font-size: 8pt;"></textarea>
263 ab3c8553 Matthew Grooms
									<script language="javascript" type="text/javascript">
264
										update_description(document.forms[0].optimization.selectedIndex);
265
									</script>
266
									<br/>
267 ca23c2f8 Renato Botelho
									<?=gettext("Select the type of state table optimization to use");?>
268 ab3c8553 Matthew Grooms
								</td>
269
							</tr>
270
							<tr>
271 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("Disable Firewall");?></td>
272 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
273
									<input name="disablefilter" type="checkbox" id="disablefilter" value="yes" <?php if (isset($config['system']['disablefilter'])) echo "checked"; ?> />
274 ca23c2f8 Renato Botelho
									<strong><?=gettext("Disable all packet filtering.");?></strong>
275 ab3c8553 Matthew Grooms
									<br/>
276 ca23c2f8 Renato Botelho
									<span class="vexpl"><?php printf(gettext("Note:  This converts %s into a routing only platform!"), $g['product_name']);?><br>
277
										<?=gettext("Note:  This will turn off NAT!");?>
278 ab3c8553 Matthew Grooms
									</span>
279
								</td>
280
							</tr>
281
							<tr>
282 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("Disable Firewall Scrub");?></td>
283 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
284
									<input name="disablescrub" type="checkbox" id="disablescrub" value="yes" <?php if (isset($config['system']['disablescrub'])) echo "checked"; ?> />
285 ca23c2f8 Renato Botelho
									<strong><?=gettext("Disables the PF scrubbing option which can sometimes interfere with NFS and PPTP traffic.");?></strong>
286 ab3c8553 Matthew Grooms
									<br/>
287 ca23c2f8 Renato Botelho
									<?=gettext("Click")?> <a href='http://www.openbsd.org/faq/pf/scrub.html' target='_new'><?=gettext("here");?></a> <?=gettext("for more information.");?>
288 ab3c8553 Matthew Grooms
								</td>
289
							</tr>
290
							<tr>
291 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum States");?></td>
292 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
293
									<input name="maximumstates" type="text" id="maximumstates" value="<?php echo $pconfig['maximumstates']; ?>" />
294
									<br/>
295 ca23c2f8 Renato Botelho
									<strong><?=gettext("Maximum number of connections to hold in the firewall state table.");?></strong>
296 ab3c8553 Matthew Grooms
									<br/>
297 ea53e38f Renato Botelho
									<span class="vexpl"><?=gettext("Note:  Leave this blank for the default.  On your system the default size is:");?> <?= pfsense_default_state_size() ?></span>
298 ab3c8553 Matthew Grooms
								</td>
299
							</tr>
300 fb586a16 jim-p
							<tr>
301
								<td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum Table Entries");?></td>
302
								<td width="78%" class="vtable">
303
									<input name="maximumtableentries" type="text" id="maximumtableentries" value="<?php echo $pconfig['maximumtableentries']; ?>" />
304
									<br/>
305
									<strong><?=gettext("Maximum number of table entries for systems such as aliases, sshlockout, snort, etc, combined.");?></strong>
306
									<br/>
307
									<span class="vexpl">
308
										<?=gettext("Note:  Leave this blank for the default.");?>
309
										<?php if (empty($pconfig['maximumtableentries'])): ?>
310 ea53e38f Renato Botelho
											<?= gettext("On your system the default size is:");?> <?= pfsense_default_table_entries_size(); ?>
311 fb586a16 jim-p
										<?php endif; ?>
312
									</span>
313
								</td>
314
							</tr>
315 ab3c8553 Matthew Grooms
							<tr>
316 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("Static route filtering");?></td>
317 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
318
									<input name="bypassstaticroutes" type="checkbox" id="bypassstaticroutes" value="yes" <?php if ($pconfig['bypassstaticroutes']) echo "checked"; ?> />
319 ca23c2f8 Renato Botelho
									<strong><?=gettext("Bypass firewall rules for traffic on the same interface");?></strong>
320 ab3c8553 Matthew Grooms
									<br/>
321 f0d1af93 Carlos Eduardo Ramos
									<?=gettext("This option only applies if you have defined one or more static routes. If it is enabled, traffic that enters and " .
322
					 				"leaves through the same interface will not be checked by the firewall. This may be desirable in some situations where " .
323
									"multiple subnets are connected to the same interface.");?>
324 ab3c8553 Matthew Grooms
									<br/>
325
								</td>
326
							</tr>
327
							<tr>
328
								<td colspan="2" class="list" height="12">&nbsp;</td>
329
							</tr>
330 f691243d Ermal
							<?php if(count($config['interfaces']) > 1): ?>
331 ab3c8553 Matthew Grooms
							<tr>
332 ca23c2f8 Renato Botelho
								<td colspan="2" valign="top" class="listtopic"><?=gettext("Network Address Translation");?></td>
333 ab3c8553 Matthew Grooms
							</tr>		
334
							<tr>
335 129bc052 Erik Fonnesbeck
								<td width="22%" valign="top" class="vncell"><?=gettext("Disable NAT Reflection for port forwards");?></td>
336 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
337
									<input name="disablenatreflection" type="checkbox" id="disablenatreflection" value="yes" <?php if (isset($config['system']['disablenatreflection'])) echo "checked"; ?> />
338 bff94015 Erik Fonnesbeck
									<strong><?=gettext("Disables the automatic creation of additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks.  Note: Reflection for port forward entries is skipped for ranges larger than 500 ports.");?></strong>
339
								</td>
340
							</tr>
341
							<tr>
342
								<td width="22%" valign="top" class="vncell"><?=gettext("Reflection Timeout");?></td>
343
								<td width="78%" class="vtable">
344
									<input name="reflectiontimeout" id="reflectiontimeout" value="<?php echo $config['system']['reflectiontimeout']; ?>" /><br/>
345 ed69be7a Erik Fonnesbeck
									<strong><?=gettext("Enter value for Reflection timeout in seconds.  Note: Only applies to Reflection on port forwards.");?></strong>
346 ab3c8553 Matthew Grooms
								</td>
347
							</tr>
348
							<tr>
349 129bc052 Erik Fonnesbeck
								<td width="22%" valign="top" class="vncell"><?=gettext("Disable NAT Reflection for 1:1 NAT");?></td>
350 ab3c8553 Matthew Grooms
								<td width="78%" class="vtable">
351 9fc22c6f Erik Fonnesbeck
									<input name="disablebinatreflection" type="checkbox" id="disablebinatreflection" value="yes" <?php if (!isset($config['system']['enablebinatreflection'])) echo "checked"; ?> />
352 bff94015 Erik Fonnesbeck
									<strong><?=gettext("Disables the automatic creation of additional NAT 1:1 mappings for access to 1:1 mappings of your external IP addresses from within your internal networks.  Note: Reflection for 1:1 NAT might not fully work in certain complex routing scenarios.");?></strong>
353 ab3c8553 Matthew Grooms
								</td>
354
							</tr>
355 a2b6c52f Erik Fonnesbeck
							<tr>
356
								<td width="22%" valign="top" class="vncell">&nbsp;</td>
357
								<td width="78%" class="vtable">
358
									<input name="enablenatreflectionhelper" type="checkbox" id="enablenatreflectionhelper" value="yes" <?php if (isset($config['system']['enablenatreflectionhelper'])) echo "checked"; ?> />
359
									<strong><?=gettext("Automatically create outbound NAT rules which assist inbound NAT rules that direct traffic back out to the same subnet it originated from.");?></strong>
360
									<br/>
361
									<?=gettext("Currently only applies to 1:1 NAT rules.  Required for full functionality of NAT Reflection for 1:1 NAT.");?>
362
								</td>
363
							</tr>
364 cfdce2ad Ermal
							<tr>
365 ca23c2f8 Renato Botelho
								<td width="22%" valign="top" class="vncell"><?=gettext("TFTP Proxy");?></td>
366 cfdce2ad Ermal
								<td width="78%" class="vtable">
367
									<select name="tftpinterface[]" multiple="true" class="formselect" size="3">
368
<?php
369 ca23c2f8 Renato Botelho
										$ifdescs = get_configured_interface_with_descr();
370
										foreach ($ifdescs as $ifent => $ifdesc):
371 cfdce2ad Ermal
?>
372 1beafceb Erik Fonnesbeck
											<option value="<?=$ifent;?>" <?php if (in_array($ifent, $pconfig['tftpinterface'])) echo "selected"; ?>><?=gettext($ifdesc);?></option>
373 ca23c2f8 Renato Botelho
<?php									endforeach; ?>
374
									</select>
375 c3c2fd20 Erik Fonnesbeck
									<strong><?=gettext("Choose the interfaces where you want TFTP proxy helper to be enabled.");?></strong>
376 cfdce2ad Ermal
								</td>
377
							</tr>
378 ab3c8553 Matthew Grooms
							<tr>
379
								<td colspan="2" class="list" height="12">&nbsp;</td>
380
							</tr>
381
							<?php endif; ?>
382
							<tr>
383
								<td width="22%" valign="top">&nbsp;</td>
384 cf9331b3 Renato Botelho
								<td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
385 ab3c8553 Matthew Grooms
							</tr>
386
						</table>
387
					</td>
388
				</tr>
389
			</div>
390
		</table>
391
	</form>
392 df81417f Matthew Grooms
393
<?php include("fend.inc"); ?>
394
</body>
395
</html>