iptablesでaddrtypeの定義は何ですか?

iptablesでaddrtypeの定義は何ですか?

addrtype私はこれを私のフィルタチェーンの1つに組み合わせて、次のいくつかのBogon IPを削除したいと思います。-src

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

マニュアルページは以下を示しています

住所タイプ
このモジュールは、アドレスの種類に応じてパケットを照合します。アドレスタイプはカーネルネットワークスタックで使用され、アドレスを別のグループにグループ化します。このグループの正確な定義は、特定のレイヤ3プロトコルによって異なります。

次のアドレスタイプが可能です。

  • UNSPEC 指定されていないアドレス (例: 0.0.0.0)
  • UNICAST ユニキャストアドレス
  • LOCAL ローカルアドレス
  • BROADCAST放送アドレス
  • ANYCAST エニーキャストパケット
  • MULTICASTマルチキャストアドレス
  • ブラックホールブラックホールアドレス
  • UNREACHABLE 接続できないアドレス
  • PROHIBIT禁止アドレス
  • 私を直して
  • NATの回復
  • 解決策

特定のレイヤ3プロトコルによって異なるという点で、正確な定義が何であるかは不明です。そう思います:

  • ユニキャスト(!ブロードキャスト、!マルチキャスト、!ANYCAST)
  • 地元の( 127.0.0.0/8)
  • 放送(*.*.*.255
  • エニーキャスト( *.*.*.*)
  • マルチキャスト( 224.0.0.0/4)

これが何を意味するのか、そしてiptablesがこれをどのように実装しているのかを知っている人はいますか(例えば、ブラックホールが実際にどこにあるのか、どうすればわかりますか?)

ベストアンサー1

私はそれがブラックホールのアドレスタイプが何であるかをカーネルに伝えることに依存していると思います。

~からxt_addrtype.hiptablesのソースコードでファイルを見ると、次のことがわかります。

/* 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

おすすめ記事