Skip to content

ASPA

ASPA draft status

The ASPA standard is still an Internet-Draft and not yet an official RFC.

An ASPA is a cryptographically signed object that allows holders of an Autonomous System Number (ASN) to authorize other ASNs as their provider networks. To use ASPA-filtering you will need a RPKI-Validator like Routinator with ASPA publishing enabled.

Configuration Examples

For BIRD2/3 the functions aspa_check_downstream, aspa_check_upstream( table ) and aspa_check(table, path, is_upstream) exsist.

aspa table aspatable;

# rpki server with aspa enabled is requiered
protocol rpki routinator1 {
  roa4 { table rpki4; };
  roa6 { table rpki6; };
  aspa { table aspatable; };
  remote "rpki1.example.com" port 3323; # replace with your RPKI validator
}

protocol rpki routinator2 {
  roa4 { table rpki4; };
  roa6 { table rpki6; };
  aspa { table aspatable; };
  remote "rpki2.example.com" port 3323; # replace with your RPKI validator
}

# use up ramp mode (Customer to Provider)
function reject_aspa_invalid_upstream()
{
  if aspa_check(aspatable, bgp_path, false) = ASPA_INVALID then {
      print "Reject: ASPA invalid: ", " ", bgp_path;
      reject;
  }
}

# use down ramp mode (Provider to Customer)
function reject_aspa_invalid_downstream()
{
  if aspa_check(aspatable, bgp_path, true) = ASPA_INVALID then {
      print "Reject: ASPA invalid: ", " ", bgp_path;
      reject;
  }
}

protocol bgp upstream {
  ipv4 {
    import filter {
      reject_aspa_invalid_upstream();
      ...
      accept;
    };
  };
  ipv6 {
    import filter {
      reject_aspa_invalid_upstream();
      ...
      accept;
    };
  };
}

protocol bgp downstream {
  ipv4 {
    import filter {
      reject_aspa_invalid_downstream();
      ...
      accept;
    };
  };
  ipv6 {
    import filter {
      reject_aspa_invalid_downstream();
      ...
      accept;
    };
  };
}