Права доступа клиентов Strongswan

Я новичок в strongswan, поэтому прошу прощения за этот вопрос новичка. Я создал сервер Debian с помощью strongswan. К этому серверу подключены три сети network_1: 192.168.10.0/24, network_2: 192.168.20.0/24 и network_3 192.168.30.0/24 через маршрутизаторы Mikrotik LTE и протокол IKEv2-PSK. Вместе с этой сетью к этому серверу могут быть подключены клиенты Windows, iOS, OSX и Android по протоколу IKEv2 и аутентификации MSCHAP-EAP. Все работает без проблем, и для каждого подключенного клиента доступны все IP-адреса во всех этих трех сетях.

На данный момент я хотел бы назначить некоторые из следующих прав доступа для клиентов MSCHAP-EAP - например:

Клиент Боб / password1 должен иметь доступ только к IP-адресам в сети2 и никаким другим IP-адресам. Клиент Алиса / пароль2 должен иметь доступ только к диапазону IP-адресов 192.168.20.100–150 во второй сети и никаким другим IP-адресам. Клиент John / password3 должен иметь доступ только к диапазонам IP-адресов 192.168.30.10 - 50 и 192.168.10.150 -200 и IP-адресу 192.168.20.44

Может ли кто-нибудь быть таким любезным и помочь мне решить эту проблему? В идеале, применительно к любому примеру решения…

Заранее благодарю

Петр

0
задан 17 April 2018 в 22:14
3 ответа

Возможный способ сделать это - использовать EAP-RADIUS. Сервер radius может возвращать атрибуты класса , которые могут быть сопоставлены с конфигурациями ( правые группы в ipsec.conf или группы в swanctl.conf). Затем вы можете определить разные селекторы локального трафика для каждой из этих групп. Тестовый сценарий ikev2 / rw-eap-md5-class-radius strongSwan иллюстрирует это.

Если вы не хотите или не можете использовать EAP-RADIUS, есть способ сопоставить индивидуальный EAP идентификаторы, но это немного сложно, потому что strongSwan не полностью поддерживает переключение соединений на основе таких идентификаторов. Для этого необходимо использовать фиктивное соединение с поддельной группой. Вот как это может выглядеть в ipsec.conf:

conn eap-shared
   # options shared by all clients e.g.
   leftcert=...
   # or
   rightsourceip=...
   # or
   rightauth=eap-mschapv2

conn eap-init
   also=eap-shared
   # this config is used to do the EAP-Identity exchange and the
   # authentication of client and server
   eap_identity=%identity
   # the following is used to force a connection switch after
   # the authentication completed
   rightgroups=<any string that is not used as group/class>
   auto=add

conn eap-bob
   also=eap-shared
   eap_identity=bob@strongswan.org
   # any options that only apply to this user follow here e.g.
   leftsubnet=192.168.20.0/24
   auto=add

conn eap-alice
   also=eap-shared
   eap_identity=alice@strongswan.org
   # any options that only apply to this user follow here e.g.
   # (note that ipsec.conf does not support ranges, and most kernel
   #  interfaces do neither, so a range might be converted to a larger
   #  subnet when installing IPsec policies, so deaggregating the range
   #  is the most accurate way to do this currently)
   leftsubnet=192.168.20.100/30,192.168.20.104/29,192.168.20.112/28,192.168.20.128/28,192.168.20.144/30,192.168.20.148/31,192.168.20.150/32
   auto=add

conn eap-john
   also=eap-shared
   eap_identity=john@strongswan.org
   # any options that only apply to this user follow here e.g.
   # (see above)
   leftsubnet=192.168.30.10/31,192.168.30.12/30,192.168.30.16/28,192.168.30.32/28,192.168.30.48/31,192.168.30.50/32,192.168.10.150/31,192.168.10.152/29,192.168.10.160/27,192.168.10.192/29,192.168.10.200/32,192.168.20.44/32
   auto=add

С EAP-RADIUS конфигурация будет выглядеть примерно так же, но вам не понадобится соединение eap-init (вместо этого вы бы добавили ] eap_identity =% identity в eap-shared ) и вместо определения eap_identity в каждом отдельном соединении вы должны установить правые группы для групп (т. е. Значения атрибутов класса EAP-RADIUS), для которых должно использоваться это соединение (т. Е. Это позволяет использовать одну и ту же секцию соединения для нескольких пользователей).

1
ответ дан 4 December 2019 в 15:59

Большое спасибо за ваш ответ. Я это протестирую.Моей первой идеей было изменить аутентификацию mschap-eap на eap-tls и использовать разные клиентские сертификаты и раздел conn для каждой группы, но я не знаю, будет ли это правильным способом.

0
ответ дан 4 December 2019 в 15:59

Принятый ответ в основном работал для нас с небольшим изменением. Мы используем

conn    %default
    # Settings for all conn to inherit
    # But we included this in our settings:
    auto=add

В результате принятый выше ответ «conn eap-shared» унаследовал «auto=add», что нарушает это. По умолчанию "auto=" для ipsec.conf имеет значение "auto=ignore", поэтому, если вы не установили это, используется значение по умолчанию.

Одно из исправлений состоит в том, чтобы удалить «auto=add» из «conn %default», и тогда оно станет значением по умолчанию, другое — изменить его на «auto=ignore», а третье — изменить «conn eap- shared», чтобы явно включить «auto=ignore» и ничего больше, наследуя все настройки «conn %default». Затем в «conn eap-init» добавьте «auto=add» и для каждого соединения после «also=eap-shared» также добавьте строку «auto=add»

. установил «auto = add» в «conn %default», но если вы это сделаете, я надеюсь, что это поможет вам.

Спасибо @ecdsa ( https://serverfault.com/users/95913/ecdsa ) за ответ; У меня это работало без запуска RADIUS или других служб, и теперь пользователи Windows могут сохранять свой пароль VPN.

Копирование вашего решения с внесенными изменениями:

conn %default
    # All options shared on all connections, including
    auto=add

conn eap-shared
    # Because 'conn %default' has all settings shared between all conn, just:
    auto=ignore

#And the rest is as-is, since the original already has 'auto=add' in each conn:

conn eap-init
   also=eap-shared
   # this config is used to do the EAP-Identity exchange and the
   # authentication of client and server
   eap_identity=%identity
   # the following is used to force a connection switch after
   # the authentication completed
   rightgroups=<any string that is not used as group/class>
   auto=add

conn eap-bob
   also=eap-shared
   eap_identity=bob@strongswan.org
   # any options that only apply to this user follow here e.g.
   leftsubnet=192.168.20.0/24
   auto=add

conn eap-alice
   also=eap-shared
   eap_identity=alice@strongswan.org
   # any options that only apply to this user follow here e.g.
   # (note that ipsec.conf does not support ranges, and most kernel
   #  interfaces do neither, so a range might be converted to a larger
   #  subnet when installing IPsec policies, so deaggregating the range
   #  is the most accurate way to do this currently)
   leftsubnet=192.168.20.100/30,192.168.20.104/29,192.168.20.112/28,192.168.20.128/28,192.168.20.144/30,192.168.20.148/31,192.168.20.150/32
   auto=add

conn eap-john
   also=eap-shared
   eap_identity=john@strongswan.org
   # any options that only apply to this user follow here e.g.
   # (see above)
   leftsubnet=192.168.30.10/31,192.168.30.12/30,192.168.30.16/28,192.168.30.32/28,192.168.30.48/31,192.168.30.50/32,192.168.10.150/31,192.168.10.152/29,192.168.10.160/27,192.168.10.192/29,192.168.10.200/32,192.168.20.44/32
   auto=add

Еще раз спасибо, @ecdsa ( https://serverfault.com/users/95913/ecdsa )

0
ответ дан 10 November 2020 в 09:05

Теги

Похожие вопросы