Re: [freebsd] зацикленная передача пакетов
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] зацикленная передача пакетов
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] зацикленная передача пакетов
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] зацикленная передача пакетов
Здравствуйте! Столкнулся со следующей ситуацией: есть сервер-фронтенд с 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 для остального. Что это, вероятнее, - проблема настройки или проблема софта? И как более детально диагностировать проблему? Спасибо.