как грамотно защитить nginx от ddos

Den73
На сайте с 26.06.2010
Offline
523
#31

myhand

да соглашусь, как один из инструментов вполне, "херня" с горяча написал, но еще через годик наверное действительно станет неуместным способом.

M
На сайте с 01.12.2009
Offline
235
#32
theBlackWolf:
насчет ограничения потребления ресурсов, это я сделал и теперь сервер во время атаки не падает и с ним можно прекрасно работать. пока что тестирую схему с включением во время атаки модуля тест куки. На данный момент наткнулся на проблему:
Бот частично умеет интерпритировать яву, поэтому ддос бот успешно обходит скрипты

более сложные скрипты приведенные на хабре и скрипт приведенный в документации самого модуля почему то не работают (возможно я криворукий).
скрипт

почему то не устанавливает куки, хотя настроен по официальной документации.

Ещё и какие криворукие, если с этим модулем не разберетесь.

Скрипт работает хорошо, 1g держал глаз радуется автору его респект.

syn fin bum bam До фени, ipfw pipe > /dev/null флулд :)

Белый список для ботов. :)

Администратор Linux,Freebsd. построения крупных проектов.
Evas EvaSystems
На сайте с 31.05.2012
Offline
104
#33
на фоне аналогичных поделок от других авторов у него хоть что то внятное и гибкое.

К ним я не отношусь, распространением "подделок" не занимаюсь.

Вот именно. Конкурировать с вами - все равно что с бомжом...

И вам добра...

ТС, aes.min.js файлик и патчи к нему поставили?

Системный администратор Linux. Настройка, сопровождение и оптимизация серверов. Отзывы - searchengines.guru/ru/forum/1017473
TB
На сайте с 19.12.2012
Offline
8
#34

CenrOS 6 x64 Intel(R) Pentium(R) CPU G850 @ 2.90GHz 2128.000 Mhz X 2 4GB ram

составил sysctl так

#
# Kernel sysctl configuration file for Red Hat Linux
kernel.core_uses_pid = 1
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.shmall = 4294967296
kernel.shmmax = 68719476736
kernel.sysrq = 0 [поправлено]
net.bridge.bridge-nf-call-arptables = 0 [удалил спс Den73]
net.bridge.bridge-nf-call-ip6tables = 0 [удалил спс Den73]
net.bridge.bridge-nf-call-iptables = 0 [удалил спс Den73]
net.core.netdev_max_backlog = 10000 [под вопросом стоил ли увеличивать или уменьшать, дефолт=1000]
net.core.somaxconn = 128000
net.ipv4.icmp_ratelimit = 60 [удалено]
net.ipv4.conf.all.send_redirects = 0 [удалено]
net.ipv4.conf.default.accept_source_route = 0 [дефолт]
net.ipv4.conf.default.rp_filter = 1 [дефолт]
net.ipv4.conf.default.send_redirects = 1 [удалено]
net.ipv4.ip_dynaddr = 0 [дефолт]
net.ipv4.ip_forward = 1 [удалено]
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 1
net.ipv4.tcp_keepalive_time = 10
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 393216
net.ipv4.tcp_sack = 0 [удалено]
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1 [поправил спс Den73]

подскажите что я пропустил или где накосячил?

Den73
На сайте с 26.06.2010
Offline
523
#35

не рекомендую менять опции на угад, вот вам пример с net.ipv4.tcp_window_scaling который у вас 0.


root@s3 ~ # sysctl -a | grep net.ipv4.tcp_window_scaling
net.ipv4.tcp_window_scaling = 1



root@s3 ~ # wget http://proof.ovh.net/files/100Mio.dat -O /dev/null
--2012-12-25 02:05:36-- http://proof.ovh.net/files/100Mio.dat
Resolving proof.ovh.net... 188.165.12.106, 2001:41d0:2:876a::1
Connecting to proof.ovh.net|188.165.12.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: `/dev/null'

17% [===================> ] 18,357,692 10.7M/s ^C


root@s3 ~ # sysctl -w net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_window_scaling = 0


root@s3 ~ # wget http://proof.ovh.net/files/100Mio.dat -O /dev/null
--2012-12-25 02:05:55-- http://proof.ovh.net/files/100Mio.dat
Resolving proof.ovh.net... 188.165.12.106, 2001:41d0:2:876a::1
Connecting to proof.ovh.net|188.165.12.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: `/dev/null'

5% [=====> ] 6,173,992 3.64M/s ^C


root@s3 ~ # sysctl -w net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_window_scaling = 1


root@s3 ~ # wget http://proof.ovh.net/files/100Mio.dat -O /dev/null
--2012-12-25 02:06:09-- http://proof.ovh.net/files/100Mio.dat
Resolving proof.ovh.net... 188.165.12.106, 2001:41d0:2:876a::1
Connecting to proof.ovh.net|188.165.12.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: `/dev/null'

10% [===========> ] 10,862,376 10.3M/s ^C

а net.bridge зачем, у вас сетевой мост есть?

вообщем лучше оставьте дефолтные настройки и

net.core.somaxconn = 128000

net.ipv4.tcp_syncookies = 1

TB
На сайте с 19.12.2012
Offline
8
#36

CenrOS 6 x64 Intel(R) Pentium(R) CPU G850 @ 2.90GHz 2128.000 Mhz X 2 4GB ram

sysctl после изменений выглядит так

kernel.core_uses_pid = 1
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.shmall = 4294967296
kernel.shmmax = 68719476736
kernel.sysrq = 0
net.core.netdev_max_backlog = 10000
net.core.somaxconn = 128000
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_dynaddr = 0
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 1
net.ipv4.tcp_keepalive_time = 10
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 393216
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

что я забыл еще настроить?

Andreyka
На сайте с 19.02.2005
Offline
822
#37

Забыл капчу на флеше поставить

Это пока боты не умеют

Не стоит плодить сущности без необходимости
M
На сайте с 16.09.2009
Offline
278
#38
Andreyka:
Забыл капчу на флеше поставить
Это пока боты не умеют

Пользователи тоже далеко не все "умеют". JS - и тот отключают, представь!

ТС, интересны подобные вещи - ставьте уж сразу капчу. Но возникнет другая проблема - отличить "хороших" ботов, например поисковые индексеры.

Однако, я бы вам не советовал идти дальше нормального ограничения ресурсов приложений. И судя по вашей любви к копипастингу (по sysctl) - с этим не все может быть гладко, как вы полагаете.

Большего на одном сервере вам не достичь. Будет работать хорошо - вам просто вольют трафика побольше. Не тратьте свое время. Если же ваша задача - создать свое конкурентноспособное решение для борьбы с ddos, то информации на размышление у вас уже более чем достаточно. Осталось сперва подтянуть порядком собственные знания ;)

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
Andreyka
На сайте с 19.02.2005
Offline
822
#39

Ну так флешкапчу не перманентно держать а на время атаки поставить

TB
На сайте с 19.12.2012
Offline
8
#40

Написал скрипт, который при повышении нагрузки на ЦП активирует тесткуки.

Срабатывает отлично, но вот проблема в автоматическом отключении тесткуков.

При активных тесткуках нагрузка на сервер немного выше чем обычная, соответственно определить окончание ддос по нагрузке на ЦП не получится.

Как быть? Как определить что ддос закончилась?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий