Я настраиваю маршрутизатор Linux с помощью iptables
. Я хочу написать приемочные тесты для конфигурации, которые подтверждают такие вещи, как:
В древнем FAQ упоминается параметр iptables -C
, который позволяет спрашивать что-то вроде «учитывая пакет из X в Y на порт Z, будет ли он принят или отброшен» ? " Хотя в часто задаваемых вопросах это работает так, для iptables
(но, возможно, не ipchains
, как он используется в примерах), опция -C
, похоже, не имитирует тестовый пакет проходит через все правила, а скорее проверяет наличие точно совпадающего правила. Это мало что значит для проверки. Я хочу заявить, что правила имеют желаемый эффект, а не просто то, что они существуют.
Я подумал о создании еще нескольких тестовых виртуальных машин и виртуальной сети, а затем попытался найти эффекты с помощью таких инструментов, как nmap
. Однако я избегаю этого решения из-за сложности создания всех этих дополнительных виртуальных машин, что на самом деле является довольно сложным способом генерировать некоторый тестовый трафик. Также было бы неплохо иметь методологию автоматизированного тестирования, которая также может работать на реальном сервере в производственной среде.
Как еще я могу решить эту проблему? Есть ли какой-нибудь механизм, который я мог бы использовать для генерации или имитации произвольного трафика, а затем узнать, был ли он (или будет) отброшен или принят iptables
?
Если вы готовы к небольшому кодированию, вы можете попробовать следующее:
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 компаниями.
В первом случае можно использовать что-то вроде шасси Ixia 400T + Ixload.
Во втором случае линия Smartbits или Testcenter с соответствующими приложениями
Эти устройства могут (помимо всего прочего) эмулировать множество клиентов, выполняющих различные виды запросов на выбранном вами целевом сервере. Они поставляются готовыми к тестированию безопасности ваших серверов, включая предустановленный набор тестов атак, плюс вы всегда можете определить свой собственный набор. У них также есть много других возможностей, таких как нагрузочные тесты и т.п.
Не дешевый вариант.