İptables içinde addrtype'nin tanımı nedir?


11

Bazı bogon ips bırakmak gibi benim filtre zincirimden birinde kural olarak addrtypebirlikte kullanmak istekli -src:

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

Man sayfası şunları söylüyor

addrtype
Bu modül, adres türlerine göre paketleri eşleştirir. Adres türleri çekirdek ağ yığını içinde kullanılır ve adresleri çeşitli gruplara ayırır. Bu grubun tam tanımı, üçüncü katman protokolüne bağlıdır.

Aşağıdaki adres türleri mümkündür:

  • UNSPEC belirtilmemiş bir adres (yani 0.0.0.0)
  • UNICAST tek noktaya yayın adresi
  • Yerel bir adres YEREL
  • Yayın adresini yayınla
  • ANYCAST anycast paketi
  • MULTICAST çok noktaya yayın adresi
  • Kara delik adresi
  • Ulaşılamaz bir adres
  • Yasaklanmış bir adresi yasakla
  • BOŞ FIXME
  • NAT FIXME
  • XRESOLVE

Kesin tanımların ne olduğu açık değildir ve spesifik katman 3 protokolüne bağlı olduğunu söylüyor. Ben böyle düşünüyorum:

  • UNICAST (! YAYIN,! ÇOKLU,! ANKAST)
  • YEREL ( 127.0.0.0/8)
  • YAYIN ( *.*.*.255)
  • ANYCAST ( *.*.*.*)
  • MULTICAST ( 224.0.0.0/4)

Herkes bunun ne anlama geldiğini ve iptables tarafından nasıl uygulandığını net bir şekilde biliyor mu (örneğin, BLACKHOLE'un nerede olduğunu nasıl bilebilir)?


2
LOCALkesinlikle değil 127.0.0.0/8. Ben zor yoldan :( öğrendim ... görünüşte yerel bir adres bir arabirime atanmış herhangi bir adrese karşılık gelir.
0xC0000022L

1
0xC0000022L RFC990 göre, @ 127.0.0.0/8 olan geri döngü için özel olarak ayrılmış, ancak LOKAL sadece bu aralık ile sınırlı değildir.
Qwerty01

Yanıtlar:


3

Çekirdeğin hangi kara delik adres türü olduğunu bilmesinin size bağlı olduğunu düşünüyorum.

Gönderen xt_addrtype.h iptables kaynak kodunda dosyada, şunları görebilirsiniz:

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

Ve içinde rtnetlink.h, aynı tanımı göreceksiniz:

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

Görebilirsiniz iptablesçekirdek tcp ağ yığını ile adres türü aynı tanımı kullanılsın.

Sonra 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.

Bu nedenle, bir ağa bir rotayı ipkomutla tanımlayıp kara delik yolu olarak işaretlediğinizde, çekirdek şimdi bu ağ adresini kara delik türü yapar:

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

1
Sistem başlık dosyalarını gösteriyorsunuz ve bunun yöneticiye bağlı olduğunu mu söylüyorsunuz?
Pavel Šimerda

blackholeAdres türünü söyledim, tüm adres türlerini değil. Ben iptables addrtypeuzantı uzantısı çekirdek ile aynı tanım addrtype kullandığını göstermektedir . Ve adres türünün çekirdek tanımını görebilirsiniz man ip.
cuonglm

Teşekkürler, bu sadece karadelikteki kısmı cevaplıyor. Ips gibi ip komut listeleme denedim ip route list type localama tüm türleri veren unicast dışında boş dize üretir 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. Bunları nasıl yorumlayacağınız hakkında daha fazla bilgi verebilir misiniz? Teşekkürler.
Soru Taşması

1
@cuonglm Bu alt ağı ip route add blackholeengellemek için güvenlik duvarını kullanmanın avantajı nedir? Aynı sonucu elde etmek için işlevsel / performans farkı veya farklı bir yol var mı?
Bratchley

1
@Bratchley: sisteminize bağlıdır, ancak boş tablo genellikle daha iyidir, çünkü rota tablonuz genellikle küçüktür, iptables kuralları genellikle büyük kurallar içerir. Kurallar yoluyla işlem yapmak büyük performans etkisine yol açabilir.
cuonglm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.