update_protocol();
// When nat not used, hide it
- if (! \$("#nat").attr("checked")) {
- \$("#natpart").hide();
+ if (! \$("#USE_NAT").attr("checked")) {
+ \$(".NAT").hide();
}
// Show NAT area when "use nat" checkbox is clicked
- \$("#nat").change(function() {
- \$("#natpart").toggle();
+ \$("#USE_NAT").change(function() {
+ \$(".NAT").toggle();
});
// Time constraints
&newrule;
}else{
if($fwdfwsettings{'nosave2'} ne 'on'){
- &rules;
+ &General::firewall_config_changed();
}
&base;
}
}
}
&General::writehasharray($fwdfwsettings{'config'}, \%togglehash);
- &rules;
+ &General::firewall_config_changed();
&base;
}
if ($fwdfwsettings{'ACTION'} eq $Lang::tr{'fwdfw togglelog'})
}
}
&General::writehasharray($fwdfwsettings{'config'}, \%togglehash);
- &rules;
+ &General::firewall_config_changed();
&base;
}
if ($fwdfwsettings{'ACTION'} eq $Lang::tr{'fwdfw reread'})
{
- &reread_rules;
+ &General::firewall_reload();
&base;
}
if ($fwdfwsettings{'ACTION'} eq 'editrule')
sub addrule
{
&error;
- if (-f "${General::swroot}/forward/reread"){
- print "<table border='1' rules='groups' bgcolor='lightgreen' width='100%'><form method='post'><td><div style='font-size:11pt; font-weight: bold;vertical-align: middle; '><input type='submit' name='ACTION' value='$Lang::tr{'fwdfw reread'}' style='font-face: Comic Sans MS; color: green; font-weight: bold; font-size: 14pt;'>    $Lang::tr{'fwhost reread'}</div></td></tr></table></form><br>";
- }
+
&Header::openbox('100%', 'left', $Lang::tr{'fwdfw menu'});
- print "<form method='post'>";
- print "<table border='0'>";
- print "<tr><td><input type='submit' name='ACTION' value='$Lang::tr{'fwdfw newrule'}'></td>";
- print"</tr></table></form><hr>";
+ print <<END;
+ <form method="POST" action="">
+ <table border='0' width="100%">
+ <tr>
+ <td>
+ <input type='submit' name='ACTION' value='$Lang::tr{'fwdfw newrule'}'>
+ </td>
+ <td align="right">
+END
+
+ if (&General::firewall_needs_reload()) {
+ print <<END;
+ <input type='submit' name='ACTION' value='$Lang::tr{'fwdfw reread'}' style='font-weight: bold; color: green;'>
+END
+ }
+
+ print <<END;
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <hr>
+END
&Header::closebox();
&viewtablerule;
}
#check DNAT settings (has to be single Host and single Port or portrange)
if ($fwdfwsettings{'USE_NAT'} eq 'ON' && $fwdfwsettings{'nat'} eq 'dnat'){
if($fwdfwsettings{'grp2'} eq 'tgt_addr' || $fwdfwsettings{'grp2'} eq 'cust_host_tgt' || $fwdfwsettings{'grp2'} eq 'ovpn_host_tgt'){
- if ($fwdfwsettings{'USESRV'} eq '' && $fwdfwsettings{'dnatport'} eq ''){
- $errormessage=$Lang::tr{'fwdfw target'}.": ".$Lang::tr{'fwdfw dnat porterr'}."<br>";
- return $errormessage;
- }
#check if manual ip is a single Host (if set)
if ($fwdfwsettings{'grp2'} eq 'tgt_addr'){
my @tmp= split (/\./,$fwdfwsettings{$fwdfwsettings{'grp2'}});
delete $delhash{$last_key};
&General::writehasharray($fwdfwsettings{'config'}, \%delhash);
- &rules;
+ &General::firewall_config_changed();
if($fwdfwsettings{'nobase'} ne 'on'){
&base;
}
}
&General::writehasharray("$configfwdfw", \%configfwdfw);
- &rules;
+ &General::firewall_config_changed();
}
sub dec_counter
{
#---SNAT / DNAT ------------------------------------------------
&Header::openbox('100%', 'left', 'NAT');
print<<END;
- <div id="nat"><table width='100%' border='0'>
- <tr><td width='1%'><input type='checkbox' name='USE_NAT' id='USE_NAT' value='ON' $checked{'USE_NAT'}{'ON'} ></td><td width='15%'>$Lang::tr{'fwdfw use nat'}</td><td colspan='5'></td></tr></table></div>
- <div id="natpart" class="noscript">
- <table width=100%' border='0'><tr>
- <tr><td colspan='2'></td><td width='1%'><input type='radio' name='nat' id='dnat' value='dnat' checked ></td><td width='50%'>$Lang::tr{'fwdfw dnat'}</td>
+ <label>
+ <input type='checkbox' name='USE_NAT' id='USE_NAT' value="ON" $checked{'USE_NAT'}{'ON'}>
+ $Lang::tr{'fwdfw use nat'}
+ </label>
+ <div class="NAT">
+ <table width='100%' border='0'>
+ <tr>
+ <td colspan='2'></td>
+ <td width='1%'>
+ <input type='radio' name='nat' id='dnat' value='dnat' checked>
+ </td>
+ <td width='50%'>$Lang::tr{'fwdfw dnat'}</td>
END
print"<td width='8%'>Firewall: </td><td width='20%' align='right'><select name='dnat' style='width:140px;'>";
print "<option value='ALL' $selected{'dnat'}{$Lang::tr{'all'}}>$Lang::tr{'all'}</option>";
print "<option value='$alias' $selected{'dnat'}{$alias}>$alias</option>";
}
print"</select></td></tr>";
- $fwdfwsettings{'dnatport'}=~ tr/|/,/;
- print"<tr><td colspan='4'></td><td>Port: </td><td align='right'><input type='text' name='dnatport' style='width:130px;' value=\"$fwdfwsettings{'dnatport'}\"> </td></tr>";
- print"<tr><td colspan='8'><br></td></tr>";
#SNAT
print"<tr><td colspan='2'></td><td width='1%'><input type='radio' name='nat' id='snat' value='snat' $checked{'nat'}{'snat'}></td><td width='20%'>$Lang::tr{'fwdfw snat'}</td>";
print"<td width='8%'>Firewall: </td><td width='20%' align='right'><select name='snat' style='width:140px;'>";
print ">$network</option>";
}
print"</select></td></tr></table>";
- print"</div><br><hr>";
+ print"</div>";
&Header::closebox();
#---TARGET------------------------------------------------------
&Header::openbox('100%', 'left', $Lang::tr{'fwdfw target'});
$fwdfwsettings{'SRC_PORT'} =~ s/\|/,/g;
$fwdfwsettings{'TGT_PORT'} =~ s/\|/,/g;
+ $fwdfwsettings{'dnatport'} =~ tr/|/,/;
+
+ # The dnatport may be empty, if it matches TGT_PORT
+ if ($fwdfwsettings{'dnatport'} eq $fwdfwsettings{'TGT_PORT'}) {
+ $fwdfwsettings{'dnatport'} = "";
+ }
print <<END;
<input type='text' name='TGT_PORT' value='$fwdfwsettings{'TGT_PORT'}' maxlength='20' size='18'>
</td>
</tr>
+ <tr class="NAT">
+ <td colspan='3'></td>
+ <td>$Lang::tr{'fwdfw external port nat'}:</td>
+ <td>
+ <input type='text' name='dnatport' value=\"$fwdfwsettings{'dnatport'}\" maxlength='20' size='18'>
+ </td>
+ </tr>
</table>
</div>
}
print<<END;
- </table><table width='100%'>
- <tr><td width='1%'><input type='checkbox' name='ACTIVE' value='ON' $checked{'ACTIVE'}{'ON'}></td><td>$Lang::tr{'fwdfw rule activate'}</td></tr>
- <tr><td width='1%'><input type='checkbox' name='LOG' value='ON' $checked{'LOG'}{'ON'} ></td><td>$Lang::tr{'fwdfw log rule'}</td></tr>
+ </table>
+ <table width='100%'>
+ <tr>
+END
+
+ if ($fwdfwsettings{'updatefwrule'} eq 'on') {
+ print <<END;
+ <td>
+ <input type='checkbox' name='ACTIVE' value="ON" $checked{'ACTIVE'}{'ON'}>
+ </td>
+ <td>$Lang::tr{'fwdfw rule activate'}</td>
+END
+ } else {
+ print <<END;
+ <td colspan="2">
+ <input type="hidden" name="ACTIVE" value="ON">
+ </td>
+END
+ }
+
+ print <<END;
+ </tr>
+ <tr>
+ <td>
+ <input type='checkbox' name='LOG' value='ON' $checked{'LOG'}{'ON'}>
+ </td>
+ <td>$Lang::tr{'fwdfw log rule'}</td>
+ </tr>
<tr>
<td width='1%'>
<input type='checkbox' name='TIME' id="USE_TIME_CONSTRAINTS" value='ON' $checked{'TIME'}{'ON'}>
}
}
&General::writehasharray($fwdfwsettings{'config'}, \%uphash);
- &rules;
+ &General::firewall_config_changed();
}
sub pos_down
{
}
}
&General::writehasharray($fwdfwsettings{'config'}, \%downhash);
- &rules;
-}
-sub rules
-{
- if (!-f "${General::swroot}/forward/reread"){
- system("touch ${General::swroot}/forward/reread");
- system("touch ${General::swroot}/fwhosts/reread");
- }
-}
-sub reread_rules
-{
- system("/usr/local/bin/forwardfwctrl");
- if ( -f "${General::swroot}/forward/reread"){
- system("rm ${General::swroot}/forward/reread");
- system("rm ${General::swroot}/fwhosts/reread");
- }
+ &General::firewall_config_changed();
}
sub saverule
{
$fwdfwsettings{'oldrulenumber'}--;
}
&General::writehasharray("$config", $hash);
- &rules;
+ &General::firewall_config_changed();
}elsif($fwdfwsettings{'rulepos'} > $fwdfwsettings{'oldrulenumber'}){
my %tmp=();
my $val=$fwdfwsettings{'rulepos'}-$fwdfwsettings{'oldrulenumber'};
$fwdfwsettings{'oldrulenumber'}++;
}
&General::writehasharray("$config", $hash);
- &rules;
+ &General::firewall_config_changed();
}
}
}
my $tooltip;
my @tmpsrc=();
my $coloryellow='';
- print"<b>$title1</b><br>";
- print"<table width='100%' cellspacing='0' cellpadding='0' border='0'>";
- print"<tr><td align='center'><b>#</b></td><td></td><td align='center' width='25'></td><td align='center'><b>$Lang::tr{'fwdfw source'}</b></td><td width='1%'><b>Log</b></td><td align='center'><b>$Lang::tr{'fwdfw target'}</b></td><td align='center' colspan='6' width='1%'><b>$Lang::tr{'fwdfw action'}</b></td></tr>";
+ print <<END;
+ <b>$title1</b>
+ <br>
+
+ <table width='100%' cellspacing='0' border='0'>
+ <tr>
+ <th align='right' width='3%'>
+ #
+ </th>
+ <th width='2%'></th>
+ <th align='center'>
+ <b>$Lang::tr{'protocol'}</b>
+ </th>
+ <th align='center' width='30%'>
+ <b>$Lang::tr{'fwdfw source'}</b>
+ </th>
+ <th align='center'>
+ Log <!-- XXX UNTRANSLATED STRING -->
+ </th>
+ <th align='center' width='30%'>
+ <b>$Lang::tr{'fwdfw target'}</b>
+ </th>
+ <th align='center' colspan='6' width='18%'>
+ <b>$Lang::tr{'fwdfw action'}</b>
+ </th>
+ </tr>
+END
+
foreach my $key (sort {$a <=> $b} keys %$hash){
$tdcolor='';
@tmpsrc=();
$color="$color{'color20'}";
}
}
- print"<tr bgcolor='$color' >";
- #KEY
print<<END;
- <td align='right' width='18'><b>$key </b></td>
+ <tr bgcolor='$color'>
+ <td align='right' width='3%'>
+ <b>$key </b>
+ </td>
END
+
#RULETYPE (A,R,D)
if ($$hash{$key}[0] eq 'ACCEPT'){
$ruletype='A';
$tooltip='REJECT';
$rulecolor=$color{'color16'};
}
- print"<td bgcolor='$rulecolor' align='center' width='10'><span title='$tooltip'><b>$ruletype</b></span></td>";
+
+ print <<END;
+ <td bgcolor='$rulecolor' align='center' width='2%'>
+ <span title='$tooltip'> </span>
+ </td>
+END
+
#Get Protocol
my $prot;
if ($$hash{$key}[8]){
}else{
push (@protocols,$Lang::tr{'all'});
}
+
my $protz=join(",",@protocols);
if($protz eq 'ICMP' && $$hash{$key}[9] ne 'All ICMP-Types' && $$hash{$key}[14] ne 'cust_srvgrp'){
&General::readhasharray("${General::swroot}/fwhosts/icmp-types", \%icmptypes);
}
#LOGGING
print<<END;
- </td>
- <td align='left' width='25'><form method='post'><input type='image' img src='$log' alt='$Lang::tr{'click to disable'}' title='$Lang::tr{'fwdfw togglelog'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;'/>
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='$Lang::tr{'fwdfw togglelog'}' />
- </form></td>
+ </td>
+ <td align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='$log' alt='$Lang::tr{'click to disable'}' title='$Lang::tr{'fwdfw togglelog'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;'/>
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='$Lang::tr{'fwdfw togglelog'}' />
+ </form>
+ </td>
END
#TARGET
&getcolor($$hash{$key}[5],$$hash{$key}[6],\%customhost);
print<<END;
- <td align='center' width='160' $tdcolor>
+ <td align='center' $tdcolor>
END
#Is this a DNAT rule?
if ($$hash{$key}[31] eq 'dnat' && $$hash{$key}[28] eq 'ON'){
$$hash{$key}[30]=~ tr/|/,/;
print": $$hash{$key}[30]";
}
- print"<br>->";
+ print"<br>->";
}
if ($$hash{$key}[5] eq 'ipfire'){
$ipfireiface='Interface';
$gif="/images/off.gif"
}
print<<END;
- <td width='25'><form method='post'><input type='image' img src='$gif' alt='$Lang::tr{'click to disable'}' title='$Lang::tr{'fwdfw toggle'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='$Lang::tr{'fwdfw toggle'}' />
- </form></td>
- <td width='25' ><form method='post'><input type='image' img src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'fwdfw edit'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='editrule' />
- </form></td>
- <td width='25'><form method='post'><input type='image' img src='/images/addblue.gif' alt='$Lang::tr{'fwdfw copy'}' title='$Lang::tr{'fwdfw copy'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='copyrule' />
- </form></td>
- <td width='25' ><form method='post'><input type='image' img src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'fwdfw delete'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='deleterule' />
- </form></td>
+ <td width='3%' align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='$gif' alt='$Lang::tr{'click to disable'}' title='$Lang::tr{'fwdfw toggle'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='$Lang::tr{'fwdfw toggle'}' />
+ </form>
+ </td>
+ <td width='3%' align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'fwdfw edit'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='editrule' />
+ </form>
+ </td>
+ <td width='3%' align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='/images/addblue.gif' alt='$Lang::tr{'fwdfw copy'}' title='$Lang::tr{'fwdfw copy'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='copyrule' />
+ </form>
+ </td>
+ <td width='3%' align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'fwdfw delete'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='deleterule' />
+ </form>
+ </td>
END
if (exists $$hash{$key-1}){
print<<END;
- <td width='25'><form method='post'><input type='image' img src='/images/up.gif' alt='$Lang::tr{'fwdfw moveup'}' title='$Lang::tr{'fwdfw moveup'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='moveup' />
- </form></td>
+ <td width='3%' align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='/images/up.gif' alt='$Lang::tr{'fwdfw moveup'}' title='$Lang::tr{'fwdfw moveup'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='moveup' />
+ </form>
+ </td>
END
}else{
- print"<td width='25'><input type='image' img src='/images/up.gif' style='visibility:hidden;'></td>";
+ print"<td width='3%'></td>";
}
+
if (exists $$hash{$key+1}){
print<<END;
- <td width='25' ><form method='post'><input type='image' img src='/images/down.gif' alt='$Lang::tr{'fwdfw movedown'}' title='$Lang::tr{'fwdfw movedown'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
- <input type='hidden' name='key' value='$key' />
- <input type='hidden' name='config' value='$config' />
- <input type='hidden' name='ACTION' value='movedown' />
- </form></td></tr>
+ <td width='3%' align='center'>
+ <form method='POST' action=''>
+ <input type='image' img src='/images/down.gif' alt='$Lang::tr{'fwdfw movedown'}' title='$Lang::tr{'fwdfw movedown'}' style='padding-top: 0px; padding-left: 0px; padding-bottom: 0px ;padding-right: 0px ;display: block;' />
+ <input type='hidden' name='key' value='$key' />
+ <input type='hidden' name='config' value='$config' />
+ <input type='hidden' name='ACTION' value='movedown' />
+ </form>
+ </td>
+ </tr>
END
}else{
- print"<td width='25'><input type='image' img src='/images/down.gif' style='visibility:hidden;'></td></tr>";
+ print"<td width='3%'></td></tr>";
}
#REMARK
if ($optionsfw{'SHOWREMARK'} eq 'on' && $$hash{$key}[16] ne ''){
- print"<tr bgcolor='$color'>";
- print"<td> </td><td bgcolor='$rulecolor'></td><td colspan='10'> $$hash{$key}[16]</td></tr>";
+ print <<END;
+ <tr bgcolor='$color'>
+ <td> </td>
+ <td bgcolor='$rulecolor'></td>
+ <td colspan='10'>
+ <em>$$hash{$key}[16]</em>
+ </td>
+ </tr>
+END
}
+
if ($$hash{$key}[18] eq 'ON'){
#TIMEFRAME
if ($$hash{$key}[18] eq 'ON'){
my $weekdays=join(",",@days);
if (@days){
print"<tr bgcolor='$color'>";
- print"<td> </td><td bgcolor='$rulecolor'></td><td align='left' colspan='10'> $weekdays $$hash{$key}[26] - $$hash{$key}[27] </td></tr>";
+ print"<td> </td><td bgcolor='$rulecolor'></td><td align='left' colspan='10'> $weekdays $$hash{$key}[26] - $$hash{$key}[27]</td></tr>";
}
}
}