Regela

pyroute2 nftables expressions

Jun 26th, 2023
2,423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.57 KB | None | 0 0
  1.  
  2. from pyroute2.common import hexload
  3. def oifname(name: str):
  4.     return ({
  5.                 'attrs': [
  6.                     ('NFTA_EXPR_NAME',
  7.                      'meta'),
  8.                     ('NFTA_EXPR_DATA',
  9.                      {
  10.                          'attrs': [
  11.                              ('NFTA_META_KEY',
  12.                               7),
  13.                              ('NFTA_META_DREG',
  14.                               0x01)
  15.                          ]
  16.                      })
  17.                 ]
  18.             },
  19.             {
  20.                 'attrs': [
  21.                     ('NFTA_EXPR_NAME',
  22.                      'cmp'),
  23.                     ('NFTA_EXPR_DATA',
  24.                      {
  25.                          'attrs': [
  26.                              ('NFTA_CMP_SREG',
  27.                               0x01),
  28.                              ('NFTA_CMP_OP',
  29.                               0),
  30.                              ('NFTA_CMP_DATA',
  31.                               {
  32.                                   'attrs': [
  33.                                       ('NFTA_DATA_VALUE',
  34.                                        name)
  35.                                   ]
  36.                               })
  37.                          ]
  38.                      })
  39.                 ]
  40.             })
  41.  
  42.  
  43. def iifname(name):
  44.     return ({
  45.                 'attrs': [
  46.                     ('NFTA_EXPR_NAME',
  47.                      'meta'),
  48.                     ('NFTA_EXPR_DATA',
  49.                      {
  50.                          'attrs': [
  51.                              ('NFTA_META_KEY',
  52.                               6),
  53.                              ('NFTA_META_DREG',
  54.                               0x01)
  55.                          ]
  56.                      })
  57.                 ]
  58.             },
  59.             {
  60.                 'attrs': [
  61.                     ('NFTA_EXPR_NAME',
  62.                      'cmp'),
  63.                     ('NFTA_EXPR_DATA',
  64.                      {
  65.                          'attrs': [
  66.                              ('NFTA_CMP_SREG',
  67.                               0x01),
  68.                              ('NFTA_CMP_OP',
  69.                               0),
  70.                              ('NFTA_CMP_DATA',
  71.                               {
  72.                                   'attrs': [
  73.                                       ('NFTA_DATA_VALUE',
  74.                                        name)
  75.                                   ]
  76.                               })
  77.                          ]
  78.                      })
  79.                 ]
  80.             },)
  81.  
  82.  
  83. def counter():
  84.     return ({
  85.                 'attrs': [
  86.                     ('NFTA_EXPR_NAME',
  87.                      'counter'),
  88.                     ('NFTA_EXPR_DATA',
  89.                      {
  90.                          'attrs': [
  91.                              ('NFTA_COUNTER_BYTES',
  92.                               0),
  93.                              ('NFTA_COUNTER_PACKETS',
  94.                               0)
  95.                          ]
  96.                      })
  97.                 ]
  98.             },)
  99.  
  100.  
  101. def masquerade():
  102.     return ({
  103.                 'attrs': [
  104.                     ('NFTA_EXPR_NAME',
  105.                      'masq'),
  106.                     ('NFTA_EXPR_DATA',
  107.                      {
  108.                          'attrs': [
  109.  
  110.                          ]
  111.                      })
  112.                 ]
  113.             },)
  114.  
  115.  
  116. def l4proto(proto: str = 'tcp'):
  117.     match proto:
  118.         case 'tcp':
  119.             proto = b'\x06'
  120.         case 'udp':
  121.             proto = b'\x11'
  122.         case _:
  123.             proto = b'\x00'
  124.  
  125.     return ({
  126.                 'attrs': [
  127.                     ('NFTA_EXPR_NAME',
  128.                      'meta'),
  129.                     ('NFTA_EXPR_DATA',
  130.                      {
  131.                          'attrs': [
  132.                              ('NFTA_META_KEY',
  133.                               16),
  134.                              ('NFTA_META_DREG',
  135.                               0x01)
  136.                          ]
  137.                      })
  138.                 ]
  139.             },
  140.             {
  141.                 'attrs': [
  142.                     ('NFTA_EXPR_NAME',
  143.                      'cmp'),
  144.                     ('NFTA_EXPR_DATA',
  145.                      {
  146.                          'attrs': [
  147.                              ('NFTA_CMP_SREG',
  148.                               0x01),
  149.                              ('NFTA_CMP_OP',
  150.                               0),
  151.                              ('NFTA_CMP_DATA',
  152.                               {
  153.                                   'attrs': [
  154.                                       ('NFTA_DATA_VALUE',
  155.                                        proto)
  156.                                   ]
  157.                               })
  158.                          ]
  159.                      })
  160.                 ]
  161.             },)
  162.  
  163.  
  164. def accept():
  165.     return ({
  166.                 'attrs': [
  167.                     ('NFTA_EXPR_NAME',
  168.                      'immediate'),
  169.                     ('NFTA_EXPR_DATA',
  170.                      {
  171.                          'attrs': [
  172.                              ('NFTA_IMMEDIATE_DREG',
  173.                               0x00),
  174.                              ('NFTA_IMMEDIATE_DATA',
  175.                               {
  176.                                   'attrs': [
  177.                                       ('NFTA_DATA_VERDICT',
  178.                                        {
  179.                                            'attrs': [
  180.                                                ('NFTA_VERDICT_CODE',
  181.                                                 1)
  182.                                            ]
  183.                                        })
  184.                                   ]
  185.                               })
  186.                          ]
  187.                      })
  188.                 ]
  189.             },)
  190.  
  191.  
  192. def convert_to_hex(number):
  193.     hex_string = '00:00:ff:ff:'
  194.     hex_string += format(number, '02x') + ':'
  195.     hex_string += format(number, '02x') + ':'
  196.     hex_string += '00:00:00:00:00:00:00:00'
  197.     return hex_string
  198.  
  199.  
  200. def udp_dport(port=80):
  201.     return ({
  202.                 'attrs': [
  203.                     ('NFTA_EXPR_NAME',
  204.                      'match'),
  205.                     ('NFTA_EXPR_DATA',
  206.                      {
  207.                          'attrs': [
  208.                              ('NFTA_MATCH_NAME',
  209.                               'udp'),
  210.                              ('NFTA_MATCH_REV',
  211.                               0),
  212.                              ('NFTA_MATCH_INFO',
  213.                               b'\x00\x00\xff\xff5\x005\x00\x00\x00\x00\x00\x00\x00\x00\x00')
  214.                          ]
  215.                      })
  216.                 ]
  217.             },)
Advertisement
Add Comment
Please, Sign In to add comment