Các định nghĩa của addrtype trong iptables là gì?


11

Tôi muốn sử dụng addrtypekết hợp với -srcquy tắc trong một trong các chuỗi bộ lọc của mình như vậy để loại bỏ một số ips bogon:

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

Trang người đàn ông nói như sau

addrtype
Mô-đun này khớp với các gói dựa trên loại địa chỉ của chúng. Các loại địa chỉ được sử dụng trong ngăn xếp mạng kernel và phân loại địa chỉ thành các nhóm khác nhau. Định nghĩa chính xác của nhóm đó phụ thuộc vào giao thức ba lớp cụ thể.

Các loại địa chỉ sau là có thể:

  • UNSPEC một địa chỉ không xác định (ví dụ 0.0.0.0)
  • UNICAST một địa chỉ unicast
  • ĐỊA ĐIỂM một địa chỉ địa phương
  • GIỚI THIỆU một địa chỉ quảng bá
  • BẤT K a gói tin anycast nào
  • ĐA NĂNG một địa chỉ multicast
  • BLACKHOLE một địa chỉ hố đen
  • UNREACHABLE một địa chỉ không thể truy cập
  • PROHIBIT một địa chỉ bị cấm
  • NỀN TẢNG CỐ ĐỊNH
  • NAT FIXME
  • XRESOLVE

Không rõ định nghĩa chính xác là gì và cho biết nó phụ thuộc vào giao thức lớp 3 cụ thể. Đây là điều mà tôi nghĩ:

  • UNICAST (! MÔI GIỚI ,! ĐA NĂNG ,! MỌI NƠI)
  • ĐỊA PHƯƠNG ( 127.0.0.0/8)
  • MÔI GIỚI ( *.*.*.255)
  • MỌI NƠI ( *.*.*.*)
  • ĐA NĂNG ( 224.0.0.0/4)

Có ai có một ý tưởng rõ ràng điều đó có nghĩa là gì và nó được triển khai bởi iptables như thế nào (ví dụ, làm thế nào nó biết BLACKHOLE ở đâu)?


2
LOCALchắc chắn là hầu hết không 127.0.0.0/8. Tôi phát hiện ra một cách khó khăn :( ... hình như một địa chỉ cục bộ đề cập đến bất kỳ địa chỉ nào được gán cho một giao diện.
0xC0000022L

1
@ 0xC0000022L Theo RFC990, 127.0.0.0/8 được dành riêng cho loopback, tuy nhiên LOCAL không giới hạn trong phạm vi đó.
Qwerty01

Câu trả lời:


3

Tôi nghĩ rằng nó phụ thuộc vào bạn để làm cho kernel biết đó là loại địa chỉ lỗ đen.

Từ tệp xt_addrtype.h trong mã nguồn iptables, bạn có thể thấy:

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

Và trong rtnetlink.h, bạn sẽ thấy định nghĩa tương tự:

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

Bạn có thể thấy iptablessử dụng cùng một định nghĩa về loại địa chỉ với ngăn xếp mạng tcp kernel.

Rồi từ 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.

Vì vậy, khi bạn xác định tuyến đến mạng bằng iplệnh và đánh dấu tuyến đó là tuyến lỗ đen, hạt nhân bây giờ sẽ tạo địa chỉ mạng này cho loại lỗ đen:

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

1
Bạn đang hiển thị các tệp tiêu đề hệ thống và nói rằng nó phụ thuộc vào quản trị viên?
Pavel imerda

Tôi nói blackholeloại địa chỉ, không phải tất cả các loại địa chỉ. Tôi chỉ ra rằng iptables addrtypephần mở rộng sử dụng cùng một addrtype định nghĩa với kernel. Và định nghĩa kernel của loại địa chỉ có thể thấy trong man ip.
cuonglm

Cảm ơn, điều đó chỉ trả lời phần trên hố đen. Tôi đã thử liệt kê ips từ lệnh ip như vậy ip route list type localnhưng tất cả các loại đều tạo ra chuỗi rỗng ngoại trừ unicast cung cấp 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. Bạn có thể cung cấp thêm thông tin về cách giải thích những điều này? Cảm ơn.
Câu hỏi tràn

1
@cuonglm lợi thế của việc sử dụng ip route add blackholeso với sử dụng tường lửa để chặn mạng con cụ thể đó là gì? Có sự khác biệt về chức năng / hiệu suất hoặc một cách khác nhau để thực hiện cùng một kết thúc không?
Bratchley 6/10/2015

1
@Bratchley: nó phụ thuộc vào hệ thống của bạn, nhưng tuyến đường null thường tốt hơn, bởi vì bảng tuyến đường của bạn thường nhỏ, trong khi các quy tắc iptables thường chứa rất nhiều quy tắc. Xử lý thông qua các quy tắc có thể dẫn đến tác động hiệu suất rất lớn.
cuonglm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.