Как использовать правила syn proxy и connlimit одновременно с iptables?

Вопрос или проблема

Я хочу написать правила как для syn proxy, так и для connlimit. Я хочу, чтобы пакеты сначала отправлялись на syn proxy из-за проблем с производительностью.

Вот пример правила.

#правило syn proxy 
iptables -t raw -A PREROUTING -i eth1 -p tcp -m tcp --syn -j CT --notrack 
iptables -t filter -A FORWARD -i eth1 -p tcp -m tcp -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -t filter -A FORWARD -i eth1 -m state --state INVALID -j DROP

#правило connlimit 
iptables -t filter -A FORWARD -i eth1 -p tcp -m tcp --syn -m connlimit --connlimit-above 100 -j DROP

Проблема в том, что поскольку пакеты syn (пакеты, открывающие соединение) не могут пройти за пределы правила syn proxy, они не могут соответствовать connlimit. Я ищу альтернативный способ написать connlimit так, чтобы он работал с synproxy.

Я использовал то же правило (synproxy на мосту), но понял, что обычный tcp-запрос не будет работать, т.е. после внедрения правил synproxy ВСЕ запросы syn были заблокированы. Я мониторил это с помощью tcpdump. Интересно, работают ли ваши правила synproxy как ожидается?

Ответ или решение

Для эффективного использования правил syn proxy и connlimit в iptables важно правильно настроить порядок и условия, при которых эти правила будут действовать. Ваша задача заключается в том, чтобы правильно отправлять SYN-пакеты на обработку синхронизации (SYNPROXY) без блокировки других соединений, в то же время ограничивая количество соединений от одного IP-адреса. Рассмотрим, как это можно сделать.

1. Настройка правил SYNPROXY и connlimit

Сначала определим цель каждого правила:

  • SYNPROXY применяется для защиты от SYN-флуд-атак путем отслеживания TCP-сессий и управления входящими соединениями.
  • connlimit используется для ограничения числа одновременных соединений от одного IP-адреса.

2. Упорядочение правил

Поскольку SYN-пакеты, обрабатываемые через SYNPROXY, не могут достигать других правил, необходимо изменить порядок правил таким образом, чтобы возможность применения connlimit осталась доступной.

Вот пример того, как можно организовать правила:

# Устанавливаем правило для работы с SYN-пакетами и добавляем обработку connlimit
iptables -t raw -A PREROUTING -i eth1 -p tcp -m tcp --syn -j CT --notrack 

# Добавляем правило для ограничения соединений
iptables -t filter -A FORWARD -i eth1 -p tcp -m tcp --syn -m connlimit --connlimit-above 100 -j DROP

# Применяем SYNPROXY для SYN-пакетов
iptables -t filter -A FORWARD -i eth1 -p tcp -m tcp -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -t filter -A FORWARD -i eth1 -m state --state INVALID -j DROP

3. Пояснение порядка правил

  1. Обработка SYN-пакетов в таблице raw: Это первое правило использует модуль CT для отслеживания соединений, что позволяет игнорировать отслеживание состояния для этих пакетов.

  2. Применение connlimit перед SYNPROXY: Правило connlimit следует добавить до применения SYNPROXY, чтобы SYN-пакеты могли быть обработаны для ограничения соединений. В этом случае мы блокируем все SYN-пакеты от IP-адресов, которые превышают лимит в 100 соединений.

  3. Обработка SYNPROXY: После этого мы обрабатываем пакеты SYN через SYNPROXY, управляя состоянием соединений.

4. Дополнительные меры

  • Тестирование доступа: После настройки правил важно провести тестирование с помощью tcpdump или других инструментов, чтобы убедиться, что пакеты SYN корректно обрабатываются и не блокируются.
  • Мониторинг: Регулярно мониторьте журналы системы и использование сети, чтобы убедиться в отсутствии неожиданных блокировок или отказов в связи.

Заключение

Правильная комбинация и порядок правил iptables поможет обеспечить безопасность вашей сети, одновременно ограничивая количество соединений для каждого IP-адреса. Внимательно следите за работой системы после внесения изменений, чтобы убедиться, что правила действуют так, как задумано, не создавая при этом дополнительных проблем.

Оцените материал
Добавить комментарий

Капча загружается...