iforum.pp.ua

Основной каталог => IT технологии и др. => Записки администратора => Тема начата: Дмитрий от Марта 31, 2014, 05:46:03 pm

Название: Анти DDOS для веб-сервера FreeBSD
Отправлено: Дмитрий от Марта 31, 2014, 05:46:03 pm
Анти DDOS для веб-сервера FreeBSD (http://forum.ix-ua.net/images/notbug.gif)

Встроенный файрволл FreeBSD позволяет защищать сервер от DDOS-атак, связанных с созданием большого числа подключений на какой-либо порт (к примеру 80). Под катом инструкция, как эту функцию задействовать — с конфигом и комментариями.

Конфиг файрволла с функцией анти-DDOS должен начинаться примерно так, файл /etc/pf.conf:

Код: You are not allowed to view links. Register or Login
# создаем в памяти таблицу ddos, в которой будут храниться шаловливые ip-адреса
table <ddos> persist                   

# политика фильтрации - Default Deny, т.е. запрещаем все, что не разрешено
block log all

# чтобы случайно не самозабаниться, 83.246.222.22 - наш ip-адрес
pass in quick from 83.246.222.22

# блокируем ip-адреса из черного списка
block in quick from <ddos>

pass in proto tcp from any to self port 80 keep state \
  (max-src-conn 50, max-src-conn-rate 15/5, overload <ddos> flush)

Последнее правило следует понимать так — пропускаем соединения на 80 порт, при этом для каждого ip-адреса запоминаем количество подключений и считаем скорость его подключений. Ежели с одного ip-адреса поступит более 50 соединений, или количество соединений превысит 15 за интервал времени в 5 секунд, то забанить.

К слову, число соединений можно посмотреть с помощью командочки (sS — show Sources):

Код: You are not allowed to view links. Register or Login
# pfctl -sS
192.168.0.1 -> 0.0.0.0 ( states 2, connections 2, rate 0.0/0s )
192.168.1.2 -> 0.0.0.0 ( states 15, connections 15, rate 0.0/0s )
192.168.1.4 -> 0.0.0.0 ( states 7, connections 7, rate 0.0/0s )
192.168.1.7 -> 0.0.0.0 ( states 11, connections 9, rate 0.0/0s )
192.168.1.18 -> 0.0.0.0 ( states 16, connections 16, rate 0.0/0s )

Посмотреть таблицу забаненных:
Код: You are not allowed to view links. Register or Login
# pfctl -t ddos -T show
   13.13.13.13

Снять бан с определенного ip-адреса:
Код: You are not allowed to view links. Register or Login
# pfctl -t ddos -T delete 13.13.13.13
1/1 addresses deleted.

Либо можно амнистировать все адреса:
Код: You are not allowed to view links. Register or Login
# pfctl -t ddos -T flush
В завершение, однострочник, выводящий сводную статистику по количеству соединений:
Код: You are not allowed to view links. Register or Login
pfctl -sS | grep -v connections\ 0 | awk '{printf "%5d %s\n",$8,$1}' | sort
В выводе pfctl -sS сначала идет статистика по udp, потом по tcp, вот поэтому сначала отфильтровываем по connections 0 (к UDP неприменимо понятие соединение).

Реализация Packet Filtering на FreeBSD (http://www.freebsd.org/doc/ru/books/handbook/firewalls-pf.html)

Полный Man по PF (http://www.openbsd.org/faq/pf/filter.html)

Полезная статья по сравнению трем основным фаерволам FreeBSD (http://www.opennet.ru/docs/RUS/ipfw_pf_ipfilter/index.html)

И не забываем про тонкие настройки sysctl :) (http://www.lissyara.su/articles/freebsd/security/sysctl/)

Детальнее:FreeBSD Tuning and Optimization (https://calomel.org/freebsd_network_tuning.html)

(http://ix-ua.net/images/BSDfuckLinuxGray.png)
Название: Re: Анти DDOS для веб-сервера FreeBSD
Отправлено: Дмитрий от Марта 31, 2014, 06:00:02 pm
Еще один пример по Анти DDOS

в fp.conf
Код: You are not allowed to view links. Register or Login
table <ddos> persist
table <bruteforce> persist
...
block log quick from { <ddos>, <bruteforce> }
...
## allow HTTP
pass in inet proto tcp from any to any port http keep state \
    (max-src-conn 200, max-src-conn-rate 100/2, overload <ddos> flush)
...
## allow SSH
pass in log inet proto tcp from any to any port ssh keep state \
    (max-src-conn 10, max-src-conn-rate 5/60, overload <bruteforce> flush)

в cron'е
Код: You are not allowed to view links. Register or Login
*/5     *       *       *       *       root       /sbin/pfctl -t ddos -T expire 1800 >/dev/null 2>&1            #30 minutes
*/5     *       *       *       *       root       /sbin/pfctl -t bruteforce -T expire 86400 >/dev/null 2>&1       #1 day
Название: Re: Анти DDOS для веб-сервера FreeBSD
Отправлено: Artiom от Ноября 14, 2014, 02:50:56 pm
Я предпочитаю блокировать так:
Код: You are not allowed to view links. Register or Login
block in quick proto tcp from <ddos>  label "Fuck DDOSers" probability 65%
Попытки что либо сделать от этого адреса начинают дико тормозить.  8) Что особо отбивает охоту ставить твой адрес в списки сканеров и т.п. Сканер проторочит на твоём адресе кучу времени и всё равно ничего не поймёт ;).

Ну и банить надо хотя бы на час. 5 минут никто не заметит.
Название: Re: Анти DDOS для веб-сервера FreeBSD
Отправлено: Дмитрий от Февраля 11, 2015, 04:29:40 pm
ну я попробовал на FreeBSD твой вариант и что то не понял он твой синтаксис! :)
разбан я поставил на http 10 мин! все равно они меняют IP там каждые 5-10 минут, а на перебор ssh оставил день бана