Я настраиваю маршрутизатор Linux с iptables
. Я хочу написать приемочные тесты для конфигурации, которые утверждают такие вещи, как:
- трафик от какого-то парня в интернете не перенаправляется, и
- TCP на порт 80 на веб-сервере в DMZ от хостов в корпоративной локальной сети пересылается.
Древний 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, требует немного больше усилий, но также должно быть выполнимо и для тестирования таким способом.
Вот пример последовательности команд, которые можно использовать:
Это создаст три сетевых пространства имен для тестирования и загрузит набор правил iptables в одно из них. Два других играют роль какого-то парня в интернете и хоста в локальной сети.
В приведенном выше примере первая
telnet
команда get connection отклонена изtest-iptables-lan-host
пространства имен, втораяtelnet
команда получает timeout, если набор правил отбрасывает пакет.Это не касается исходного сетевого пространства имен, в котором все ваше производство будет работать по умолчанию. Единственный способ добиться большего отрыва от производства - запустить его на отдельном хосте (физическом или виртуальном).
источник
профессиональный мир делает это с помощью аппаратного / программного обеспечения, предоставляемого двумя компаниями.
www.ixiacom.com
www.spirent.com
В первом случае вы можете использовать что-то вроде шасси Ixia 400T + Ixload.
Во втором случае строка Smartbits или Testcenter с соответствующими приложениями
Эти устройства могут (среди прочего) эмулировать множество клиентов, выполняющих различные виды запросов на выбранном целевом сервере. Они готовы протестировать безопасность ваших серверов, включая заранее определенный набор тестов атак, плюс вы всегда можете определить свой собственный набор. У них также есть много других возможностей, таких как нагрузочные стресс-тесты и тому подобное.
Не дешевый вариант.
источник