Проверить, передает ли iptables заданный диапазон ip / ip [дубликат]

Я настраиваю маршрутизатор Linux с помощью iptables . Я хочу написать приемочные тесты для конфигурации, которые подтверждают такие вещи, как:

  • трафик от какого-то парня в Интернете не пересылается, и
  • TCP на порт 80 на веб-сервере в DMZ пересылается с хостов в корпоративной локальной сети. .

В древнем FAQ упоминается параметр iptables -C , который позволяет спрашивать что-то вроде «учитывая пакет из X в Y на порт Z, будет ли он принят или отброшен» ? " Хотя в часто задаваемых вопросах это работает так, для iptables (но, возможно, не ipchains , как он используется в примерах), опция -C , похоже, не имитирует тестовый пакет проходит через все правила, а скорее проверяет наличие точно совпадающего правила. Это мало что значит для проверки. Я хочу заявить, что правила имеют желаемый эффект, а не просто то, что они существуют.

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

Как еще я могу решить эту проблему? Есть ли какой-нибудь механизм, который я мог бы использовать для генерации или имитации произвольного трафика, а затем узнать, был ли он (или будет) отброшен или принят iptables ?

13
задан 30 May 2014 в 18:25
2 ответа

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

  • Создать новое сетевое пространство имён с помощью флага CLONE_NEWNET для системного вызова clone, или с помощью ip netns add и ip netns exec команд.
  • В этом пространстве имен создайте набор виртуальных сетевых интерфейсов, используя драйвер tun или ip link add.
  • Загрузите конфигурацию с помощью iptables- restore
  • Подавайте несколько пакетов в правила через tun или veth устройства
  • Обратите внимание, что вы получаете правильные пакеты из tun или veth устройств

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

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

ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host

ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host

ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0

ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2

ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1

ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2

ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host

Это создаст три сетевых пространства имён для тестирования и загрузит набор правил iptables в одно из них. Два других служат в качестве роли какого-то парня в интернете и хоста в локальной сети.

В приведенном выше примере первая команда telnet получает отказ в соединении из пространства имен testt-iptables-lan-host, вторая команда telnet получает таймаут, если набор правил уронит пакет.

Это не затрагивает начальное пространство сетевых имён, в котором по умолчанию будет происходить вся ваша работа. Единственный способ получить большее отделение от вашего производства - запустить его на отдельном хосте (физическом или виртуальном).

2
ответ дан 3 January 2021 в 22:35

профессиональный мир делает это с помощью аппаратного/программного обеспечения, предоставляемого 2 компаниями.

www.ixiacom.com

www.spirent.com

В первом случае можно использовать что-то вроде шасси Ixia 400T + Ixload.

Во втором случае линия Smartbits или Testcenter с соответствующими приложениями

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

Не дешевый вариант.

0
ответ дан 3 January 2021 в 22:35

Теги

Похожие вопросы