Автор выбрал Фонд свободного и открытого исходного кода для получения пожертвования в рамках программы Напишите в поддержку.
Введение
При просмотре журналов аутентификации вы можете увидеть несколько неудачных попыток входа с различных IP-адресов. Эти неудачные попытки входа часто происходят с узла ботнета, который сканирует весь веб в поисках уязвимых серверов с учетными данными по умолчанию. Хотя большинство людей будут иметь безопасный пароль или ключи SSH, предотвращающие вход атакующих на их сервер, некоторые серверы могут быть уязвимы для такого сканирования. Хотя вы не сможете полностью остановить эти атаки, вы можете замедлить их с помощью тар-ям.
В этом руководстве вы установите и настроите Endlessh, тар-ям, который медленно отправляет бесконечно длинный баннер любому пользователю, пытающемуся войти. Вы также настроите службу SSH для запуска на другом порту, что сделает ваши журналы аутентификации более читаемыми.
После завершения этого руководства вы сможете подключаться к своему серверу на нестандартном порту, в то время как любые сканирующие ваш сервер боты обнаружат, что их время тратится впустую, стуча в дверь, которая никогда не откроется.
Предварительные требования
Для завершения этого руководства вам понадобится следующее:
- Сервер Ubuntu с непривилегированным пользователем sudo, брандмауэром и как минимум 1 ГБ оперативной памяти, который вы можете настроить, следуя руководству Начальная настройка сервера с Ubuntu 22.04.
- Установленный на вашем сервере Git, который вы можете завершить с помощью руководства по установке Git.
Шаг 1 – Перемещение SSH на нестандартный порт
На этом этапе вы переместите SSH на нестандартный порт, чтобы освободить порт для Endlessh. Поскольку ботнеты не располагают бесконечными ресурсами, они обычно сканируют только стандартный порт SSH (22
). Переместив свой SSH на нестандартный порт, вы можете запереть бота в ловушке Endlessh.
Для начала создайте резервную копию файла конфигурации SSH с вашего сервера с помощью следующей команды:
Этот файл можно использовать для восстановления исходных настроек, если что-то не работает, или если вы решите вернуть SSH на стандартный порт.
Откройте файл конфигурации SSH /etc/ssh/sshd_config
с помощью nano или вашего любимого текстового редактора:
Найдите строку #Port 22
. Раскомментируйте эту строку, удалив символ #
, а затем измените порт на неиспользуемый порт на вашем сервере:
...
Port 2222
...
Примером обычно неиспользуемого порта является 2222
. Вы можете выбрать любой порт для ваших повторяющихся SSH-подключений. Сохраните и закройте файл.
Если на вашем сервере используется брандмауэр, такой как ufw
, вам потребуется разрешить трафик на новый порт:
Затем перезапустите службу SSH:
В отдельной сессии терминала попробуйте подключиться к вашему серверу, используя новый порт:
Предупреждение: Не закрывайте ваше активное SSH-соединение, пока не подтвердите, что можете использовать SSH на новом порте. Если вы не можете подключиться через новый порт, вы рискуете потерять доступ к вашему серверу, закрыв сеанс. Если вы не можете подключиться к вашему серверу в отдельной сессии терминала, вы можете восстановить ваши исходные настройки SSH, выполнив следующие команды:
Если у вас возникнут дополнительные проблемы, проверьте, что служба sshd
успешно перезапустилась, и пересмотрите настройки вашего брандмауэра, чтобы убедиться, что порт 2222
принимает трафик TCP.
Как только вы убедитесь, что можете установить новое соединение с портом 2222
, вы можете безопасно закрыть ваш исходный терминал. При подключении к вашему серверу в будущем вам всегда нужно будет указывать новый порт, например, так:
Теперь, когда вы успешно переместили SSH на нестандартный порт, пришло время настроить Endlessh.
Шаг 2 – Установка Endlessh
Endlessh не имеет официального пакета, поэтому вы склонируете репозиторий, чтобы собрать его вручную. Вы будете использовать Git для клонирования репозитория, пакет build-essential
(для компиляции проекта) и пакет libc6-dev
.
Установите необходимые пакеты, используя менеджер пакетов apt:
Подтвердите установку, введя y
, когда будет запрос.
Затем склонируйте репозиторий Endlessh с GitHub в ваш домашний каталог:
Перейдите в каталог проекта и используйте команду make
для компиляции Endlessh:
Теперь вы можете запустить Endlessh с помощью следующей команды:
Для проверки работы Endlessh вы можете попробовать установить SSH-соединение с портом 22
с флагом -v
для отображения бесконечного баннера. В новом окне терминала установите SSH-соединение с портом 22
с помощью одной из следующих команд:
Когда ваша новая SSH-сессия попытается подключиться к порту 22
, вы увидите строку случайных символов появляющихся в терминале соединения каждые 10 секунд до закрытия сессии, как показано ниже:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
После того как вы подтвердите, что все работает, попытавшись подключиться с новой сессией, вы можете закрыть новый терминал и остановить Endlessh, используя Ctrl+C
в вашем исходном терминальном сеансе.
На этом этапе вы загрузили и построили Endlessh из исходного кода. Далее вы настроите его и развернете как сервис, чтобы он сохранялся после завершения сеанса и перезапуска сервера.
Шаг 3 – Настройка Endlessh
На этом этапе вы настроите Endlessh как службу, которая будет сохраняться после завершения вашего сеанса и перезапуска системы.
Переместите скомпилированный бинарный файл в каталог /usr/local/bin
:
Введите ваш пароль, если потребуется.
Скопируйте файл службы из проекта в каталог /etc/systemd/system
:
Вы немного измените файл службы, чтобы запустить Endlessh на портах ниже 1024
. Откройте файл службы в nano или вашем любимом текстовом редакторе:
Найдите раздел о запуске Endlessh на портах ниже 1024
.
Обновите файл, удалив #
в начале строки с AmbientCapabilities=CAP_NET_BIND_SERVICE
и добавив #
в начале строки PrivateUsers=true
, так:
...
## Если вы хотите, чтобы Endlessh привязывался к портам < 1024
## 1) выполните:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) раскомментируйте следующую строку
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) закомментируйте следующую строку
#PrivateUsers=true
...
Сохраните и закройте файл.
Далее вы разрешите Endlessh работать на портах ниже 1024
, также известных как привилегированные порты интернет-домена. Установите это свойство для бинарного файла Endlessh с помощью команды setcap
:
Вам нужно будет определить файл конфигурации для Endlessh, чтобы указать ему, какой порт использовать. Создайте и откройте файл конфигурации с именем /etc/endlessh/config
:
В конфигурационном файле укажите порт для использования как 22
:
Port 22
Сохраните и закройте файл.
Теперь вы можете запустить службу Endlessh постоянно:
Включение --now enable
сделает службу постоянной после перезагрузки сервера.
Чтобы проверить успешный запуск службы, вы можете использовать команду systemctl status
:
Если служба запущена успешно, вы увидите такой вывод:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
Если она работает, вы можете попытаться подключиться к порту 22
в новой сессии терминала:
Поскольку ваш тарпит запущен, новая сессия терминала не сможет подключиться и будет работать бесконечно, пока не будет остановлена вручную с помощью Ctrl+C
в подключенном терминале.
Если вы хотите остановить работу службы, вы можете использовать следующую команду:
После остановки службы вы можете использовать инструкции по восстановлению SSH из предупреждения Шага 1, чтобы восстановить вашу исходную конфигурацию сервера. Вы можете снова включить службу с помощью sudo systemctl --now enable endlessh
без повторения процесса настройки, но убедитесь, что SSH не запущен на порту 22
, когда вы это делаете.
Заключение
Вы успешно установили и настроили Endlessh, помогли очистить ваши журналы аутентификации и готовы тратить время случайных SSH-ботов.
После настройки вашей “Endlessh” тарпита ознакомьтесь с другими Рекомендуемыми мерами безопасности для защиты ваших серверов.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04