Вопрос или проблема
Проблема:
Мне нужно настроить 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 и запрещать их выход за пределы локальной сети.
-
Проверьте текущие правила iptables:
iptables -L -n -v
-
Настройка правил:
Чтобы блокировать соединения, можно использовать следующее решение:
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.
-
Настройка правил:
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, при этом разрешая уже установленные соединения.
-
Настройка правил:
# Разрешаем возвращаемый трафик для уже установленных соединений 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
, чтобы проанализировать сетевой трафик и выявить возможные проблемы с конфигурацией.