[Netfilter] fix setting SNAT Rule if chain is empty
This commit is contained in:
parent
cd29ad883e
commit
04403aaf70
@ -359,21 +359,28 @@ def snat4(snat_target):
|
|||||||
chain = iptc.Chain(table, 'POSTROUTING')
|
chain = iptc.Chain(table, 'POSTROUTING')
|
||||||
table.autocommit = False
|
table.autocommit = False
|
||||||
new_rule = get_snat4_rule()
|
new_rule = get_snat4_rule()
|
||||||
for position, rule in enumerate(chain.rules):
|
|
||||||
match = all((
|
if not chain.rules:
|
||||||
new_rule.get_src() == rule.get_src(),
|
# if there are no rules in the chain, insert the new rule directly
|
||||||
new_rule.get_dst() == rule.get_dst(),
|
logInfo(f'Added POSTROUTING rule for source network {new_rule.src} to SNAT target {snat_target}')
|
||||||
new_rule.target.parameters == rule.target.parameters,
|
chain.insert_rule(new_rule)
|
||||||
new_rule.target.name == rule.target.name
|
else:
|
||||||
))
|
for position, rule in enumerate(chain.rules):
|
||||||
if position == 0:
|
match = all((
|
||||||
if not match:
|
new_rule.get_src() == rule.get_src(),
|
||||||
logInfo(f'Added POSTROUTING rule for source network {new_rule.src} to SNAT target {snat_target}')
|
new_rule.get_dst() == rule.get_dst(),
|
||||||
chain.insert_rule(new_rule)
|
new_rule.target.parameters == rule.target.parameters,
|
||||||
else:
|
new_rule.target.name == rule.target.name
|
||||||
if match:
|
))
|
||||||
logInfo(f'Remove rule for source network {new_rule.src} to SNAT target {snat_target} from POSTROUTING chain at position {position}')
|
if position == 0:
|
||||||
chain.delete_rule(rule)
|
if not match:
|
||||||
|
logInfo(f'Added POSTROUTING rule for source network {new_rule.src} to SNAT target {snat_target}')
|
||||||
|
chain.insert_rule(new_rule)
|
||||||
|
else:
|
||||||
|
if match:
|
||||||
|
logInfo(f'Remove rule for source network {new_rule.src} to SNAT target {snat_target} from POSTROUTING chain at position {position}')
|
||||||
|
chain.delete_rule(rule)
|
||||||
|
|
||||||
table.commit()
|
table.commit()
|
||||||
table.autocommit = True
|
table.autocommit = True
|
||||||
except:
|
except:
|
||||||
|
Loading…
Reference in New Issue
Block a user