Letmein — это простой блокировщик портов с простым и безопасным механизмом аутентификации. Его можно использовать для защиты от атак с предварительной аутентификацией на такие службы, как SSH, VPN, IMAP и многие другие.
Letmein скрывает службы на сервере за барьером аутентификации, чтобы уменьшить поверхность атаки службы. Служба не будет доступна, если проверка подлинности не будет успешной. В случае успешного сбивания сервер letmeind откроет сбитый порт только для IP-адреса клиента, выполнившего сбивание. Машины с разными IP-адресами по-прежнему не будут иметь доступа к защищенному сервису.
Компьютеры, которые не смогут успешно аутентифицировать последовательность ударов, не смогут получить доступ к защищенной службе. Они получат reject
ICMP на защищенном сервисном порту с указанным примером nftables.conf
. (Вместо этого вы также можете drop
пакеты в вашем nftables.conf
).
Для Letmein требуется брандмауэр на базе nftables
. С iptables
он не будет работать. Если вы используете брандмауэр на основе iptables
, перед установкой letmein преобразуйте его в nftables
. В интернете есть описания как это сделать. Это не так сложно и много работы, как кажется. :)
Сам канал управления Letmein по умолчанию использует порт TCP 5800, но его можно настроить на любой порт TCP или UDP. Если вы выберете порт UDP в качестве порта управления и настроите control-error-policy=basic-auth, то сама служба letmein будет работать в скрытом режиме и не будет отвечать на неаутентифицированные входящие сообщения.
Домашняя страница
Git-репозиторий
Репозиторий на Гитхабе
На сервере установите серверное программное обеспечение Letmein (см. разделы ниже).
На клиенте установите клиентское программное обеспечение Letmein (см. разделы ниже).
Пожалуйста, прочтите пример файла конфигурации nftables.conf, прилагаемый к этому проекту. Требуется добавить цепочку ввода, специфичную для Letmein, в существующую конфигурацию nftables
. Измените файл nftables.conf
соответствующим образом.
Сгенерируйте общий секретный ключ и идентификатор пользователя для установки на сервере и клиенте с помощью следующей клиентской команды:
letmein gen-key -u 00000000
Команда gen-key выведет на консоль сгенерированную строку ключа. По умолчанию будет сгенерирован безопасный случайный ключ для идентификатора пользователя 00000000
. При желании вы можете вручную отредактировать идентификатор пользователя или просто оставить его как есть.
Добавьте сгенерированную строку (идентификатор пользователя и общий секрет) в конфигурацию сервера в /opt/letmein/etc/letmeind.conf
. Поместите сгенерированную строку ключа вместе с идентификатором пользователя в раздел [KEYS]
файла конфигурации.
Добавьте ту же сгенерированную строку (идентификатор пользователя и общий секретный ключ) в конфигурацию клиента в /opt/letmein/etc/letmein.conf
. Поместите сгенерированную строку ключа вместе с идентификатором пользователя в раздел [KEYS]
файла конфигурации.
Создайте на сервере resource
, описывающий порт sshd
, который можно открыть. В разделе [RESOURCES]
файла конфигурации сервера /opt/letmein/etc/letmeind.conf
должны быть указаны все порты, которые могут быть открыты. Ресурс состоит из идентификатора ресурса, за которым следует идентификатор порта, например:
[RESOURCES]
00000022 = port: 22
Идентификатор ресурса представляет собой 8-значное шестнадцатеричное число. В данном примере это 22 (шестнадцатеричное), но это может быть любое число. Просто это должен быть один и тот же номер на сервере и клиенте. После port:
указывается номер порта (в десятичном формате), который можно открыть.
Добавьте тот же ресурс с тем же идентификатором ресурса и тем же номером порта в конфигурацию клиента в /opt/letmein/etc/letmein.conf
.
Перезапустите сервер Letmein:
systemctl restart letmeind.service
Теперь удалите статический порт sshd
(22) из конфигурации accept
nftables.conf
. Letmein динамически установит такое правило в цепочку ввода letmein после успешной аутентификации. Затем перезапустите nftables:
systemctl restart nftables.service
Сделанный! Теперь вы сможете открыть sshd
-порт на своем сервере:
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
Чтобы автоматически отключать порт перед подключением по ssh, вы можете добавить правило Match exec
в файл ~/.ssh/config
:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
См. инструкции по установке для получения дополнительной информации о том, как собрать и установить letmein.
Если вы хотите полностью удалить letmein из своей системы, прочтите инструкции по удалению.
Клиентское приложение letmein
является переносимым и должно работать на всех основных платформах. Протестированные платформы:
Серверное приложение letmeind
предназначено только для Linux, поскольку оно поддерживает только nftables
в качестве серверной части брандмауэра.
Подробную информацию о настройке сервера и клиента Letmein см. в документации по конфигурации.
Обратите внимание, что идентификаторы пользователей и идентификаторы ресурсов из файлов конфигурации передаются по сети без шифрования в открытом виде.
Убедитесь, что идентификаторы пользователей и идентификаторы ресурсов не содержат никакой личной информации.
Эти идентификаторы предназначены просто для абстрактной идентификации для управления различными ключами, установками и настройками letmein
.
Основные цели дизайна Letmein:
-4
и -6
.Дополнительную информацию о безопасности и сообщениях об уязвимостях см. в документации по безопасности letmein.
Авторские права (c) 2024 г. Михаэль Бюш [email protected]
Лицензия Apache версии 2.0 или лицензия MIT, по вашему выбору.