Jakie są definicje addrtype w iptables?

11

Jestem chętny do użycia addrtypew połączeniu z -srcregułą w jednym z moich łańcuchów filtrów, aby upuścić trochę bogon ips:

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

Strona podręcznika zawiera następujące informacje

addrtype
Ten moduł dopasowuje pakiety na podstawie ich typu adresu. Typy adresów są używane w stosie sieciowym jądra i dzielą adresy na różne grupy. Dokładna definicja tej grupy zależy od konkretnego protokołu trzeciej warstwy.

Możliwe są następujące typy adresów:

  • UNSPEC nieokreślony adres (tj. 0.0.0.0)
  • UNICAST adres emisji pojedynczej
  • LOKALNY adres lokalny
  • BROADCAST adres emisji
  • ANYCAST anycast pack
  • MULTICAST adres multiemisji
  • BLACKHOLE adres czarnej dziury
  • UNREACHABLE nieosiągalny adres
  • ZABRONIA zabronionego adresu
  • Rzuć FIXME
  • NAT FIXME
  • XRESOLVE

Nie jest jasne, jakie są dokładne definicje, i mówi, że zależy to od konkretnego protokołu warstwy 3. To jest to, co myślę:

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

Czy ktoś ma jasne pojęcie, co to znaczy i jak jest implementowany przez iptables (na przykład, skąd wie, gdzie, u diabła, jest BLACKHOLE)?

Przepełnienie pytania
źródło
2
LOCALz pewnością nie jest 127.0.0.0/8. Dowiedziałem się na własnej skórze :( ... najwyraźniej adres lokalny odnosi się do dowolnego adresu przypisanego do interfejsu.
0xC0000022L
1
@ 0xC0000022L Według RFC990, 127.0.0.0/8 jest zarezerwowany specjalnie dla sprzężenia zwrotnego, jednak LOKALNY nie ogranicza się tylko do tego zakresu.
Qwerty01

Odpowiedzi:

3

Myślę, że to zależy od ciebie, aby jądro wiedziało, który typ adresu jest czarnej dziury.

Z pliku xt_addrtype.h w kodzie źródłowym iptables można zobaczyć:

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

I rtnetlink.hzobaczysz tę samą definicję:

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

Możesz zobaczyć iptablesużycie tej samej definicji typu adresu w stosie sieciowym jądra TCP.

Następnie z 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.

Kiedy więc zdefiniujesz trasę do sieci za pomocą ippolecenia i oznaczysz ją jako trasę czarnej dziury, jądro uczyni teraz ten adres sieciowy typem czarnej dziury:

ip route add blackhole X.X.X.X/24
Cuonglm
źródło
1
Wyświetlasz pliki nagłówków systemowych i mówisz, że to zależy od administratora?
Pavel Šimerda
I powiedział, że blackholetyp adresu, nie wszyscy typ adresu. iptables addrtypePokazuję, że rozszerzenie używa tego samego addrtype definicji z jądrem. I definicja jądra typu adresu można zobaczyć w man ip.
cuonglm
Dzięki, że odpowiada to tylko na część blackhole. Próbowałem wyświetlić listę ips z polecenia ip w ten sposób, ip route list type localale wszystkie typy generują pusty ciąg z wyjątkiem emisji pojedynczej, która daje 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. Czy możesz podać więcej informacji na temat ich interpretacji? Dzięki.
Przepełnienie pytania
1
@cuonglm jaka jest zaleta ip route add blackholekorzystania z zapory sieciowej w celu zablokowania tej konkretnej podsieci? Czy istnieje różnica funkcjonalna / wydajnościowa lub inny sposób osiągnięcia tego samego celu?
Bratchley,
1
@Bratchley: zależy to od twojego systemu, ale trasa zerowa jest często lepsza, ponieważ twoja tabela tras jest często niewielka, podczas gdy reguły iptables często zawierają wiele reguł. Przetwarzanie według reguł może mieć ogromny wpływ na wydajność.
cuonglm,