Re: [freebsd] зацикленная передача пакетов

2012-03-17 Пенетрантность Vadym S. Khondar

On сб, 17-бер-2012 17:07:52 +0200, Eugene Grosbein wrote:


Imho, вы всё делаете ровно наоборот. Увеличивать maxtcptw это работать
на повышение эффективности атаки.


Почему? На сколько я понимаю, повышать лимиты по памяти можно на сколько
позволяет сервер, а сервер позволяет.


При борьбе против DDoS первым делом
надо менять statefull rules на stateless.


Да, столкнулся с этим сам. Это в процессе решения. Но для этого и сейчас
с сотоянием - только те соединения, которые нужно rdr (без state здесь
никак или я не прав?). Остальные проходят pass no state. Таблица стейтов
пока не бывает очень большой, по наблюдениям.


Если речь идёт о SYN-flood,
то ещё syncache неплохо бы отключить, перейти временно на одни syncookies.


Синкеш отключен (net.inet.tcp.syncookies_only=1)


Зачем нужен statefull firewall для TCP с его признаками setup/established,
вообще непонятно.





Re: [freebsd] зацикленная передача пакетов

2012-03-17 Пенетрантность Vadym S. Khondar

16.03.12 15:22, Slawa Olhovchenkov написав(ла):

On Fri, Mar 16, 2012 at 12:22:13AM +0200, Vadym S. Khondar wrote:


Здравствуйте!

Столкнулся со следующей ситуацией:

есть сервер-фронтенд с nginx, два интерфейса - один для запросов
клиентов, второй для запросов к бекенду.
Сервер периодически ддосят разными способами. После одной из таких атак,
когда практически остались только правильные запросы со стороны
клиентов, на интерфейсе к бекенду в течение длительного времени наблюдал
картину:

13:26:44.675095 IP frontend_ip.27877>  backend_ip.80: Flags [.], ack
2911656049, win 65535, length 0
13:26:44.675369 IP backend_ip.80>  frontend_ip.27877: Flags [.], ack 1,
win 8760, length 0
13:26:44.675377 IP frontend_ip.27877>  backend_ip.80: Flags [.], ack
2911656049, win 65535, length 0
13:26:44.675619 IP backend_ip.80>  frontend_ip.27877: Flags [.], ack 1,
win 8760, length 0
13:26:44.675638 IP frontend_ip.27877>  backend_ip.80: Flags [.], ack
2911656049, win 65535, length 0
13:26:44.675868 IP backend_ip.80>  frontend_ip.27877: Flags [.], ack 1,
win 8760, length 0
13:26:44.675876 IP frontend_ip.27877>  backend_ip.80: Flags [.], ack
2911656049, win 65535, length 0

Временами количество такого трафика доходило до 20kpps.

Убийство nginx'а этого потока не остановила. Соединение это по нетстату
пребывало в FIN_WAIT_1.


когда оно там пребывало? до убиства или после?


Самое интересное, что и после. И в течение нескольких часов.


И таких потоков было несколько наряду с нормальными соединениями к бекенду.
Поборолось явным block return для проблемных соединений.

uname -rms
FreeBSD 9.0-RELEASE amd64
nginx 1.0.10
Интерфейс с проблемными соединениями - em.
Есть pf с несколькими rdr и pass all no state для остального.


а нахера на интерфейсе к бекенду pf?
Не точно выразился - правило, затрагивающее интерфейс к бекенду только 
одно - pass (см. другое письмо).


Re: [freebsd] зацикленная передача пакетов

2012-03-17 Пенетрантность Vadym S. Khondar

16.03.12 09:35, Alexander Panyushkin написав(ла):
Хороше бы на правила фаера взглянуть, какие лимиты выставлены, что 
тюнили?






Здравствуйте!

Правила такие:
set skip on lo
set timeout { udp.first 20, udp.single 20, udp.multiple 20 }
set timeout tcp.first 5
set timeout tcp.established 86400
set limit { states 500, src-nodes 30 }
set optimization aggressive
set block-policy drop

up_if="em0"
up_gw="..."
down_if="igb0"
down_gw="..."

table  persist {}
table  persist {}
rdr-anchor whitelist on $down_if proto tcp from  to  
port 80


pass out quick on $up_if route-to ($down_if $down_gw) from $down_if to 
any no state

pass all no state
pass in on $down_if reply-to ($down_if $down_gw) proto tcp to $down_if 
flags S/SA label "$dstaddr" no state


Маршрут по умолчанию - через интерфейс к бекендам, он же менеджмент 
(em0, up_if).

На интерфейсе down_if висят несколько алиасов.
Для части из них (те, которые в srvips) включен ряд проверок 
(реализованы в nginx), после прохождения которых клиенты добавляются в 
вайтлист, клиенты из вайтлиста с помощью rdr правил в якоре 
переадресуются прямо на бекенд.


Тюнилось, главным образом, для поддержки большего числа соединений и 
собственно против ддос.

sysctl.conf
net.inet.tcp.blackhole=2
net.inet.tcp.syncookies_only=1
net.inet.tcp.maxtcptw=524280
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.fast_finwait2_recycle=1
kern.maxfiles=204800
kern.maxfilesperproc=20
kern.ipc.maxsockets=204800
kern.ipc.nmbclusters=2048000
kern.ipc.somaxconn=8192
net.inet.tcp.drop_synfin=0
kern.ipc.maxsockbuf=33554432
net.inet.tcp.sendbuf_max=33554432
net.inet.tcp.recvbuf_max=33554432

loader.conf
net.inet.tcp.tcbhashsize=10240

Заметил, что после ддоса, о котором шла речь ранее, появилась нехватка 
timewait буферов.

ITEM   SIZE  LIMIT USED FREE  REQ FAIL SLEEP
...
tcptw:   72, 262150,  13,   65537,11602703,2548093,   0

после чего увеличивал net.inet.tcp.maxtcptw.

Могла ли эта нехватка стать причиной подобного поведения?


[freebsd] зацикленная передача пакетов

2012-03-15 Пенетрантность Vadym S. Khondar

Здравствуйте!

Столкнулся со следующей ситуацией:

есть сервер-фронтенд с nginx, два интерфейса - один для запросов 
клиентов, второй для запросов к бекенду.
Сервер периодически ддосят разными способами. После одной из таких атак, 
когда практически остались только правильные запросы со стороны 
клиентов, на интерфейсе к бекенду в течение длительного времени наблюдал 
картину:


13:26:44.675095 IP frontend_ip.27877 > backend_ip.80: Flags [.], ack 
2911656049, win 65535, length 0
13:26:44.675369 IP backend_ip.80 > frontend_ip.27877: Flags [.], ack 1, 
win 8760, length 0
13:26:44.675377 IP frontend_ip.27877 > backend_ip.80: Flags [.], ack 
2911656049, win 65535, length 0
13:26:44.675619 IP backend_ip.80 > frontend_ip.27877: Flags [.], ack 1, 
win 8760, length 0
13:26:44.675638 IP frontend_ip.27877 > backend_ip.80: Flags [.], ack 
2911656049, win 65535, length 0
13:26:44.675868 IP backend_ip.80 > frontend_ip.27877: Flags [.], ack 1, 
win 8760, length 0
13:26:44.675876 IP frontend_ip.27877 > backend_ip.80: Flags [.], ack 
2911656049, win 65535, length 0


Временами количество такого трафика доходило до 20kpps.

Убийство nginx'а этого потока не остановила. Соединение это по нетстату 
пребывало в FIN_WAIT_1.

И таких потоков было несколько наряду с нормальными соединениями к бекенду.
Поборолось явным block return для проблемных соединений.

uname -rms
FreeBSD 9.0-RELEASE amd64
nginx 1.0.10
Интерфейс с проблемными соединениями - em.
Есть pf с несколькими rdr и pass all no state для остального.

Что это, вероятнее, - проблема настройки или проблема софта?
И как более детально диагностировать проблему?

Спасибо.