diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2012-07-13 10:36:44 +0000 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2012-07-13 10:36:44 +0000 |
commit | caa5010add951a604943d99fcce852cc30389143 (patch) | |
tree | 27fad54e27ac0127e25a8fd1b6fcef303416f099 /awall | |
parent | d5d5baee1e40a52dcb8f5bfe5e16ccf3ab3ed9fd (diff) | |
download | awall-caa5010add951a604943d99fcce852cc30389143.tar.bz2 awall-caa5010add951a604943d99fcce852cc30389143.tar.xz |
route tracking for incoming connectionsv0.2.0
Diffstat (limited to 'awall')
-rw-r--r-- | awall/modules/mark.lua | 41 | ||||
-rw-r--r-- | awall/util.lua | 2 |
2 files changed, 41 insertions, 2 deletions
diff --git a/awall/modules/mark.lua b/awall/modules/mark.lua index 135d4b1..1122ab4 100644 --- a/awall/modules/mark.lua +++ b/awall/modules/mark.lua @@ -8,6 +8,8 @@ Licensed under the terms of GPL2 module(..., package.seeall) require 'awall.model' +require 'awall.optfrag' +require 'awall.util' local model = awall.model @@ -22,6 +24,43 @@ function MarkRule:target() end -classes = {{'mark', MarkRule}} +local RouteTrackRule = model.class(MarkRule) + +function RouteTrackRule:target() + if not self['mark-target'] then + self['mark-target'] = self:newchain('mark') + end + return self['mark-target'] +end + +function RouteTrackRule:servoptfrags() + return awall.optfrag.combinations(MarkRule.servoptfrags(self), + {{opts='-m mark --mark 0'}}) +end + +function RouteTrackRule:extraoptfrags() + return {{chain=self:target(), opts='-j '..MarkRule.target(self)}, + {chain=self:target(), opts='-j CONNMARK --save-mark'}} +end + + +classes = {{'route-track', RouteTrackRule}, + {'mark', MarkRule}} defrules = {} + +function defrules.pre(config) + local res = {} + if awall.util.list(config['route-track'])[1] then + for i, family in ipairs({'inet', 'inet6'}) do + for i, chain in ipairs({'OUTPUT', 'PREROUTING'}) do + table.insert(res, + {family=family, + table='mangle', + chain=chain, + opts='-m connmark ! --mark 0 -j CONNMARK --restore-mark'}) + end + end + end + return res +end diff --git a/awall/util.lua b/awall/util.lua index 8963a5c..dad057e 100644 --- a/awall/util.lua +++ b/awall/util.lua @@ -7,7 +7,7 @@ Licensed under the terms of GPL2 module(..., package.seeall) -local function list(var) +function list(var) if not var then return {} end if type(var) ~= 'table' then return {var} end if not next(var) then return {} end |