Как настроить постоянную фильтрацию пакетов (SMTP, Telnet) на 3 экземплярах Linux Ubuntu в Docker? Правила IP Tables не применяются или слишком строги.

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

Проблема:

Мне нужно настроить 3 экземпляра Linux, которые работают в контейнерах Docker на OpenStack.

МаршРУТЫ: Rout, Pout, Mout

Rout – должен блокировать соединения SMTP и Telnet, которые приходят от HostR1 на интерфейсе sw0.4 и пытаются выйти за пределы LAN/станции (то есть на любой другой интерфейс)

Pout – должен блокировать любые соединения, приходящие от HostP1, пытающегося получить доступ к Mout на порту 9139, где запускается скрипт трекера на Python (UDP)

Mout – должен блокировать ВСЕ внешние соединения (то есть IP-адреса вне станции) к HostM1, кроме icmp и ssh.

! Важно: Не блокируйте соединения и ответы, инициированные и направленные к HostM1. Используйте состояния правил (Отслеживание соединений)!

Mout соединен с Rout на интерфейсе sw0.5, а Rout соединен с MainHost на интерфейсе to-host. MainHost также соединен с Pout на интерфейсе or-pout.

Мое решение, которое не работает:

На Rout:

 up iptables -A FORWARD -s 10.26.102.67 -p tcp --dport telnet -j REJECT

 up iptables -A FORWARD -s 10.26.102.67 -p tcp --dport 25 -j REJECT

iptables -L -n -v: Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байт) pkts bytes target prot opt in out source destination
1 60 REJECT tcp — * * 10.26.102.67 0.0.0.0/0 tcp dpt:23 reject-with icmp-port-unreachable 0 0 REJECT tcp — * * 10.26.102.67 0.0.0.0/0 tcp dpt:25 reject-with icmp-port-unreachable

На Pout:

 up iptables -A FORWARD -s 10.26.102.194 -p udp -d 10.26.102.66 --dport 9123 -j REJECT

 up iptables -A FORWARD -s 10.26.102.194 -p udp -d 10.26.102.129 --dport 9123 -j REJECT

 up iptables -A FORWARD -s 10.26.102.194 -p udp -d 172.30.139.245 --dport 9130 -j REJECT

 up iptables -A FORWARD -s 10.26.102.194 -p udp -d 172.30.139.241 --dport 9130 -j REJECT

На Milano: -решение еще не найдено

Команды, приведенные выше на Rout и Pout, находятся в .conf файле, который применяется при перезагрузке или с помощью: ifdown –force -a && ifup -a.

ifdown-ng уже установлен, и я не могу установить другие пакеты на этих экземплярах, потому что мои экземпляры будут нарушены.

Я вижу, что первое правило на Rout отклонило некоторые пакеты, но проверка, которую я использую, все еще говорит: ПРЕДУПРЕЖДЕНИЕ: некоторый обязательный исходящий трафик заблокирован (попробуйте удалить некоторые правила)!

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

Для настройки устойчивой фильтрации пакетов (SMTP, Telnet) на трех экземплярах Linux, работающих в контейнерах Docker на OpenStack, важно учитывать как особенности сетевой архитектуры, так и параметры конфигурации iptables. Запрос на фильтрацию со стороны различных узлов требует тщательной настройки правил для обеспечения необходимого уровня безопасности и функциональности. Рассмотрим конкретное решение для каждой из трех машин: Rout, Pout и Mout.

Конфигурация Rout

Для Rout, задача состоит в том, чтобы блокировать SMTP (порт 25) и Telnet (порт 23) соединения от HostR1 на интерфейсе sw0.4 и запрещать их выход за пределы локальной сети.

  1. Проверьте текущие правила iptables:

    iptables -L -n -v
  2. Настройка правил:

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

    iptables -A FORWARD -i sw0.4 -s 10.26.102.67 -p tcp --dport 23 -j REJECT --reject-with icmp-port-unreachable
    iptables -A FORWARD -i sw0.4 -s 10.26.102.67 -p tcp --dport 25 -j REJECT --reject-with icmp-port-unreachable
    iptables -A FORWARD -i sw0.4 -s 10.26.102.67 -j ACCEPT # Позволяет другие соединения

    Эти команды блокируют Telnet и SMTP только от конкретного хоста и маршрутизируют все остальные трафики.

Конфигурация Pout

На Pout необходимо заблокировать любые соединения с HostP1, пытающиеся получить доступ к Mout на порту 9139.

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

    iptables -A FORWARD -s 10.26.102.194 -d 10.26.102.66 -p udp --dport 9139 -j REJECT --reject-with icmp-port-unreachable
    iptables -A FORWARD -s 10.26.102.194 -d 10.26.102.129 -p udp --dport 9139 -j REJECT --reject-with icmp-port-unreachable

    Эти команды блокируют доступ к порту 9139 для HostP1.

Конфигурация Mout

Для Mout нужно обеспечить, чтобы все входящие соединения из внешних источников были заблокированы, исключая ICMP и SSH, при этом разрешая уже установленные соединения.

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

    # Разрешаем возвращаемый трафик для уже установленных соединений
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # Разрешаем ICMP (ping)
    iptables -A INPUT -p icmp -j ACCEPT
    
    # Разрешаем SSH
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
    # Блокируем все остальные входящие соединения
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A INPUT -j DROP

    Эти команды обеспечивают, что Mout блокирует все внешние соединения, разрешая только ICMP и SSH.

Заключение

Эта конфигурация IP-таблиц обеспечивает необходимый уровень безопасности для трех Docker-контейнеров, учитывая особые требования к фильтрации пакетов. Не забывайте тестировать каждое правило и их взаимодействие между собой, чтобы избежать нежелательных блокировок трафика, которые могут повлиять на функционирование ваших экземпляров. Используйте такие утилиты, как tcpdump и netstat, чтобы проанализировать сетевой трафик и выявить возможные проблемы с конфигурацией.

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

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