Ответы:
IPTables работает на уровне ядра. В целом это означает, что он не знает приложений или процессов. Он может фильтровать только на основе того, что он получает от различных заголовков пакетов по большей части.
Однако host.allow / deny работает на уровне приложения / процесса. Вы можете создавать правила для различных процессов или демонов, работающих в системе.
Так, например, IPTables может фильтровать на порту 22. SSH может быть настроен на использование этого порта, и обычно это так, но он также может быть настроен на другой порт. IPTables не знает, на каком порту он находится, он знает только о порте в заголовке TCP. Однако файлы hosts.allow можно настроить для определенных демонов, таких как демон openssh.
Если вам нужно выбрать, я бы выбрал как минимум IPTables. Я рассматриваю hosts.allow в качестве приятного бонуса. Даже при том, что кажется, что уровни демонов кажутся более простыми, IPTables заблокирует пакет, прежде чем он действительно даже продвинется очень далеко. С безопасностью, чем раньше вы сможете что-то заблокировать, тем лучше. Однако я уверен, что есть ситуации, которые меняют этот выбор.
iptables блокирует доступ до того, как он достигнет приложения, тогда как hosts.allow / hosts.deny является частью PAM и требует, чтобы приложение реализовало проверку PAM и правильно обработало файл. И то, и другое полезно, а иметь их на месте - еще лучше.