- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть у меня система на freebsd6.2.
Хотелось соорудить некую простенькую защиту от перегрузок в ddos, и поэтому был выбран openbsd packet filter (pf), тк там есть таблицы обеспечивающие быструю выборку из большого списка.
Из тех же соображений защиты от ddos, возникла необходимость ограничить число одновременно установленных соединений с одного ip. В мануалах описан финт, который переводчики понимают по-своему, некоторые так и перевели что мол число соединений, но это не так. В оригинале там просто число записей в трекинговой таблице независимо от состояния.
Как четко ограничить число полностью открытых соединений в состоянии ESTABLISHED?
Ниже пример конфига, на ограничение 3 соединений на порт 250. вроде бы срабатывает, но в таблице соединений pf постоянно творится ерунда и в итоге я легко открываю первые 3 и пару секунд спустя еще 3 соединения. (всего 6 копий программы telnet запускаю одновременно)
set optimization normal
set block-policy drop
set timeout src.track 900
set skip on lo0
scrub in all
block in on $ext_if proto tcp to 1.2.3.4 port 250
pass in on $ext_if proto tcp to 1.2.3.4 port 250 flags S/SA \
keep state (max 1000,source-track rule, max-src-states 1000, max-src-nodes 10000,max-src-conn 3)
Подозреваю, что нужно отдельно написать правило для продолжения трекинга установленных соединий или увеличить какой-нибудь хитрый лимит. Может быть кто-то решал подобную задачу?
telnet запускаете с одной и той же машины?
Уже запущенные telnet-сессии не дохнут к тому времени, как вы следующие три запускаете?
c одной и одновременно и она без ната. есть такая штука clusterssh : нажимаю один enter, а она нажимает его в шести терминалах.
c одной и одновременно и она без ната. есть такая штука clusterssh.
М-м-м-м... Надо бы внимательно поизучать pfctl -s all на предмет сгенереных динамических правил, и, если в них все кошерно - смотреть в tcpdump на предмет ISN.
Есть мнение, что правило по keep state создается на пару src_ip / dst_ip + dst_port. А если это так, то с одной и той же машины сколько хочешь соединений провалится.
Конкретнее сейчас ничего не скажу, надо тору почитать, посмотреть поподробнее.
точно отловил что pfctl -sa показывает меньше состояний чем на самом деле (через netstat).
правило упростил совсем :
block in on $ext_if proto tcp to any port 250
pass in on $ext_if proto tcp to any port 250 keep state \
(max 10000, source-track rule, max-src-nodes 4000, max-src-conn 3)
pass out on ext_if proto tcp from any port 250 to any keep state
то есть теперь весь незаблокированный трафик должен проходить через трекер, но все равно такое впечатление что max-src-conn включает режим забывчивости и я вижу только 3 соединения.
Пример из Торы с max-src-states 3 работает стабильно и блокирует все.
Пожалуй, даже решает задачу ограничения совсем уж наглых ддосеров и качальщиков, хотя и неточно.
Это защита от пионеров
В настоящем DDOS от 1 ip идет только 1 коннект
Andreyka, смерть человекам! опять вы со своей колокольни?
это одна из мер. снос крыши у этого весьма хилого сетевого стека во время ддоса меня не устраивает.
keep state (max 1000, source-track rule, max-src-states 1000, max-src-nodes 10000, max-src-conn 3)
насколько я знаю по мануалу:
max - число записей в таблице состояний, то есть сессий
max-src-nodes - число возможных исходящих ИПов, то есть разных клиентов, непонятно как их может быть больше чем возможных соединений на правило
max-src-conns - число established соединений с одного ИПа (насколько я знаю не всегда правильно работает)
max-src-states - вот это называется сколько сессий с ОДНОГО ИПа, а не в общем, для того был параметр max
так что пишите:
pass in on $ext_if proto tcp to 1.2.3.4 port 250 flags S/SA \
keep state (max 1000, source-track rule, max-src-states 3, max-src-nodes 1000, max-src-conns 3)
а в этой конфигурации засада :
закрытые или не полностью открытые соединения так же заполняют эту таблицу states и влияют на лимит соединений.
то есть я открываю 3 телнета, сразу же закрываю соединения. следущие попытки установить соединения приведут к блокировке до тех пор пока не освободится хотя бы один state в таблице
поставил вот очень небольшие значения
tcp.finwait 4s
tcp.closed 3s
довольно неплохое приближение к требуемому решению
разве эти две фразы не описывают одно и то же задание???
может лучше объяснить толком что вам нужно сделать, тогда и подумаем
Нет, любая запись в той таблице описывает Состояние Соединения. там все соединения, включая неполные и недавно закрытые. Но мне то нужно именно число установленных соединений в состоянии ESTABLISHED.
Я так понимаю это не проблема портирования pf, все работает как и обычно работает в оригинальной openbsd?
Вот линуксе connlimit работает как часы и делает именно то, чего ожидают люди, а не то, что смог сделать программист.