Назад | Перейти на главную страницу

ваш подход к сложным наборам правил iptables

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

Я обычно использую такой подход [просто искусственный пример]:

iptables -F ; iptables -X; iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -N FORWARD_machineA
iptables -A FORWARD_machineA -d $machineA -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -s $machineB -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -j DROP
iptables -A FORWARD_machineA -s $machineA -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineA -s $machineA -j REJECT

iptables -N FORWARD_machineB
iptables -A FORWARD_machineB -d $machineB -s $machineA -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineB -d $machineB -j DROP
iptables -A FORWARD_machineB -s $machineB -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineB -s $machineB -j REJECT

iptables -N FORWARD_machineC
iptables -A FORWARD_machineC -d $machineC -s $machineA -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -s $machineB -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -j DROP
iptables -A FORWARD_machineC -s $machineC -j REJECT

iptables -A FORWARD -s $machineA -j FORWARD_machineA
iptables -A FORWARD -d $machineA -j FORWARD_machineA

iptables -A FORWARD -s $machineB -j FORWARD_machineB
iptables -A FORWARD -d $machineB -j FORWARD_machineB

iptables -A FORWARD -s $machineC -j FORWARD_machineC
iptables -A FORWARD -d $machineC -j FORWARD_machineC

это работает нормально, но далеко не идеально: например, если я добавляю два сервера в разных подсетях, которым необходимо взаимодействовать, правила необходимо добавлять как в цепочки для machineA, так и для machineB.

в этом случае меня больше всего интересует управляемость / читаемость - поэтому нет необходимости в специальной оптимизации производительности [например, минимизация среднего числа поисков правил].

пс: аналогичный вопрос, но это не ответы, которые я ищу.

Спасибо!

Ты можешь измениться

iptables -A FORWARD -s $machineA -j FORWARD_machineA
iptables -A FORWARD -d $machineA -j FORWARD_machineA

к

iptables -A FORWARD -g FORWARD_machineA

таким образом у вас может быть три таких правила

iptables -A FORWARD -g FORWARD_machineA
iptables -A FORWARD -g FORWARD_machineB
iptables -A FORWARD -g FORWARD_machineC

и после этих трех правил просто поставьте одно

iptables -A FORWARD -j REJECT

Таким образом, если вы разрешите обмен данными только один раз в цепочке FORWARD_machineA или chian FORWARD_machineB для связи между машиной A и машиной B, это может сработать.

По крайней мере, он сокращает шесть строк цепочки -j до трех строк цепочки -g. Это также устраняет необходимость помещать -j REJECT в конец каждой цепочки. Фактически, вы должны удалить -j REJECT из конца каждой цепочки, чтобы вышеуказанный метод работал.

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

Вы могли бы использовать pfSense вместо. у него много функции:

  • Брандмауэр

    • Фильтрация по IP-адресу источника и назначения, IP-протоколу, источнику и порту назначения для трафика TCP и UDP
    • Возможность ограничить количество одновременных подключений для каждого правила
    • pfSense использует p0f, расширенную утилиту пассивного снятия отпечатков пальцев ОС / сети, позволяющую фильтровать операционную систему, инициирующую соединение. Хотите разрешить доступ в Интернет компьютерам с FreeBSD и Linux, но заблокировать компьютеры с Windows? pfSense может сделать это (среди многих других возможностей) путем пассивного определения используемой операционной системы.
    • Возможность регистрировать или не регистрировать трафик, соответствующий каждому правилу.
    • Возможна очень гибкая маршрутизация политик путем выбора шлюза для каждого правила (для балансировки нагрузки, переключения при отказе, нескольких WAN и т. Д.)
    • Псевдонимы позволяют группировать и присваивать имена IP-адресам, сетям и портам. Это помогает поддерживать чистый и понятный набор правил брандмауэра, особенно в средах с несколькими общедоступными IP-адресами и многочисленными серверами.
    • Возможность прозрачного брандмауэра уровня 2 - может соединять интерфейсы и фильтровать трафик между ними, даже позволяя использовать брандмауэр без IP (хотя вам, вероятно, понадобится IP для целей управления).
    • Нормализация пакетов - Описание из документации pf scrub - «Очистка» - это нормализация пакетов, поэтому нет двусмысленности в интерпретации конечным адресатом пакета. Директива scrub также повторно собирает фрагментированные пакеты, защищая некоторые операционные системы от некоторых форм атакует и отбрасывает TCP-пакеты с недопустимыми комбинациями флагов ".
      • Включено в pfSense по умолчанию
      • При необходимости можно отключить. Этот параметр вызывает проблемы для некоторых реализаций NFS, но он безопасен и его следует оставить включенным в большинстве установок.
    • Отключить фильтр - вы можете полностью отключить фильтр брандмауэра, если хотите превратить pfSense в чистый маршрутизатор.

  • Трансляция сетевых адресов (NAT)
  • Резервирование
  • Отчеты и мониторинг балансировки нагрузки
  • Графики RRD

    Графики RRD в pfSense содержат историческую информацию о следующем.

    • Загрузка процессора
    • Общая пропускная способность
    • Состояния межсетевого экрана
    • Индивидуальная пропускная способность для всех интерфейсов
    • Скорость пакетов в секунду для всех интерфейсов
    • Время отклика на эхо-запрос шлюза WAN-интерфейса
    • Очереди формирователя трафика в системах с включенным формированием трафика
  • VPN
    • IPsec
    • PPTP
    • OpenVPN
  • Динамический DNS

    Через:

    • DynDNS
    • DHS
    • DyNS
    • easyDNS
    • Нет-IP
    • ODS.org
    • ZoneEdit
  • Портал захвата
  • DHCP-сервер и ретранслятор

У него приятная, простая в использовании веб-конфигурация, просто посмотрите на скриншоты.

Лучше всего, что вы можете построить его самостоятельно, используя обычное оборудование, и это Открытый источник.