Je suis désireux d'utiliser addrtype
en combinaison avec -src
en règle générale dans l'une de mes strings de filters comme si pour supprimer quelques ips bogon:
-A INPUT -p tcp --dport 80 -m addrtype --src-type UNICAST ! -s 127.0.0.0/8 -j WEB
La page de manuel dit ce qui suit
addrtype
Ce module correspond aux packages en fonction de leur type d'adresse. Les types d'adresses sont utilisés dans la stack réseau du kernel et classnt les adresses en différents groupes. La définition exacte de ce groupe dépend du protocole spécifique de la couche trois.Les types d'adresses suivants sont possibles:
- iptables sur le nœud de sortie tor
- Pourquoi ma règle iptables ne fonctionne-t-elle pas?
- Ne pas bloquer la force brute ssh avec iptables
- redirection de port vers l'application dans l'espace de noms du réseau avec vpn
- Est-il préférable de définir des règles dans ip6tables ou de désactiver ipv6?
- UNSPEC une adresse non spécifiée (c.-à-d. 0.0.0.0)
- UNICAST une adresse monodiffusion
- LOCAL une adresse locale
- DIFFUSION d'une adresse de diffusion
- ANYCAST un package anycast
- MULTIDIFFUSION une adresse de multidiffusion
- BLACKHOLE une adresse blackhole
- UNREACHABLE une adresse inaccessible
- INTERDIT une adresse interdite
- FIXER
- NAT FIXME
- XRESOLVE
Il n'est pas clair sur quelles sont les définitions exactes et dit que cela dépend du protocole spécifique de la couche 3. C'est ce que je pense:
127.0.0.0/8
) *.*.*.255
) *.*.*.*
) 224.0.0.0/4
) Est-ce que quelqu'un a une idée claire de ce que cela signifie et de la façon dont il est implémenté par iptables (par exemple, comment il sait où est BLACKHOLE)?
Je pense que cela dépend de vous pour que le kernel sache quel est le type d'adresse blackhole.
Du file xt_addrtype.h dans le code source d'iptables, vous pouvez voir:
/* 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, };
Et dans rtnetlink.h
, vous verrez la même définition:
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 };
Vous pouvez voir que iptables
utilise la même définition de type d'adresse avec la stack de mise en réseau kernel tcp.
Puis de l' 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 atsortingbute 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.
Ainsi, lorsque vous définissez une route vers un réseau par la command ip
et que vous la marquez en tant que route blackhole, le kernel rend cette adresse réseau type blackhole:
ip route add blackhole XXXX/24