Як я можу написати автоматизовані тести для iptables?


13

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

  • трафік від якогось хлопця в Інтернеті не пересилається, і
  • TCP на порт 80 на веб-сервері в DMZ від хостів у корпоративній локальній мережі передається.

Стародавній FAQ натякає на iptables -Cваріант, який дозволяє запитати щось на кшталт, "якщо пакет з X, Y, на порт Z, це буде прийнято чи відмовлено?" Хоча FAQ пропонує, що він працює так, 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команда отримання з'єднання відхилена з test-iptables-lan-hostпростору імен, друга telnetкоманда отримує тайм-аут, якщо набір правил скидає пакет.

Це не торкається початкового простору мережевих імен, тобто за замовчуванням відбувається все ваше виробництво. Єдиний спосіб отримати більше відокремлення від виробництва - це запустити його на окремому хості (фізичному чи віртуальному).


0

професійний світ робить це за допомогою апаратних / програмних засобів, наданих двома компаніями.

www.ixiacom.com

www.spirent.com

У першому випадку ви можете використовувати щось на зразок шасі Ixia 400T + Ixload.

У другому випадку рядок Smartbits або Testcenter з відповідними додатками

Ці пристрої можуть (серед іншого) імітувати безліч клієнтів, які виконують різні типи запитів на вибраному цільовому сервері. Вони готові перевірити безпеку ваших серверів, включаючи попередньо визначений набір тестів для атаки, а також ви завжди можете визначити свій набір. Вони також мають багато інших можливостей, таких як навантажувальні стрес-тести тощо.

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


дивовижно бачити, як просте невігластво може спокійно знизити дійсні відповіді ...
Пат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.