summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorErik Fonnesbeck <efonnes@gmail.com>2010-07-05 19:31:14 -0600
committerErik Fonnesbeck <efonnes@gmail.com>2010-07-05 19:31:14 -0600
commit15409667f720dd1191219c5a32d01e6562f74e8f (patch)
tree288e7a7e523246d9d6ce57149570ea1d08cfc0b8 /etc
parentf60181150d6a64b9bcfaa246311e60a6a546b768 (diff)
downloadpfsense-15409667f720dd1191219c5a32d01e6562f74e8f.zip
pfsense-15409667f720dd1191219c5a32d01e6562f74e8f.tar.gz
Add per-rule NAT reflection override.
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/filter.inc25
1 files changed, 15 insertions, 10 deletions
diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc
index fe7c047..adcb8d5 100644
--- a/etc/inc/filter.inc
+++ b/etc/inc/filter.inc
@@ -1085,7 +1085,8 @@ function filter_nat_rules_generate() {
if($natif) {
/* If reflection is enabled, turn on extra redirections
* for this rule by adding other interfaces to binat rule. */
- if(isset($config['system']['enablebinatreflection'])) {
+ if((isset($config['system']['enablebinatreflection']) || $natent['natreflection'] == "enable")
+ && $natent['natreflection'] != "disable") {
$nat_if_list = filter_get_reflection_interfaces($natif);
} else {
$nat_if_list = array();
@@ -1281,10 +1282,8 @@ function filter_nat_rules_generate() {
fwrite($inetd_fd, "tftp-proxy\tdgram\tudp\twait\t\troot\t/usr/libexec/tftp-proxy\ttftp-proxy -v\n");
if(isset($config['nat']['rule'])) {
- if(!isset($config['system']['disablenatreflection'])) {
- /* start redirects on port 19000 of localhost */
- $starting_localhost_port = 19000;
- }
+ /* start reflection redirects on port 19000 of localhost */
+ $starting_localhost_port = 19000;
$natrules .= "# NAT Inbound Redirects\n";
foreach ($config['nat']['rule'] as $rule) {
update_filter_reload_status("Creating NAT rule {$rule['descr']}");
@@ -1360,7 +1359,8 @@ function filter_nat_rules_generate() {
} else
$nordr = "";
- if(!isset($config['system']['disablenatreflection'])) {
+ if((!isset($config['system']['disablenatreflection']) || $rule['natreflection'] == "enable")
+ && $rule['natreflection'] != "disable") {
$nat_if_list = filter_get_reflection_interfaces($natif);
} else {
$nat_if_list = array();
@@ -2126,13 +2126,18 @@ EOD;
}
}
- $ipfrules .= "# NAT Reflection rules\n";
- if(isset($config['nat']['rule']) &&
- (!isset($config['system']['disablenatreflection']))) {
- $ipfrules .= <<<EOD
+ if(isset($config['nat']['rule']) && is_array($config['nat']['rule'])) {
+ foreach ($config['nat']['rule'] as $rule) {
+ if((!isset($config['system']['disablenatreflection']) || $rule['natreflection'] == "enable")
+ && $rule['natreflection'] != "disable") {
+ $ipfrules .= "# NAT Reflection rules\n";
+ $ipfrules .= <<<EOD
pass in inet tagged PFREFLECT keep state label "NAT REFLECT: Allow traffic to localhost"
EOD;
+ break;
+ }
+ }
}
if(isset($config['filter']['rule'])) {
OpenPOWER on IntegriCloud