Quali sono le definizioni di addrtype in iptables?


11

Sono desideroso di utilizzare addrtypein combinazione con -srcuna regola in una delle mie catene di filtri in questo modo per rilasciare alcuni bogon ips:

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

La pagina man dice quanto segue

addrtype
Questo modulo abbina i pacchetti in base al loro tipo di indirizzo. I tipi di indirizzo sono utilizzati nello stack di rete del kernel e categorizzano gli indirizzi in vari gruppi. L'esatta definizione di quel gruppo dipende dallo specifico protocollo di livello tre.

Sono possibili i seguenti tipi di indirizzo:

  • Utilizzare un indirizzo non specificato (es. 0.0.0.0)
  • UNICAST un indirizzo unicast
  • LOCALE un indirizzo locale
  • BROADCAST un indirizzo di trasmissione
  • QUALUNQUE un pacchetto anycast
  • MULTICAST un indirizzo multicast
  • BLACKHOLE un indirizzo blackhole
  • Irraggiungibile un indirizzo irraggiungibile
  • VIETARE un indirizzo proibito
  • THROW FIXME
  • NAT FIXME
  • XRESOLVE

Non è chiaro quali siano le definizioni esatte e afferma che dipende dallo specifico protocollo di livello 3. Questo è quello che penso:

  • UNICAST (! BROADCAST,! MULTICAST,! ANYCAST)
  • LOCALE ( 127.0.0.0/8)
  • BROADCAST ( *.*.*.255)
  • ANYCAST ( *.*.*.*)
  • MULTICAST ( 224.0.0.0/4)

Qualcuno ha un'idea chiara di cosa significhi e come sia implementato da iptables (ad esempio, come sa dove diavolo è BLACKHOLE)?


2
LOCALcertamente no 127.0.0.0/8. Ho scoperto nel modo più duro :( ... apparentemente un indirizzo locale si riferisce a qualsiasi indirizzo assegnato a un'interfaccia.
0xC0000022L

1
@ 0xC0000022L Secondo RFC990, 127.0.0.0/8 è riservato in modo specifico per il loopback, tuttavia LOCAL non si limita a tale intervallo.
Qwerty01

Risposte:


3

Penso che dipende da te far sapere al kernel qual è il tipo di indirizzo blackhole.

Dal file xt_addrtype.h nel codice sorgente di iptables, puoi vedere:

/* 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,                                             
};

E in rtnetlink.h, vedrai la stessa definizione:

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                                                                   
};

Puoi vedere iptablesusare la stessa definizione di tipo di indirizzo con lo stack di rete del kernel tcp.

Quindi da 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.

Quindi, quando si definisce un percorso verso una rete tramite ipcomando e lo si contrassegna come un percorso blackhole, il kernel ora rende questo indirizzo di rete tipo blackhole:

ip route add blackhole X.X.X.X/24

1
Stai mostrando i file di intestazione del sistema e stai dicendo che dipende dall'amministratore?
Pavel Šimerda,

Ho detto il blackholetipo di indirizzo, non tutti i tipi di indirizzo. iptables addrtypeMostro che l' estensione usa la stessa definizione addrtype con il kernel. E la definizione del kernel del tipo di indirizzo può vedere in man ip.
cuonglm,

Grazie, questo risponde solo alla parte sul buco nero. Ho provato a elencare gli ips dal comando ip in questo modo, ip route list type localma tutti i tipi producono stringhe vuote tranne unicast che dà 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. Potete fornire maggiori informazioni su come interpretarli? Grazie.
Domanda Overflow

1
@cuonglm qual è il vantaggio dell'utilizzo ip route add blackholerispetto all'utilizzo del firewall per bloccare quella particolare sottorete? Esiste una differenza funzionale / prestazionale o un modo diverso di raggiungere lo stesso obiettivo?
Bratchley,

1
@Bratchley: dipende dal tuo sistema, ma la route null è spesso migliore, perché la tabella delle rotte è spesso piccola, mentre le regole di iptables contengono spesso enormi regole. L'elaborazione delle regole può comportare un impatto notevole sulle prestazioni.
cuonglm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.