Я новичок в 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
Может ли кто-нибудь быть таким любезным и помочь мне решить эту проблему? В идеале, применительно к любому примеру решения…
Заранее благодарю
Петр
Возможный способ сделать это - использовать 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), для которых должно использоваться это соединение (т. Е. Это позволяет использовать одну и ту же секцию соединения для нескольких пользователей).
Большое спасибо за ваш ответ. Я это протестирую.Моей первой идеей было изменить аутентификацию mschap-eap на eap-tls и использовать разные клиентские сертификаты и раздел conn для каждой группы, но я не знаю, будет ли это правильным способом.
Принятый ответ в основном работал для нас с небольшим изменением. Мы используем
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 )