Pourquoi ma règle iptables ne fonctionne-t-elle pas?

9

J'ai deux interfaces sur mon VPS: eth0et eth0:0. Je veux bloquer les paquets entrants sur le port 80 en eth0:0utilisant iptables. J'ai essayé, mais cela ne fonctionne pas:

iptables -A INPUT -i "eth0:0" -p tcp --destination-port 80 -j DROP

Si je change eth0:0de eth0cela fonctionne correctement. Quel est le problème?

sinoohe
la source
4
J'ai résolu ma question de cette façon: mon interface était virtuelle donc iptables ne pouvait pas y accéder, j'ai donc bloqué l'interface par l'adresse IP de mon interface et non par le nom de l'interface ma commande est: iptables -A INPUT -p tcp --dport 80 -d {ETH0: 0's IP} -j
REJECT

Réponses:

6

L'histoire courte: la façon dont vous avez fait cela est correcte (selon votre commentaire à la question).

La longue histoire: sous Linux, un `` périphérique '' réseau appelé foo:barest un alias de `` foo '' utilisé lorsque nous devons attribuer plusieurs paramètres réseau à l'interface `` foo '', par exemple pour le faire répondre sur plusieurs sous-réseaux sur le même fil.

Il s'agit d'une façon fastidieuse de le faire et incohérente au démarrage. Pour IPv6, toutes les adresses affectées à l'interface eth0 sont répertoriées ensemble sous l'entrée eth0. Il existe une méthode plus moderne pour ce faire (via la ip addrcommande).

Vous pouvez repérer les interfaces d'alias car elles ont un deux-points :dans leurs noms, la partie à gauche des deux-points est un nom d'interface existant et la strophe d'interface lorsque vous le faites ifconfigest très courte. Le HWaddrdevrait également être identique à celui de l'interface «parent». Ils ne seront également pas répertoriés /proc/net/dev. Si vous deviez dire ip addr, eth0:0apparaîtrait comme la deuxième adresse de l'interface eth0. (recherchez la ligne en retrait commençant par inet)

Les alias et leurs parents partagent de nombreux paramètres et champs, car ils partagent la couche physique. Le noyau ne les traite pas comme des interfaces entièrement distinctes. D'une part, le trafic apparaît sur l' interface parent , pas l'alias. Vous avez peut-être remarqué que l'alias n'a même pas de compteurs de paquets / octets!

Si vous avez besoin de renifler du trafic, un pare-feu, etc. sur une interface d'alias, vous devez utiliser son parent à la place. Étant donné que la seule différence entre un alias et son parent réside dans ses paramètres IPv4, la seule façon de faire correspondre le trafic sur un alias est d'utiliser ces paramètres IP. Avec iptables, vous faites correspondre l'adresse IPv4 de l'alias comme vous l'avez fait dans le commentaire de votre réponse.

Alexios
la source