iptables: блокировка всего трафика на порты 80 и 443, но трафик все равно поступает

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

Я пытаюсь научиться работать с iptables.
Я пытался остановить весь трафик по http и https.

Мои цепочки INPUT и OUTPUT были пустыми.

Изначально я сделал следующее:

sudo iptables -A OUTPUT -p tcp --dport 80 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 443 -j DROP

Тем не менее, я все еще мог заходить на новые веб-страницы, такие как https://systemd.io/ или https://fr.euronews.com/, но не https://unix.stackexchange.com/

Так как этого было недостаточно, я решил также добавить аналогичные правила для цепочки OUTPUT…

sudo iptables -A INPUT -p tcp --sport 80 -j DROP
sudo iptables -A INPUT -p tcp --sport 443 -j DROP

Я все еще мог заходить на эти веб-сайты… Я не уверен, как это было возможно.

В цепочке FORWARD у меня есть 3 правила (повторенные много раз),

ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere  

Я не уверен, влияют ли они на цепочки INPUT или OUTPUT…

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

Ваша проблема с iptables связана с тем, как работает сам брандмауэр и как сетевой трафик может обходить ваши правила. Давайте разберем это поэтапно.

Теория

iptables — это инструмент для управления правилами фильтрации пакетов в ядре Linux. Он позволяет управлять входящими, исходящими и перенаправленными пакетами на основе заданных вами правил.

Существует несколько основных цепочек в iptables:

  1. INPUT – цепочка для обработки входящих пакетов.
  2. OUTPUT – цепочка для обработки исходящих пакетов.
  3. FORWARD – цепочка для обработки перенаправленных пакетов (обычно используется в маршрутизаторах).

Также важным понятием является состояние соединения (state), который используется в модулях, таких как conntrack. Возможные состояния включают NEW, ESTABLISHED, RELATED и INVALID.

Пример

Вы создали следующие правила:

  1. В цепочке OUTPUT вы блокировали трафик с адресами назначения на порты 80 (HTTP) и 443 (HTTPS):

    sudo iptables -A OUTPUT -p tcp --dport 80 -j DROP
    sudo iptables -A OUTPUT -p tcp --dport 443 -j DROP
  2. Вы добавили аналогичные правила в цепочку INPUT, блокируя трафик по источникам на порты 80 и 443:

    sudo iptables -A INPUT -p tcp --sport 80 -j DROP
    sudo iptables -A INPUT -p tcp --sport 443 -j DROP

Несмотря на это, веб-страницы продолжали открываться. Вероятно, причиной этому является использование правил ESTABLISHED в цепочке FORWARD, которыми разрешается трафик в уже установленных соединениях.

  1. В цепочке FORWARD у вас есть правило:
    ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED

Это правило в цепи FORWARD разрешает весь трафик, который является частью уже установленных или связанных соединений. Однако, путем необходимости пересмотра понимаемой структурой сетевых таблиц iptables, вероятно, это напрямую не оказывает влияние на INPUT и OUTPUT цепочки, когда не используется натавление данных из FORWARD цикла. Серьёзная ошибка может заключаться в определении маршрутизирования или использования каких-либо прокси-сервисов или контейнерных консолей, например, Docker, который может обходить ваши запретительные правила.

Применение

Чтобы решить проблему, нужно предпринять следующие шаги:

  1. Проверить наличие других приложений или процессов, которые могут обходить стандартные правила iptables.

    • Docker и другие контейнеры могут создавать собственные правила брандмауэра, которые могут влиять на ваш трафик. Используйте команду sudo iptables -S и sudo iptables -L -v -n для тщательной инвентаризации существующих правил.
  2. Пересмотрите цепочки правил и последовательность их применения.

    Начните с удаления всех правил, чтобы убедиться, что действительно у вас нет скрытых процессов управления iptables:

    sudo iptables -F

    Затем добавьте правила блокировки сначала в INPUT и OUTPUT одна за другой и проверяйте результаты.

  3. Блокируйте соединения с использованием модулей netfilter с setstate(NEW,RELATED,ESTABLISHED):

    Установите политики отказа для INPUT и OUTPUT:

    sudo iptables -P INPUT DROP
    sudo iptables -P OUTPUT DROP

    Добавьте правила на разрешение:

    sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -A OUTPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
  4. Логирование traffic перед принятием важных решений.

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

    sudo iptables -A INPUT -j LOG --log-prefix "INPUT DROP: "
    sudo iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "
  5. Перезапустите сетевые интерфейсы и сервера.

    Загрузка новой конфигурации iptables иногда требует перезагрузки сетевых интерфейсов или полного перезапуска для применения корректных изменений, особенно после модификации связанных контейнеров и маршрутизирующего ПО.

Тщательное следование этим шагам позволит вам понять, где ваша конфигурация не отвечает ожиданиям и открыть полноценный контроль доступа к сети. Это требование, чтобы обеспечить обозримость сетевого трафика и особое внимание к принудительному блокированию всех несанкционированных соединений по заданным портам.

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

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