Quelles sont les définitions de addrtype dans iptables?

Je suis désireux d'utiliser addrtype en combinaison avec -src en règle générale dans l'une de mes strings de filters comme si pour supprimer quelques ips bogon:

 -A INPUT -p tcp --dport 80 -m addrtype --src-type UNICAST ! -s 127.0.0.0/8 -j WEB 

La page de manuel dit ce qui suit

addrtype
Ce module correspond aux packages en fonction de leur type d'adresse. Les types d'adresses sont utilisés dans la stack réseau du kernel et classnt les adresses en différents groupes. La définition exacte de ce groupe dépend du protocole spécifique de la couche trois.

Les types d'adresses suivants sont possibles:

  • UNSPEC une adresse non spécifiée (c.-à-d. 0.0.0.0)
  • UNICAST une adresse monodiffusion
  • LOCAL une adresse locale
  • DIFFUSION d'une adresse de diffusion
  • ANYCAST un package anycast
  • MULTIDIFFUSION une adresse de multidiffusion
  • BLACKHOLE une adresse blackhole
  • UNREACHABLE une adresse inaccessible
  • INTERDIT une adresse interdite
  • FIXER
  • NAT FIXME
  • XRESOLVE

Il n'est pas clair sur quelles sont les définitions exactes et dit que cela dépend du protocole spécifique de la couche 3. C'est ce que je pense:

  • UNICAST (DIFFUSION, MULTIDIFFUSION, ANYCAST)
  • LOCAL ( 127.0.0.0/8 )
  • DIFFUSION ( *.*.*.255 )
  • ANYCAST ( *.*.*.* )
  • MULTIDIFFUSION ( 224.0.0.0/4 )

Est-ce que quelqu'un a une idée claire de ce que cela signifie et de la façon dont il est implémenté par iptables (par exemple, comment il sait où est BLACKHOLE)?

Je pense que cela dépend de vous pour que le kernel sache quel est le type d'adresse blackhole.

Du file xt_addrtype.h dans le code source d'iptables, vous pouvez voir:

 /* rtn_type enum values from rtnetlink.h, but shifted */ enum { XT_ADDRTYPE_UNSPEC = 1 << 0, XT_ADDRTYPE_UNICAST = 1 << 1, /* 1 << RTN_UNICAST */ XT_ADDRTYPE_LOCAL = 1 << 2, /* 1 << RTN_LOCAL, etc */ XT_ADDRTYPE_BROADCAST = 1 << 3, XT_ADDRTYPE_ANYCAST = 1 << 4, XT_ADDRTYPE_MULTICAST = 1 << 5, XT_ADDRTYPE_BLACKHOLE = 1 << 6, XT_ADDRTYPE_UNREACHABLE = 1 << 7, XT_ADDRTYPE_PROHIBIT = 1 << 8, XT_ADDRTYPE_THROW = 1 << 9, XT_ADDRTYPE_NAT = 1 << 10, XT_ADDRTYPE_XRESOLVE = 1 << 11, }; 

Et dans rtnetlink.h , vous verrez la même définition:

 enum { RTN_UNSPEC, RTN_UNICAST, /* Gateway or direct route */ RTN_LOCAL, /* Accept locally */ RTN_BROADCAST, /* Accept locally as broadcast, send as broadcast */ RTN_ANYCAST, /* Accept locally as broadcast, but send as unicast */ RTN_MULTICAST, /* Multicast route */ RTN_BLACKHOLE, /* Drop */ RTN_UNREACHABLE, /* Destination is unreachable */ RTN_PROHIBIT, /* Administratively prohibited */ RTN_THROW, /* Not in this table */ RTN_NAT, /* Translate this address */ RTN_XRESOLVE, /* Use external resolver */ __RTN_MAX }; 

Vous pouvez voir que iptables utilise la même définition de type d'adresse avec la stack de mise en réseau kernel tcp.

Puis de l' man ip :

 Route types: unicast - the route entry describes real paths to the destinations covered by the route prefix. unreachable - these destinations are unreachable. Packets are discarded and the ICMP message host unreachable is generated. The local senders get an EHOSTUNREACH error. blackhole - these destinations are unreachable. Packets are discarded silently. The local senders get an EINVAL error. prohibit - these destinations are unreachable. Packets are discarded and the ICMP message communication administratively prohibited is generated. The local senders get an EACCES error. local - the destinations are assigned to this host. The packets are looped back and delivered locally. broadcast - the destinations are broadcast addresses. The packets are sent as link broadcasts. throw - a special control route used together with policy rules. If such a route is selected, lookup in this table is termi‐ nated pretending that no route was found. Without policy routing it is equivalent to the absence of the route in the routing table. The packets are dropped and the ICMP message net unreachable is generated. The local senders get an ENETUNREACH error. nat - a special NAT route. Destinations covered by the prefix are considered to be dummy (or external) addresses which require translation to real (or internal) ones before forwarding. The addresses to translate to are selected with the atsortingbute Warning: Route NAT is no longer supported in Linux 2.6. via. anycast - not implemented the destinations are anycast addresses assigned to this host. They are mainly equivalent to local with one difference: such addresses are invalid when used as the source address of any packet. multicast - a special type used for multicast routing. It is not present in normal routing tables. 

Ainsi, lorsque vous définissez une route vers un réseau par la command ip et que vous la marquez en tant que route blackhole, le kernel rend cette adresse réseau type blackhole:

 ip route add blackhole XXXX/24