Quelles sont les définitions de addrtype dans iptables?

11

Je suis désireux d'utiliser addrtypeen combinaison avec -srcen règle générale dans une de ma chaîne de filtres comme pour déposer quelques ips de 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 fait correspondre les paquets en fonction de leur type d'adresse. Les types d'adresses sont utilisés dans la pile de mise en réseau du noyau et classent 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'adresse suivants sont possibles:

  • UNSPEC une adresse non spécifiée (ie 0.0.0.0)
  • UNICAST une adresse unicast
  • LOCAL une adresse locale
  • DIFFUSER une adresse de diffusion
  • ANYCAST un paquet anycast
  • MULTICAST une adresse multicast
  • BLACKHOLE une adresse blackhole
  • UNREACHABLE une adresse inaccessible
  • INTERDIT une adresse interdite
  • JET FIXME
  • NAT FIXME
  • XRESOLVE

On ne sait pas 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 (! BROADCAST,! MULTICAST,! ANYCAST)
  • LOCAL ( 127.0.0.0/8)
  • DIFFUSION ( *.*.*.255)
  • ANYCAST ( *.*.*.*)
  • MULTIDIFFUSION ( 224.0.0.0/4)

Quelqu'un a-t-il une idée claire de ce que cela signifie et comment il est mis en œuvre par iptables (par exemple, comment il sait où diable est BLACKHOLE)?

Débordement de question
la source
2
LOCALn'est certainement pas 127.0.0.0/8. J'ai découvert à la dure :( ... apparemment, une adresse locale fait référence à toute adresse affectée à une interface.
0xC0000022L
1
@ 0xC0000022L Selon la RFC990, 127.0.0.0/8 est réservé spécifiquement au bouclage, mais LOCAL n'est pas limité à cette plage uniquement.
Qwerty01

Réponses:

3

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

Du fichier xt_addrtype.h dans le code source 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 iptablesutiliser la même définition de type d'adresse avec la pile de mise en réseau TCP du noyau.

Puis de 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
               attribute 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 ipcommande et la marquez comme une route de trou noir, le noyau fait maintenant ce type de trou noir d'adresse réseau:

ip route add blackhole X.X.X.X/24
cuonglm
la source
1
Vous montrez des fichiers d'en-tête système et dites que cela dépend de l'administrateur?
Pavel Šimerda
J'ai dit le blackholetype d'adresse, pas tous les types d'adresse. Je montre que l' iptables addrtypeextension utilise la même définition addrtype avec le noyau. Et la définition du type d'adresse du noyau peut voir dans man ip.
cuonglm
Merci, cela ne répond qu'à la partie sur blackhole. J'ai essayé de lister la commande ips from ip comme ça ip route list type localmais tous les types produisent une chaîne vide à l'exception de la monodiffusion qui donne default via 192.168.1.1 dev eth0 proto static metric 1024 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2. Pouvez-vous fournir plus d'informations sur la façon de les interpréter? Merci.
Débordement de questions
1
@cuonglm quel est l'avantage d'utiliser ip route add blackholepar rapport au pare-feu pour bloquer ce sous-réseau particulier? Existe-t-il une différence fonctionnelle / de performance ou une manière différente d'atteindre le même objectif?
Bratchley
1
@Bratchley: cela dépend de votre système, mais la route nulle est souvent meilleure, car votre table de routage est souvent petite, tandis que les règles iptables contiennent souvent d'énormes règles. Le traitement des règles peut avoir un impact énorme sur les performances.
cuonglm