12 вересня 2018 р.

Мережева ізоляція jails через vnet та private bridge members

За допомогою jails є можливість ізолювати процеси у окремому середовищі.
Але якщо jails сконфігуровані з vnet=on і  jails використовують  той самий інтерфейс то  усі jails підключаються до мережі через створення epairs і додавання їх до спільного bridge.
Це дозволяє  спілкуватися jails через мережу, але якщо це не потрібно ?
То можна налаштувати через системні налаштування можливість застосувати правила firewall до bridge або bridge members, це по замовчування вимкнено.
Є завдання не дозволити мережеве спілкування окремим jails за допомогою функціоналу PRIVATE members of brigde.
A private interface does not forward any traffic to any other port that is also designated as a private interface. The traffic is blocked unconditionally so no Ethernet frames will be forwarded, including ARP packets.
private bridge member

Для додавання значення private до vnet members of bridge було створено скрипт (/root/test/pstart.sh).
#!/bin/sh
maxloop=20
BRIDGE="bridge0"
while [ "${maxloop}" -ne "0" ]
do
  if [ ! -z "`/sbin/ifconfig ${BRIDGE} | /usr/bin/grep 'member: vnet' | /usr/bin/grep -v PRIVATE`" ]; then
    /sbin/ifconfig ${BRIDGE} | /usr/bin/grep member: |/usr/bin/grep -v PRIVATE | awk '{ print $2 }' | /usr/bin/grep 'vnet' | xargs -I % ifconfig ${BRIDGE} private %
    break
  else
    sleep 1
    maxloop=`expr $maxloop - 1` 
   fi
done
Його потрібно запускати перед запуском або після запуску jail у випадку використання iocage.
./pstart.sh&
iocage start foo
Таким чином скрипт запускається у фоні і чекає створення інтерфейсу vnet до 20 сек, як тільки інтерфейс буде створений  скрипт додає відповідне значення private.

Додатково, є метод використовувати автоматичний запуск налаштувань з використання параметра exec_poststart jail.

Але є особливість  використання exec_poststart - те що він повинен закінчити роботу з кодом 0, а також jail чекає закінчення роботи усіх підлеглих процесів.
Тому я застосував не гарний але робочий трюк - використати системний планувальник at котрий запускається через cron за замовчуванням кожні 5 хвилин.
iocage set exec_poststart='/usr/bin/at -f /root/test/pstart.sh now' foo
iocage start foo
* Starting foo
  + Started OK
  + Configuring VNET OK
  + Starting services OK 
Результати роботи налаштувань:
example of result 1
example of result 2, added Private
negative test ping jail foo to jail faa
negative test ping jail faa to jail foo
positive test ping from jail faa to other non private jail


Буду радий на кращі пропозиції ...

Немає коментарів:


Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready