_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Solar Designer 2:5020/400 27 Nov 98 00:59:24
Subj : Hедостатки ssh
________________________________________________________________________________
From: Solar Designer <solar@cannabis.dataforce.net>
Solar Designer <solar@cannabis.dataforce.net> wrote:
> Именно поэтому я и говорю, что задача нетривиальная. Также, поэтому я
> говорю насчет поддержки в ядре (SYN flood'ы -- это его дело). Короче,
> тут просто надо начать пробовать, я лучше не буду много рассуждать.
Вот и попробовал. Все получается как надо. Единственный недостаток --
не удается послать RST сразу -- 3-way handshake происходит вообще до
accept(2). Впрочем, никаких опасных последствий от этого не вижу.
А так, на 2.0.36 с SYN cookies, даже при DAEMON_SYN_LIMIT=1 (см. пример
ниже) все живет без проблем. Проверялось под одновременным SYN и connect()
флудом, и нормально пропускало и обрабатывало соединение с другого адреса.
Можно будет в таком стиле (только аккуратнее, чем в примере) делать и для
SSH и для xinetd.
if (listen(sock, DAEMON_SYN_LIMIT))
pexit("listen");
signal(SIGCHLD, handle_child);
total = 0;
memset(source, 0, sizeof(source));
while (1) {
addrlen = sizeof(addr);
new = accept(sock, (struct sockaddr *)&addr, &addrlen);
if (new < 0) {
if (errno != EINTR) perror("accept");
continue;
}
printf("Connection from %sn", inet_ntoa(addr.sin_addr));
if (total >= DAEMON_TOTAL_LIMIT)
goto reject;
n = 0;
for (i = 0; i < DAEMON_TOTAL_LIMIT; i++)
if (source[i].addr.s_addr == addr.sin_addr.s_addr) n++;