Последните дни бях подложен на DNS amplification attack. Какво значи това? Изпращат се малки заявки към DNS сървъра, отговора на които е доста по-голям от тях. Например – ANY, NS, TXT, MX. Целта на атаката е с малък обем входящ трафик да предизвикат голям обем изходящ трафик генериран от DNS сървъра. При мен с 5mbps входящ трафик се генерираха около 50mbps изходящ. Първоначално тръгнах да се боря по “хамалския” начин с атакуващите – блирах един по един IP адресите, които изпращаха голям брой такива малки заявки, чиито отговор е в пъти поголям от заявката. Това естествено не даде голям резултат, тъй като атакуващите постоянно добавяха нови и нови заразени машини, които да правят същото – изпращат малки заявки, които генерират големи отговори.
След няколко часа четене на iptables намерих начин на лимитирам броя заявки от единичен IP адрес. Ето как изглежда и моето правило за 20 заявки на секунда:
/sbin/iptables -I INPUT -p udp --dport 53 -m state \
--state NEW -m recent --set
/sbin/iptables -I INPUT -p udp --dport 53 -m state \
--state NEW -m recent --update --seconds 1 \
--hitcount 20 -j DROP
Какво се случи след добавянето на въпросното правило – атаката продължи, но изходящия трафик от 50mbps падна драстично 2-5mbps на сървър. Резултата е спестено огромно количество fake изходящ трафик.
Pingback: Предпазване от DNS amplification attack (part 2) | Боян Пейчев