คำจำกัดความของ addrtype ใน iptables คืออะไร


11

ฉันกระตือรือร้นที่จะใช้addrtypeร่วมกับ-srcกฎในหนึ่งในห่วงโซ่ตัวกรองของฉันเช่นเพื่อที่จะวาง ips bogon:

-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 ที่อยู่ท้องถิ่น
  • ออกอากาศที่อยู่ออกอากาศ
  • ANYCAST แพ็กเก็ต anycast
  • MULTICAST ที่อยู่แบบหลายผู้รับ
  • BLACKHOLE ที่อยู่ blackhole
  • ไม่สามารถเข้าถึงที่อยู่ที่ไม่สามารถเข้าถึงได้
  • PROHIBIT ที่อยู่ห้าม
  • โยนแก้ไข
  • แก้ไข NAT
  • XRESOLVE

มันไม่ชัดเจนในสิ่งที่คำจำกัดความที่แน่นอนและบอกว่ามันขึ้นอยู่กับโปรโตคอลเลเยอร์ 3 ที่เฉพาะเจาะจง นี่คือสิ่งที่ฉันคิดว่า:

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

ใครบ้างมีความคิดที่ชัดเจนความหมายและวิธีการใช้งานโดย iptables (ตัวอย่างเช่นมันรู้ได้อย่างไรว่านรกอยู่ที่ไหน BLACKHOLE)?


2
LOCAL127.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คำสั่งและทำเครื่องหมายว่าเป็นเส้นทาง Blackhole เคอร์เนลจะทำให้ที่อยู่เครือข่ายประเภท Blackhole นี้:

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

1
คุณกำลังแสดงไฟล์ส่วนหัวของระบบและบอกว่ามันขึ้นอยู่กับผู้ดูแลระบบ?
Pavel Šimerda

ฉันบอกว่าที่blackholeอยู่ไม่ใช่ประเภทที่อยู่ทั้งหมด ฉันแสดงให้เห็นว่าiptables addrtypeส่วนขยายใช้คำนิยาม addrtype เดียวกันกับเคอร์เนล และคำจำกัดความเคอร์เนลของประเภทที่อยู่สามารถดูman ipมา
cuonglm

ขอบคุณที่ตอบเฉพาะส่วนที่ blackhole ฉันพยายามรายการ 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กับการใช้ไฟร์วอลล์เพื่อบล็อกซับเน็ตนั้นคืออะไร มีความแตกต่างด้านหน้าที่ / ประสิทธิภาพหรือวิธีอื่นในการบรรลุจุดสิ้นสุดเดียวกันหรือไม่?
Bratchley

1
@ แบรดลีย์: มันขึ้นอยู่กับระบบของคุณ แต่เส้นทางที่ไม่มีค่ามักจะดีกว่าเพราะตารางเส้นทางของคุณมักจะเล็กในขณะที่กฎ iptables มักจะมีกฎจำนวนมาก การประมวลผลผ่านกฎสามารถนำไปสู่ผลกระทบต่อประสิทธิภาพอย่างมาก
cuonglm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.