Які є визначення типу addrtype в iptables?


11

Я прагну використовувати addrtypeв поєднанні з, -srcяк правило, в одному з моїх фільтр-ланцюгів, як щоб випустити кілька ips:

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

На сторінці чоловіка написано наступне

addrtype
Цей модуль відповідає пакетам на основі типу адреси. Типи адрес використовуються в стеку мережевого ядра і класифікують адреси в різні групи. Точне визначення цієї групи залежить від конкретного протоколу три рівня.

Можливі такі типи адрес:

  • UNSPEC не вказана адреса (тобто 0.0.0.0)
  • UNICAST - одноадресна адреса
  • LOCAL - місцева адреса
  • ВІДКРИТИ адресу трансляції
  • БУДЬ-ЯКОГО будь-який пакет передачі
  • MULTICAST багатоадресна адреса
  • BLACKHOLE адреса чорного отвору
  • Недоступна недосяжна адреса
  • ЗАБРАНИТИ заборонену адресу
  • КРІШИЙ ФІКСМ
  • NAT FIXME
  • XRESOLVE

Не зрозуміло, які саме є визначення, і говорить, що це залежить від конкретного протоколу 3 рівня. Ось що я думаю:

  • UNICAST (! BROADCAST,! MULTICAST,! ANYCAST)
  • LOCAL ( 127.0.0.0/8)
  • ПОДРОБНИЙ ( *.*.*.255)
  • АНІКАСТ ( *.*.*.*)
  • МУЛЬТИКАСТ ( 224.0.0.0/4)

Хтось має чітке уявлення про те, що це означає і як це реалізується iptables (наприклад, як він знає, де, чорт, чорний)?


2
LOCALце, звичайно, ні 127.0.0.0/8. Я виявив важкий шлях :( ... мабуть, локальна адреса посилається на будь-яку адресу, призначену для інтерфейсу.
0xC0000022L

1
@ 0xC0000022L Згідно RFC990, 127.0.0.0/8 буде зарезервований спеціально для шлейфу, проте LOCAL не обмежуються тільки цим діапазоном.
Qwerty01

Відповіді:


3

Я думаю, що саме від вас залежить, щоб ядро ​​знало, що таке адреса blackhole.

З файлу xt_addrtype.h у вихідному коді iptables ви можете побачити:

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

І в rtnetlink.h, ви побачите те саме визначення:

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

Ви можете бачити iptablesвикористання того ж визначення типу адреси з мережевим стеком ядра tcp.

Потім від 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.

Отже, коли ви визначаєте маршрут до мережі ipкомандою та позначаєте її як маршрут чорного отвору, ядро ​​тепер зробить тип мережевої адреси чорним отвором:

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

1
Ви показуєте файли заголовків системи та говорите, що це залежить від адміністратора?
Павло Шімерда

Я сказав blackholeтип адреси, не весь тип адреси. Я показую, що в iptables addrtypeрозширенні використовується однаковий додаток визначення з ядром. І визначення ядра типу адреси можна побачити в man ip.
cuonglm

Дякую, що відповідає лише на частину чорного отвору. Я спробував перерахувати ips з ip команди так, ip route list type localале всі типи видають порожню рядок, крім unicast, який дає 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. Чи можете ви надати більше інформації про те, як їх інтерпретувати? Спасибі.
Переповнення запитань

1
@cuonglm, яка перевага ip route add blackholeвід використання брандмауера для блокування конкретної підмережі? Чи є функціональна різниця / продуктивність чи інший спосіб досягти того самого цілі?
Братчлі

1
@Bratchley: це залежить від вашої системи, але нульовий маршрут часто краще, тому що таблиця маршруту часто мала, тоді як правила iptables часто містять величезну кількість правил. Обробка за допомогою правил може призвести до величезного впливу на продуктивність.
cuonglm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.