Как я могу написать автоматизированные тесты для iptables?

13

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

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

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

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

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

Фил Фрост
источник
Это тоже может быть интересно: security.stackexchange.com/questions/31957/…
dawud
1
@ dawud Не думаю, что это дубликаты. Я знаю, как запустить сканирование портов: это не очень хороший тест, потому что я ограничен тестированием в и из пунктов назначения и источников, которыми я могу управлять. Мое беспокойство также не блокирует себя от сервера. Я хочу автоматически проверить, что правила брандмауэра действительно имеют эффекты, которые я разработал для них.
Фил Фрост

Ответы:

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команда get connection отклонена из test-iptables-lan-hostпространства имен, вторая telnetкоманда получает timeout, если набор правил отбрасывает пакет.

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

kasperd
источник
0

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

www.ixiacom.com

www.spirent.com

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

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

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

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

похлопывание
источник
удивительно видеть, как простое невежество может спокойно понизить действительные ответы ...
Пэт