Документация по ОС FreeBSD Четверг, 18.04.2024, 06:20
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Безопасность

Защита от DoS атак в nginx
FreeBSD, сетевая Intel fxp, порт 100Мбит, polling, http accept-filter

в sysctl

    kern.maxfiles=90000
    kern.maxfilesperproc=80000
    net.inet.tcp.blackhole=2
    net.inet.udp.blackhole=1
    kern.polling.burst_max=1000
    kern.polling.each_burst=50
    net.inet.tcp.msl=10000
    kern.ipc.somaxconn=32768
   
в nginx  моменты

        worker_processes  1;
        worker_rlimit_nofile 80000;
        events {
           worker_connections  50000;
        }

        server_tokens off;
        log_format IP '$remote_addr';
        reset_timedout_connection on;

        listen      xx.xx.xx.xx:80 default rcvbuf=8192 sndbuf=16384
        backlog=32000 accept_filter=httpready;

фильтрацию url например по критерию POST index.php?action=login с пустым реферером можно реализовать так

       set $add 1;
       location /index.php {
           limit_except  GET POST {
               deny   all;
           }
           set $ban "";
           if ($http_referer = "" )            {set $ban  $ban$add;}
           if ($request_method = POST )        {set $ban  $ban$add;}
           if ($query_string = "action=login" ){set $ban  $ban$add;}
           if ($ban = 111 ) {
               access_log /var/log/nginx/ban IP;
               return 404;
           }
         proxy_pass http://127.0.0.1:8000;#тут живёт апач
      }

ну и по крону уже раз в минуту добавлять в ipfw table новые ИП из лога 25Мбитный DDoS, преимущесвенно режущийся ipfw, остатки проходят на nginx, который по критерию обучает ipfw и остатки проксирует на апач - LA 0, сайт работает.
Чуть более мощный сервер на гигабитном Realtek re и 100Мбит порту  с поллингом загибался от pps где-то до 20Мбит



Sergey Smitienko <hunter@comsys.com.ua.>

Будьте готовы, что при атаке в системе закончатся сокеты для соединиея nginx - backend. Так что я  бы добавил

        sysctl net.inet.tcp.msl=3000 - уменьшаем время TIMEWAIT
        sysctl net.inet.tcp.maxtcptw=40960 - ограничиваем количество TIMEWAIT сокетов
        sysctl net.inet.tcp.nolocaltimewait=1 - отключаем TIMEWAIT для локальных сокетов.
        sysctl net.inet.ip.portrange.first=1024
        sysctl net.inet.ip.portrange.last=65535
        sysctl net.inet.ip.portrange.randomized=0

Дальше резали на  уровне pf - загружали в таблицу IP с которых приходило  слишком много хитов. PF с таблицами работает очень быстро.  Исходники парсера логов есть на http://www.comsys.com.ua/files
Категория: Безопасность | Добавил: oleg (10.01.2008) | Автор: Alex Vorona
Просмотров: 1803 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024