Автор Тема: Анти DDOS для веб-сервера FreeBSD  (Прочитано 4154 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дмитрий

  • Global Moderator
  • Jr. Member
  • *****
  • Сообщений: 71
  • Country: ua
  • Karma: +1/-0
  • Пол: Мужской
  • ICQ: 41488731
Анти DDOS для веб-сервера FreeBSD
« : Марта 31, 2014, 05:46:03 pm »
Анти DDOS для веб-сервера FreeBSD

Встроенный файрволл 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 неприменимо понятие соединение).

You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login

Детальнее:You are not allowed to view links. Register or Login

« Последнее редактирование: Марта 10, 2018, 01:56:17 am от Дмитрий »


  • 1o1o1@jabber.fr
Contact You are not allowed to view links. Register or Login    

Оффлайн Дмитрий

  • Global Moderator
  • Jr. Member
  • *****
  • Сообщений: 71
  • Country: ua
  • Karma: +1/-0
  • Пол: Мужской
  • ICQ: 41488731
Re: Анти DDOS для веб-сервера FreeBSD
« Ответ #1 : Марта 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
« Последнее редактирование: Мая 22, 2015, 09:26:13 pm от Дмитрий »
  • 1o1o1@jabber.fr
Contact You are not allowed to view links. Register or Login    

Оффлайн Artiom

  • Newbie
  • *
  • Сообщений: 3
  • Karma: +0/-0
Re: Анти DDOS для веб-сервера FreeBSD
« Ответ #2 : Ноября 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 минут никто не заметит.

Оффлайн Дмитрий

  • Global Moderator
  • Jr. Member
  • *****
  • Сообщений: 71
  • Country: ua
  • Karma: +1/-0
  • Пол: Мужской
  • ICQ: 41488731
Re: Анти DDOS для веб-сервера FreeBSD
« Ответ #3 : Февраля 11, 2015, 04:29:40 pm »
ну я попробовал на FreeBSD твой вариант и что то не понял он твой синтаксис! :)
разбан я поставил на http 10 мин! все равно они меняют IP там каждые 5-10 минут, а на перебор ssh оставил день бана
« Последнее редактирование: Марта 03, 2015, 09:27:29 pm от Дмитрий »
  • 1o1o1@jabber.fr
Contact You are not allowed to view links. Register or Login