Antworten:
IPTables funktioniert auf Kernel-Ebene. Im Allgemeinen bedeutet dies, dass es keine Kenntnisse über Anwendungen oder Prozesse hat. Es kann zum größten Teil nur nach dem filtern, was es aus den verschiedenen Paketköpfen erhält.
Die Datei host.allow / deny wird jedoch auf Anwendungs- / Prozessebene ausgeführt. Sie können Regeln für verschiedene Prozesse oder Daemons erstellen, die auf dem System ausgeführt werden.
So können IPTables beispielsweise nach Port 22 filtern. SSH kann so konfiguriert werden, dass es diesen Port verwendet. Dies ist im Allgemeinen der Fall, es kann jedoch auch so konfiguriert werden, dass es sich an einem anderen Port befindet. IPTables weiß nicht, auf welchem Port es sich befindet, sondern nur über den Port im TCP-Header. Die hosts.allow-Dateien können jedoch für bestimmte Daemons wie den openssh-Daemon konfiguriert werden.
Wenn Sie sich entscheiden müssen, würde ich mich generell für mindestens IPTables entscheiden. Ich betrachte die hosts.allow als schönen Bonus. Auch wenn es so aussieht, als ob die Daemon-Levels einfacher sind, wird das Paket von IPTables blockiert, bevor es wirklich sehr weit kommt. Je früher Sie mit Sicherheit etwas blockieren können, desto besser. Ich bin mir jedoch sicher, dass es Situationen gibt, die diese Wahl ändern.
iptables blockiert den Zugriff, bevor er die Anwendung erreicht, wohingegen hosts.allow / hosts.deny Teil von PAM ist und erfordert, dass die Anwendung die PAM-Prüfung implementiert und die Datei korrekt verarbeitet. Beides ist nützlich, und beides ist noch besser.