Was sind die Definitionen von addrtype in iptables?

11

Ich möchte addrtypein Kombination mit -srcin der Regel in einer meiner Filterketten verwenden, um ein paar falsche IPs fallen zu lassen:

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

Die Manpage sagt Folgendes

addrtype
Dieses Modul vergleicht Pakete basierend auf ihrem Adresstyp . Adresstypen werden im Kernel-Netzwerkstapel verwendet und kategorisieren Adressen in verschiedene Gruppen. Die genaue Definition dieser Gruppe hängt vom spezifischen Layer-3-Protokoll ab.

Folgende Adresstypen sind möglich:

  • UNSPEC eine nicht spezifizierte Adresse (dh 0.0.0.0)
  • UNICAST eine Unicast-Adresse
  • LOKAL eine lokale Adresse
  • BROADCAST eine Broadcast-Adresse
  • ANYCAST ein Anycast-Paket
  • MULTICAST eine Multicast-Adresse
  • BLACKHOLE eine Blackhole-Adresse
  • UNREACHABLE eine nicht erreichbare Adresse
  • VERBOTEN Sie eine verbotene Adresse
  • FIXME WERFEN
  • NAT FIXME
  • XRESOLVE

Es ist nicht klar, was die genauen Definitionen sind und sagt, dass es vom spezifischen Schicht-3-Protokoll abhängt. Das ist was ich denke:

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

Hat jemand eine klare Vorstellung davon, was das bedeutet und wie es von iptables implementiert wird (zum Beispiel, woher es weiß, wo zum Teufel BLACKHOLE ist)?

Fragenüberlauf
quelle
2
LOCAList ganz sicher nicht 127.0.0.0/8. Ich habe es auf die harte
Tour herausgefunden
1
@ 0xC0000022L Laut RFC990 127.0.0.0/8 ist es speziell für Loopback reserviert, LOCAL ist jedoch nicht nur auf diesen Bereich beschränkt.
Qwerty01

Antworten:

3

Ich denke, es hängt von Ihnen ab, ob der Kernel weiß, welcher Blackhole-Adresstyp ist.

In der Datei xt_addrtype.h im Quellcode von iptables können Sie Folgendes sehen:

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

Und in sehen rtnetlink.hSie die gleiche Definition:

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

Sie können sehen, iptablesdass die gleiche Definition des Adresstyps mit dem Kernel-TCP-Netzwerkstapel verwendet wird.

Dann von 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.

Wenn Sie also eine Route zu einem Netzwerk per ipBefehl definieren und als Blackhole-Route markieren, erstellt der Kernel jetzt den Blackhole-Typ für diese Netzwerkadresse:

ip route add blackhole X.X.X.X/24
cuonglm
quelle
1
Sie zeigen Systemheaderdateien an und sagen, dass dies vom Administrator abhängt?
Pavel Šimerda
Ich sagte den blackholeAdresstyp, nicht alle Adresstypen. Ich zeige, dass die iptables addrtypeErweiterung dieselbe Definition addrtype mit dem Kernel verwendet. Und die Kernel-Definition des Adresstyps kann in sehen man ip.
Cuonglm
Danke, das beantwortet nur den Teil über Schwarzes Loch. Ich habe versucht, den Befehl ips from ip wie folgt aufzulisten, ip route list type localaber alle Typen erzeugen leere Zeichenfolgen mit Ausnahme von Unicast, das gibt 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. Können Sie weitere Informationen zur Interpretation dieser Informationen bereitstellen? Vielen Dank.
Fragenüberlauf
1
@cuonglm Was ist der Vorteil ip route add blackholegegenüber der Verwendung der Firewall zum Blockieren dieses bestimmten Subnetzes? Gibt es einen Funktions- / Leistungsunterschied oder einen anderen Weg, um dasselbe Ziel zu erreichen?
Bratchley
1
@Bratchley: Es hängt von Ihrem System ab, aber die Nullroute ist oft besser, da Ihre Routentabelle oft klein ist, während iptables-Regeln oft große Regeln enthalten. Die Verarbeitung durch die Regeln kann zu enormen Auswirkungen auf die Leistung führen.
Cuonglm