Один из наиболее распространенных вопросов начинающих работу с OpenStack пользователей является сбой установки соответствующей группы безопасности при запуске экземпляра. В результате пользователи не могут взаимодействовать с экземпляром по сети.
Группы безопасности являются наборами правил фильтрации IP, которые применяются к сетевым средствам экземпляра. Они являются специфическими для проектов и, следовательно, члены проекта могут редактировать установленные по умолчанию правила для своей группы, а также добавлять новые множества правил. Все проекты имеют "установленную по умолчанию" группу безопасности, которая применяется к экземплярам, для которых не определена никакая другая группа безопасности. Пока она не изменена, эта группы безопасности отклоняет весь входящий трафик.
Параметр nova.conf
allow_same_net_traffic
(по умолчанию имеющий значение true
) глобально управляет тем, применяются ли
правила к совместно использующим сеть хостам. Будучи установленным в значение
true
(истинно), хосты из той же подсети не фильтруются и разрешены
все типы обмена данными между ними. В однородной сети это разрешает нефильтруемое взаимодействие
всем экземплярам всех проектов. При использовании сетевого окружения с виртуальными сетями это
делает возможным взаимодействие между экземплярами в пределах одного проекта.
Когда значение allow_same_net_traffic
установлено в
false
, ко всем соединениям применяются группы безопасности.
В данном случае проекты могут имитировать allow_same_net_traffic
путем
настройки своих групп безопасности по умолчанию, разрешая весь трафик в своей подсети.
Совет | |
---|---|
Как отмечено в предыдущей главе,число правил в группе безопасности управляется
|
Группы безопасности для данного конкретного проекта могут быть найдены в инструментальной панели OpenStack в разделе Access & Security. Для просмотра деталей существующей группы выберите действие edit (редактирование) для данной группы безопасности. Понятно, что изменение существующих групп может быть выполнено из этого интерфейса edit. Существует на главной странице Access & Security для создания новых групп кнопка . Мы обсудим используемые в этих полях термины по мере объяснения эквивалентов командной строки.
Вы можете получить список групп безопасности для определенного проекта, с которым вы работаете
в настоящее время, выполнением команды nova
в командной строке:
$ nova secgroup-list +---------+-------------+ | Name | Description | +---------+-------------+ | default | default | | open | all ports | +---------+-------------+
Для просмотра деталей группы безопасности "open":
$ nova secgroup-list-rules open +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | 255 | 0.0.0.0/0 | | | tcp | 1 | 65535 | 0.0.0.0/0 | | | udp | 1 | 65535 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Все приводимые правила являются правилами "разрешающего" (allow) типа, хотя по умолчанию установлены запрещающие (deny). Первый столбец является типом протокола IP (один из icmp, tcp или udp), а второй и третий столбцы описывают подвергаемый действию диапазон портов. Четвертый столбец определяет диапазон IP в формате CIDR. Данный пример демонстрирует полный диапазон портов для всех протоколов, разрешаемых всем IP адресам.
При добавлении новой группы безопасности вы должны выбрать описательное,
но краткое имя. Это имя появляется в кратких описаниях экземпляров,
которые используют его там, где большие поля описания часто не доступны.
Видя, что экземпляр использует группу безопасности http
,
будет гораздо легче понять ее назначение, чем в случае ее именования bobs_group
или secgrp1
.
В качестве примера, давайте создадим группу безопасности, которая позволяет веб-трафик
повсеместно в интернете. Мы будем называть ее global_http
,
что ясно и разумно кратко и при этом содержит информацию о том, что разрешено и откуда.
В командной строке выполните:
$ nova secgroup-create \ global_http "allow web traffic from the Internet" +-------------+-------------------------------------+ | Name | Description | +-------------+-------------------------------------+ | global_http | allow web traffic from the Internet | +-------------+-------------------------------------+
Это создает пустую группу безопасности. Чтобы заставить ее выполнять то, что нужно нам, мы должны добавить некоторые правила:
$ nova secgroup-add-rule <secgroup> <ip-proto> <from-port> <to-port> <cidr> $ nova secgroup-add-rule global_http tcp 80 80 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 80 | 80 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Обратите внимание, что все аргументы являются позиционными, а аргумент
from-port
и аргумент to-port
определяют диапазон разрешенных соединений локальных портов. Эти аргументы
не обозначают порты источника и получателя в соединении. Более
сложные наборы правил могут быть построены посредством множественных вызовов
nova secgroup-add-rule
. Например, если вы хотите
обмениваться и http, и https трафиком, выполните следующее:
$ nova secgroup-add-rule global_http tcp 443 443 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 443 | 443 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Несмотря на вывод только вновь добавленного правила последняя операция аддитивная:
$ nova secgroup-list-rules global_http +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 80 | 80 | 0.0.0.0/0 | | | tcp | 443 | 443 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Обратная операция называется secgroup-delete-rule
и использует тот же формат. C помощью secgroup-delete
могут быть удалены группы безопасности целиком.
Чтобы создать правила группы безопасности для кластера экземпляров вы захотите воспользоваться SourceGroups.
SourceGroup представляют собой особый динамический способ определения в формате CIDR разрешенных источников. Пользователь описывает SourceGroup (имя группы безопасности) и все другие использующие определенную SourceGroup экземпляры пользователя выбираются динамически. Такой динамический выбор избавляет от необходимости в индивидуальных правилах для каждого нового члена cluster.
Код коструируется подобно такому: nova
secgroup-add-group-rule <secgroup> <source-group>
<ip-proto> <from-port> <to-port>
.
Ниже приводится пример использования:
$ nova secgroup-add-group-rule cluster global-http tcp 22 22
Правило "cluster" делает возможным SSH доступ из любого другого экземпляра, который
использует группу global-http
.