Skip to content

Commit fdbf967

Browse files
committed
fix issue with cidrs-with-ports in nftables
1 parent e63f228 commit fdbf967

3 files changed

Lines changed: 27 additions & 2 deletions

File tree

netfilter_openvpn.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ def _build_firewall_rule_nftables(self, name, usersrcip, protocol, acl):
460460
right_side = str(acl.address.ip)
461461
else:
462462
# This is a rare case and we haven't tested it fully, come back later.
463-
right_side = {"prefix": {"addr": str(acl.address.ip), "len": acl.prefixlen}}
463+
right_side = {"prefix": {"addr": str(acl.address.ip), "len": acl.address.prefixlen}}
464464
rule_def = {
465465
'rule': {
466466
'family': 'inet',

test/test_netfilter_openvpn_nftables.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,31 @@ def test_30_build_fw_rule_4(self):
563563
msg='_build_firewall_rule_nftables raises when a rule add fails'):
564564
self.library._build_firewall_rule_nftables('10.20.30.1', '1.2.3.4', 'tcp', in_acl1)
565565

566+
in_acl3 = iamvpnlibrary.iamvpnbase.ParsedACL(
567+
rule='rule3', address=IPNetwork('5.6.7.10/28'),
568+
portstring='22', description='I HAZ COMMENT')
569+
with mock.patch.object(self.library.nft, 'json_cmd') as mock_nft:
570+
mock_nft.return_value = (0, '', '')
571+
self.library._build_firewall_rule_nftables('10.20.30.2', '1.2.3.4', 'tcp', in_acl3)
572+
mock_nft.assert_called_once_with({'nftables': [
573+
{'add': {'rule': {'family': 'inet',
574+
'table': 'openvpn_netfilter',
575+
'chain': '10.20.30.2',
576+
'comment': 'bob:rule3 ACL I HAZ COMMENT',
577+
'expr': [{'match': {
578+
'op': '==',
579+
'left': {'payload': { 'protocol': 'ip', 'field': 'saddr'}},
580+
'right': '1.2.3.4'}},
581+
{'match': {
582+
'op': '==',
583+
'left': {'payload': { 'protocol': 'ip', 'field': 'daddr'}},
584+
'right': {'prefix': {'addr': '5.6.7.10', 'len': 28}}}},
585+
{'match': {
586+
'op': '==',
587+
'left': {'payload': { 'protocol': 'tcp', 'field': 'dport'}},
588+
'right': {'set': [22]}}},
589+
{'accept': None}]}}}]})
590+
566591
in_acl2 = iamvpnlibrary.iamvpnbase.ParsedACL(
567592
rule='rule2', address=IPNetwork('5.6.7.9'),
568593
portstring='80', description='I HAZ COMMENT')

0 commit comments

Comments
 (0)