My name is Vasyl Khrystiuk‎ > ‎process‎ > ‎main‎ > ‎

2. Denial of Service

Интро:

Как вообще надо защищать:

Собственно намного проще купить защиту, чем пытаться сделать ее самому( впрочем это касается вообще любой задачи). Но мы покупать не будем.

Из вариантов рассматривал deflateCSF
По советах знакомых системных администраторов я установил CSF, протестировал его с помощью siege и LOIC
Установка очень проста:
wget http://configserver.com/free/csf.tgz
tar zxvf csf.tgz
cd csf
sudo ./csftest.pl
apt-get install libio-all-lwp-perl
./install.sh
После этого нужно "включить защиту" в конфиг файле. Для этого там: 
sudo vim /etc/csf/csf.conf
это: 
TESTING = "1"
и 
SYNFLOOD = "0"
меняем на это:
TESTING = "0"
SYNFLOOD = "1"
также в списки TCP_IN, TCP_OUT, UDP_IN, UDP_OUT добавляем наши пользовательские порты( я например в список TCP_IN добавил 8080 порт) и перегружаем его командой sudo csf -r.

Правда старый механизм определения моих (костюмных) правил для iptables пришлось изменить, благо в CSF для этого предусмотрен механизм (копия):
Нужно просто создать файл /etc/csf/csfpost.sh и добавить в него наше правило (и так как основная таблица правил в iptables теперь полностью управляется через CSF, то в наших командах для файрвола нужна указать новую, другую таблицу для правил)
В моем случае команда изменилась из:
iptables -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
на:
iptables -A PREROUTING -t nat -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
Теперь, чтоб посмотреть это правило, нужно набрать:
iptables -L -t nat
Оно так же работает, просто находится в другой таблице.


Также в результате тестирования реакции сервера на SYN флуд в системном логе(  tail -f /var/log/kern.log ) была обнаружена ошибка:
nf_conntrack table full dropping packet
Решается с помощью команд (источник копия):
echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf
sysctl -p

Об этой ошибке также вспоминают в этой статье об защите:
Там же много полезной инфы и полезных опций, которые при желанию можно включить.
 
Вот и все. Следующим шагом в цепочке статей будет установление front-end nginx и запрятывание jetty за ним

Эта защита надежно работает только от DoS атаки. При DDoS атаке она сохраняет ресурсы системы, однако доставка контента не гарантируется из очевидных причин(для решения этой проблемы в enterprice нужно делать распределенную систему мощных серверов или вообще пользоваться профессиональными сервисами[1,2], хорошо хоть что DDoS стоит немалых денег и если кто-то не пожалел этих денег на убийство вашего сервиса - я думаю для вас не проблема купить стоящую защиту и мощные сервера)


// К CSFу есть еще дополнения. которые умеют различать вражеские пакеты от клиентских - нужно будет разобраться

 
Comments