Не совсем так.
В линуксе firewall - "зашит" в ядро (при выставлении опций конфигурирования оного). iptables - это просто user-space утилита для добавления/удаления правил в ядре. Отсюда и невозможность самого ядра сохранить эти настройки между перезагрузками - надо запускать iptables при каждом старте системы.
snort - утилита, которая анализирует получаемые данные (все какие возможно) и на основе правил строит предположения о возможной атаке/взломе/etc
Например, я не использую 22 порт для работы по ssh. На шлюзе запустил собственный маленький скрипт, который получает данные из лога (а в лог загоняются все тем-же iptables ... -j LOG). Поскольку я не использую порт 22, считаю, что это атака/скан и сразу скрипт блокирует весь трафик от атакующего хоста.
snort, к примеру, может анализировать и содержимое пакета и если встретит пакет на 80 порт с запросом GET /cgi-bin/phf (скрипт в старых апачах, через который можно было кучу всего сделать на сайте), то выдаст аларм о атаке.
"No! Try not! Do. Or do not. There is no try." -- Yoda