Pour la faire très simple, iptables agit au niveau kernel et les hosts.* au niveau logiciel.
En gros, si ton application est paramétrée pour, elle utilise les hosts.* sinon... alors elle n'en tiendra pas compte.
Iptables lui, n'a cure des applications et filtre au niveau réseau.
Autre point, iptables permet des réglages fin (au niveau protocole, port source/destination.....) les fichiers hosts.* eux, ne permetent aucun réglage autre que j'autorise ou j'interdit.
C'est très simplifié, hein, il y a d'autres subtilités, mais ça permet déjà de comprendre la différence 🙂