aboutsummaryrefslogtreecommitdiffstats
path: root/awall/modules/nat.lua
diff options
context:
space:
mode:
Diffstat (limited to 'awall/modules/nat.lua')
-rw-r--r--awall/modules/nat.lua18
1 files changed, 11 insertions, 7 deletions
diff --git a/awall/modules/nat.lua b/awall/modules/nat.lua
index 3a23558..68c452d 100644
--- a/awall/modules/nat.lua
+++ b/awall/modules/nat.lua
@@ -8,15 +8,19 @@ Licensed under the terms of GPL2
module(..., package.seeall)
require 'awall.model'
+require 'awall.util'
local model = awall.model
-local NATRule = model.class(model.ForwardOnlyRule)
+local NATRule = model.class(model.Rule)
function NATRule:trules()
local res = {}
- for i, ofrags in ipairs(model.ForwardOnlyRule.trules(self)) do
+ for i, ofrags in ipairs(model.Rule.trules(self)) do
+ if not awall.util.contains(self.params.chains, ofrags.chain) then
+ self:error('Inappropriate zone definitions for a '..self.params.target..' rule')
+ end
if ofrags.family == 'inet' then table.insert(res, ofrags) end
end
return res
@@ -24,10 +28,8 @@ end
function NATRule:table() return 'nat' end
-function NATRule:chain() return self.params.chain end
-
function NATRule:target()
- if self.action then return model.ForwardOnlyRule.target(self) end
+ if self.action then return model.Rule.target(self) end
local target
if self['ip-range'] then
@@ -44,7 +46,8 @@ local DNATRule = model.class(NATRule)
function DNATRule:init(...)
NATRule.init(self, unpack(arg))
self.params = {forbidif='out', subject='destination',
- chain='PREROUTING', target='DNAT', deftarget='REDIRECT'}
+ chains={'INPUT', 'PREROUTING'},
+ target='DNAT', deftarget='REDIRECT'}
end
@@ -53,7 +56,8 @@ local SNATRule = model.class(NATRule)
function SNATRule:init(...)
NATRule.init(self, unpack(arg))
self.params = {forbidif='in', subject='source',
- chain='POSTROUTING', target='SNAT', deftarget='MASQUERADE'}
+ chains={'OUTPUT', 'POSTROUTING'},
+ target='SNAT', deftarget='MASQUERADE'}
end