Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Eugene Grosbein                      2:5006/1       17 Jan 2008  19:05:07
 To : All
 Subject : tcp & spam
 -------------------------------------------------------------------------------- 
 
 Привет!
 
 Хост работает только как почтовый сервер, кроме SMTP/POP3 другого
 трафика TCP почти нет. Входящий поток спама - в количестве одновременных
 конненктов - значительно превышает способности сервера его обработать.
 
 В результате уж очень часто упираемся в максимальное количество
 одновременных SMTP-коннектов и TCP-режектим всю остальную почту в это время.
 Есть несколько признаков, по которым можно фильтровать посылателей
 на уровне файрвола, не допуская их до MTA (завсегдатаи блеклиста,
 попадатели в smaptrap, нарушители greet-pause etc.)
 
 Если конкретный IP попадает в файрвол после того, как коннект его
 был MTA отброшен, получается так:
 
 ipfw add deny tcp from 'table(1)' to me setup # блокировать новые коннекты
 ipfw add reset tcp from 'table(1)' to me      # рвать текущие
 ipfw add reset tcp from me to 'table(1)'
 
 Hовые коннекты благополучно отсекаются. Hо получается, что текущие
 коннекты от этого IP (их может быть несколько) на довольно длительное
 время "подвисают" - sendmail ничего не посылает клиенту, когда ждет
 данных, а в ответ на входящие пакеты reset посылается, видимо, только
 клиенту. Глобально таймауты у MTA крутить не хочется, надо чтобы
 почта была устойчива к медленным нормальным клиентам.
 
 MTA включает SO_KEEPALIVE на сокетах. Hо дефолтные таймауты у FreeBSD
 имеют совершенно безобразные значения (для этой задачи) для установленных
 соединений:
 
 net.inet.tcp.keepidle: 7200000
 net.inet.tcp.keepintvl: 75000
 
 Если я правильно понимаю, это значит: при отсутствии входящих сегментов
 в течение первого таймаута (7200000/hz=72000 секунд=20 часов) начинать
 посылать keepalives один раз в 75000/hz=750 секунд=12.5 минут и рвать
 коннект после 8 (задаётся в сорцах) непрошедших подряд кипаливах,
 то есть через 100 минут. В результате эти keepalives что есть, что нет
 и заблокированные коннекты быстро пожирают лимит.
 
 Поставил так:
 
 # 60 секунд без входящих сегментов - начинается посылка keepalives
 net.inet.tcp.keepidle=6000
 # посылается 8 штук (задано в исходниках) через 10 секунд
 net.inet.tcp.keepintvl=1000
 
 Загрузка очень быстро упала до вполне приемлемых величин.
 Внимание, вопрос: на какие проблемы я нарываюсь? :-)
 
 Eugene
 -- 
 Как лист увядший падает на душу...
 --- slrn/0.9.8.1 (FreeBSD)
  * Origin: Svyaz Service JSC (2:5006/1@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 tcp & spam   Eugene Grosbein   17 Jan 2008 19:05:07 
 Re: tcp & spam   Valentin Davydov   17 Jan 2008 16:20:37 
 Re: tcp & spam   Eugene Grosbein   17 Jan 2008 20:25:38 
 Re: tcp & spam   Andrey Voitenkov   17 Jan 2008 16:38:14 
 Re: tcp & spam   Alexander Kolesnikoff   17 Jan 2008 19:32:43 
 Re: tcp & spam   Vitaly E. Lavrov    18 Jan 2008 11:26:37 
 Re: tcp & spam   Vadim Goncharov   22 Jan 2008 19:50:49 
Архивное /ru.unix.bsd/2609325966dbc.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional