Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Порядок нахождения строк состояния соединения в Iptables.  (Прочитано 1368 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kolesov

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Всем привет!

Меня давно мучает вопрос на который не могу найти ответ (может плохо искал).

Предположим есть какой-то набор правил в цепочке INPUT:

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP

-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i eth0 -p tcp -m multiport --dports 22,3389 -j ACCEPT

Где именно должны находиться правила определяющие состояния соединений, вверху цепочки (как в примере) или внизу?
Я так решил, что вверху т.к. правила фильтруют сверху вниз, и например соединениям с состоянием RELATED не нужно будет проходить всю цепочку.

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
вполне разумное решение.
Но иногда полезно его сделать не первым.
Например, уступить первые места правилам, связанными с поточным видео.
« Последнее редактирование: 20 Января 2018, 17:07:15 от fisher74 »

Оффлайн kolesov

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
fisher74,  Спасибо за ответ.
Было бы здорово, если бы вы привели пример.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Если уж пишете правило на --ctstate INVALID, его надо ставить первым. Или как минимум перед RELATED.
« Последнее редактирование: 20 Января 2018, 17:55:19 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн kolesov

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
AnrDaemon, хм а как файервол поймет, что состояние INVALID сразу, не попытавшись установить соединение?
« Последнее редактирование: 21 Января 2018, 13:10:54 от kolesov »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
При чём тут соединение?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн kolesov

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
AnrDaemon, да соединение не причем. Это левый трафик, не NEW, не RELATED, не ESTABLISHED.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Неверно.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн kolesov

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
AnrDaemon, просветите.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Нет никакого "трафика".
Есть ПАКЕТ. И вот этот ПАКЕТ может быть НОВЫМ СОЕДИНЕНИЕМ(NEW), ОТНОСЯЩИМСЯ К СУЩЕСТВУЮЩЕМУ СОЕДИНЕНИЮ(RELATED) и НЕВАЛИДНЫМ(INVALID) одновременно

Так же теоретически пакет может оказаться невалидным в текущем соединении, но шансы на это невелики.
« Последнее редактирование: 21 Января 2018, 23:03:15 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн MooSE

  • Старожил
  • *
  • Сообщений: 1117
    • Просмотр профиля
По опыту скажу: RELATED,ESTABISHED надо в конец. Потому что чтобы бы понять является соединение RELATED и/или ESTABLISHED все соединения, проходящие через это правило, добавляются во внутреннюю таблицу модуля nf_conntrack. Таблица к сожалению не резиновая и на больших нагрузках её может не хватать и обработка правила будет не корректной.

Потому сначала стоит написать более простые разрешения (протоколы, порты) и уже потом, если ни одно из предыдущих правил не сработало, отправлять соединение на обработку модулем nf_conntrack.

Например если у вас слабенький процессор вроде Xeon X3 3440 крутит nginx или haproxy в качестве load balancer для web, то уже при нагрузке в 700-900 запросов в секунду можно видеть как растёт загрузка ЦПУ если такое:
-A INPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

заменить на такое:
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 80 -j ACCEPT

А в dmesg начинают проскакивать ошибки вида "nf_conntrack: table full, dropping packet"



Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Если таблицы нехватает, её надо расширять.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн MooSE

  • Старожил
  • *
  • Сообщений: 1117
    • Просмотр профиля
Если таблицы нехватает, её надо расширять.

Спорно. RAM не резиновая и бесконечно увеличивать таблицу conntrack не получится. Да и зачем, когда можно вообще практически полностью разгрузить эту таблицу правильным построением последовательности правил?

Оффлайн bezbo

  • Старожил
  • *
  • Сообщений: 1754
    • Просмотр профиля
ПАКЕТ... одновременно…

квантовая физика?

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 883
    • Просмотр профиля
квантовая физика?

хуже
в той физике лишь вероятность, процент, а тут 100%
прикинь, ужас то

 

Страница сгенерирована за 0.068 секунд. Запросов: 25.