summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorErik Fonnesbeck <efonnes@gmail.com>2012-04-28 01:38:59 -0600
committerErik Fonnesbeck <efonnes@gmail.com>2012-04-28 01:38:59 -0600
commitf9053c0c5f226a0361c31a16cd21fb96a6b2888c (patch)
tree568b17e30067f6b757c788e8440221ac258d1e7a /etc
parent43fd29dfa2866af83e816e87c814fc2302e41c25 (diff)
downloadpfsense-f9053c0c5f226a0361c31a16cd21fb96a6b2888c.zip
pfsense-f9053c0c5f226a0361c31a16cd21fb96a6b2888c.tar.gz
Restore protection for the "destination any" case for port forward NAT Reflection, which was forgotten when shuffling around code before committing. Also add a couple other missing checks.
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/filter.inc23
1 files changed, 14 insertions, 9 deletions
diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc
index 7ad8d6e..4adc527 100644
--- a/etc/inc/filter.inc
+++ b/etc/inc/filter.inc
@@ -1752,20 +1752,15 @@ function filter_nat_rules_generate() {
else
$nat_if_list = array();
+ if(empty($nat_if_list))
+ $reflection_type = "none";
+
$localport_nat = $localport;
if(empty($localport_nat) && $dstaddr_port[2])
$localport_nat = " port " . $dstaddr_port[2];
if($srcaddr <> "" && $dstaddr <> "" && $natif) {
- $rdr_if_list = $natif;
- if($reflection_type == "purenat" || isset($rule['nordr'])) {
- $nat_if_list = array_merge(array($natif), $nat_if_list);
- $rdr_if_list = implode(" ", $nat_if_list);
- if(count($nat_if_list) > 1)
- $rdr_if_list = "{ {$rdr_if_list} }";
- }
-
- $natrules .= "{$nordr}rdr {$rdrpass}on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr}" . ($nordr == "" ? " -> {$target}{$localport}" : "");
+ $natrules .= "{$nordr}rdr {$rdrpass}on {$natif} proto {$protocol} from {$srcaddr} to {$dstaddr}" . ($nordr == "" ? " -> {$target}{$localport}" : "");
/* Does this rule redirect back to a internal host? */
if(isset($rule['destination']['any']) && !isset($rule['nordr']) && !isset($config['system']['enablenatreflectionhelper']) && !interface_has_gateway($rule['interface'])) {
@@ -1785,8 +1780,18 @@ function filter_nat_rules_generate() {
foreach ($reflection_rules as $txtline)
fwrite($inetd_fd, $txtline);
+ } else if($reflection_type == "purenat" || isset($rule['nordr'])) {
+ $rdr_if_list = implode(" ", $nat_if_list);
+ if(count($nat_if_list) > 1)
+ $rdr_if_list = "{ {$rdr_if_list} }";
+ $natrules .= "\n# Reflection redirect\n";
+ $natrules .= "{$nordr}rdr {$rdrpass}on {$rdr_if_list} proto {$protocol} from {$srcaddr} to {$dstaddr_reflect}" . ($nordr == "" ? " -> {$target}{$localport}" : "");
+ $nat_if_list = array_merge(array($natif), $nat_if_list);
}
+ if(empty($nat_if_list))
+ $nat_if_list = array($natif);
+
$natrules .= "\n";
if(!isset($rule['nordr']))
$natrules .= filter_generate_reflection_nat($rule, $route_table, $nat_if_list, $protocol, "{$target}{$localport_nat}", $target_ip);
OpenPOWER on IntegriCloud