Фаервол iptables, модуль state — можно использовать как вид защиты?
Во первых, не нужно светить рекурсивным DNS в интернет. 
Для bind это выглядит так://disable recursive requests from outside
        allow-recursion { 127.0.0.1; 
                                   ::1; };
Приведенные вами правила iptables никак не решают задачу защиты от dns amplification. 
В следствии, iptables разрешит принять запрос на 53 порт с сервера злоумышленника, а вот далее при отправке ответа на подставной сервер iptables сбросит ли соединение? Ответ ведь разрешен только на тот сервер, с которым установлено соединение.
Так как в случае этой атаки используется UDP, никакие соединения не устанавливаются. Атакующий отправляет ОДИН UDP пакет с запросом (в котором source адрес заменен на атакуемый ip) и ваш сервер отправляет один пакет с ответом на этот запрос, на тот адрес который был указан в source. Состояние NEW,ESTABLISHED в таком случае вполне корректно. 
Атака с подменой source адреса не возможна в случае с TCP, так как для установления соединения используется несколько пакетов в обе стороны. SYN->ACK<--SYN_ACK и только после этого открывается соединение. А так как в случае с подменой исходящего адреса ответ сервера на SYN уйдет по другому адресу, соответственно на него никто не ответит SYN_ACK.
Для решения вашей задачи нужно использовать ограничение запросов с одного адреса:# Requests per second
RQS="15"

# Requests per 7 seconds
RQH="35"

iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSQF --rsource
iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 1 --hitcount ${RQS} --name DNSQF --rsource -j DROP
iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSHF --rsource
iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 7 --hitcount ${RQH} --name DNSHF --rsource -j DROP
Подмена как раз делается на сетевом. Классическая маршрутизация проверяет только адрес назначения, соответственно на адрес источника ей наплевать. Это можно сделать, например, средствами NAT на любой железке, либо самостоятельно сгенерировать запрос скриптом.
Конкретно по Вашей теме, что мешает повесить правила с разными состояниями, попробовать сделать запросы и посмотреть счетчики?
P.S. используйте уже conntrack вместо state)