myhand

Рейтинг
278
Регистрация
16.09.2009
netwind:

iptables -t nat -A PREROUTING -p tcp --dport 80 -m string --string "this-is-not-bot" --algo kmp -j REDIRECT --to-ports 8080

Если строка вообще была одна, что здесь не так? Учтите, что после однократного срабатывания -j REDIRECT, все остальные пакеты соединения будут перенаправляться на порт 8080, хотите вы этого или нет.

шутите? пришел пакет с syn, там строки нет - мы на него забили?

netwind:
Ну и пусть зарезали. Лес рубят - щепки летят.

Ага. Пользователь включил поддержку кукисов - а его все-равно 50/50 банят. Нафиг

такую "защиту" - проще уж --dport 80 -j DROP

Чтобы решение со string было хоть чуть рабочим - как минимум, HTTP-запросы

небольшими должны быть. POST, HTTP keepalive, да и простые GET - будут резаться.

netwind:

Нет, я не пробовал string . А вы?

string пробовал (не для защиты от ddos, но объем фильтруемого трафика

был сопоставим), потому и не верю в такой способ защиты на 20Mbps

проще в nginx проверять кукисы - а потом банить ipset. 20Mbps - вовсе не проблема,

скрытых граблей нет.

netwind:
Вы уже знали в то время про -m state ? попробовали с ним?

-m state тут совершенно непричем - необходимость фильтрации пакетов в

ESTABLISHED для 80-го порта это не отменяет :) Просто -j ACCEPT для них - нельзя, Вам

понятно почему?

netwind:
Первая строка была
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT. самый обычный способ ускорения iptables.

у вас поиск строки как раз в ESTABLISHED должен происходить :D Так доускоряетесь, nginx с

апачем за файерволом помрут.

netwind:
Ну может и в 3-4 строки весь комплекс правил был бы. Если Андрейка не приукрасил провокационными заявлениями, то это не Андрейка :)

тут недавно пробегало предположение, что под его ником минимум

двое постят.

тем не менее, даже в 3-4 строки это не решить: залез HTTP запрос

в TCP пакет вместе с хидерами - хорошо. Нет - его зарезали.

netwind:

Да даже если и сканирует каждый пакет - ничего страшного не будет. сервер это ж не циска какая-нибудь с i960 на 100 mhz

а вы пробовали?

netwind:
Первая строка была
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT. самый обычный способ ускорения iptables. Ускорения, я говорю. Даже с учетом того что трекер соединений жрет память.

а с --state NEW, например, что предлагается делать?

хорошо, а как насчет пакетов с данными, где нужного http-хидера - нет?

сумеете обойти это еще в одну строку?

netwind:
Тотя те кого пугает 20мбит, наверное об этом не слышали.

пугают не 20мбит, а идея сканирования на вхождение строки у _каждого_ входящего

TCP пакета с данными.

Outsourcenow:
Да вообще копеечная нагрузка. Только железяка будет стоить порядка 100к евро.

моя думал, идея в том, что вся эта "защита" со string - крутилась на

обычном выделенном сервере :(

в общем, автору незачет. пока не объяснит принцип работы

второй строки. и сколько дополнительных строк (напр, правил iptables) для этого

использовалось :D

Outsourcenow:

3. Когда браузер отправляет заголово Cookie? Правильно, после установки tcp-сессии.
4. Как устанавливается tcp-сессия? И тут правильно, syn - syn-acc - acc - data

data :)

кстати, да - по этой причине - тоже работать не должно. т.е. минимум нужна

еще какая-то проверка на флаги (SYN, etc..).

PS: вообще, на картинку системы под 20Mbps досом, фильтрующей _каждый_ входящий

TCP-пакет с данными взглянуть любопытно (top, %sy цифирки).

Outsourcenow:
М-м-м-м... Я тут слегка подумал головой - и что-то мне подсказывает, что эта схема работать не будет вообще :-) А не "пользователи рубятся".

_будет_, в какой-то степени...

только часть вполне нормальных TCP-пакетов от обычных пользователей - будет

рубиться. те если заголовки http и данные не будут в одном пакете.

может в реальности дело было сложнее организовано, не в "две строчки",

см. пункт 2 моего поста:

/ru/forum/comment/5642032

Andreyka:
Да, это защита школьного ддос, коих сейчас очень много

реально -m string использовался на 20Mbps?

именно в _это_, думаю, здесь никто не верит

myhand добавил 16.10.2009 в 19:43

Outsourcenow:
Отвратительная идея - искать строки на L3.

проблема еще и в том, что пользователи при этом рубятся. совершенно нормально,

что в TCP пакете от "хорошего" клиента, проставившего кукисы - искомой строки _не_будет_.

ciber:
в том то и дело, что ни чего не получает.
2009/10/16 17:41:57 [error] 24830#0: *862425 directory index of "/usr/html/upload/" is forbidden, client: 95.*.*.*, server: ###.com, request: "GET /uplo
ad/ HTTP/1.1", host: "###.com", referrer: "http://###.com/123.php"

Не понимаю почему именно эта папка.Но и в этой папке скрипт ни чего не получает

дык это апач ему говорит (или что у вас там на бакенде), смотрите лог бакенда.

как называется скрипт в директории /usr/html/upload/

?

myhand добавил 16.10.2009 в 22:42

ciber:
Не понимаю почему именно эта папка.Но и в этой папке скрипт ни чего не получает

да, похоже, что это nginx таки выдает - т.е. не проксирует @test

у меня конфиг отличается только тем, что _не_используются_ именованные location:


http {
[...]
upload_progress proxied 1m;
server {
[...]
upload_store /tmp 1;
upload_set_form_field "${upload_field_name}_name" "$upload_file_name";
upload_set_form_field "${upload_field_name}_content_type" "$upload_content_type";
upload_set_form_field "${upload_field_name}_path" "$upload_tmp_path";
upload_pass_form_field "^submit$";
location = /upload {
upload_pass /internal;
track_uploads proxied 30s;
}
location = /internal {
proxy_pass http://localhost:8080;
}
location ^~ /progress {
# report uploads tracked in the 'proxied' zone
report_uploads proxied;
}
}
}
Andreyka:

iptables -t nat -A PREROUTING -p tcp --dport 80 -m string --string "this-is-not-bot" --algo kmp -j REDIRECT --to-ports 8080

1. -m string не страшно на ~20Mbps использовать?

2. пример не "рабочий", правило iptables будет работать если в _каждом_

хорошем TCP пакете будет искомая строка. Так что решение - минимум

не в две строчки ;-)

3. не встречались боты, умеющие кукисы? у Вас еще все впереди :D

4. как минимум, до того как забьют канал - могут скушать все системные

ресурсы. поэтому начинать нужно не с правил файервола, а с ограничения

CPU/памяти/etc для всего доступного извне - апача, mysql, nginx etc

PS:

me думает, что бан на основе тех же критериев (кукисы) в nginx + последующий

бан iptables/ipset на файерволе - будет лучше в плане производительности

myhand добавил 16.10.2009 в 18:32

MoMM:
это получится "прощай робот яндекса"?

предлагается хороших узнать и собрать отдельно в WHITELIST

увы, работает это способ только против атак "школьников". Добавить

нужный _статический_ хидер к запросу бота - не составляет проблемы.

Всего: 4890