Как настроить Endlessh Tarpit на Ubuntu 22.04

Автор выбрал Фонд свободного и открытого исходного кода для получения пожертвования в рамках программы Напишите в поддержку.

Введение

При просмотре журналов аутентификации вы можете увидеть несколько неудачных попыток входа с различных IP-адресов. Эти неудачные попытки входа часто происходят с узла ботнета, который сканирует весь веб в поисках уязвимых серверов с учетными данными по умолчанию. Хотя большинство людей будут иметь безопасный пароль или ключи SSH, предотвращающие вход атакующих на их сервер, некоторые серверы могут быть уязвимы для такого сканирования. Хотя вы не сможете полностью остановить эти атаки, вы можете замедлить их с помощью тар-ям.

В этом руководстве вы установите и настроите Endlessh, тар-ям, который медленно отправляет бесконечно длинный баннер любому пользователю, пытающемуся войти. Вы также настроите службу SSH для запуска на другом порту, что сделает ваши журналы аутентификации более читаемыми.

После завершения этого руководства вы сможете подключаться к своему серверу на нестандартном порту, в то время как любые сканирующие ваш сервер боты обнаружат, что их время тратится впустую, стуча в дверь, которая никогда не откроется.

Предварительные требования

Для завершения этого руководства вам понадобится следующее:

  • Сервер Ubuntu с непривилегированным пользователем sudo, брандмауэром и как минимум 1 ГБ оперативной памяти, который вы можете настроить, следуя руководству Начальная настройка сервера с Ubuntu 22.04.
  • Установленный на вашем сервере Git, который вы можете завершить с помощью руководства по установке Git.

Шаг 1 – Перемещение SSH на нестандартный порт

На этом этапе вы переместите SSH на нестандартный порт, чтобы освободить порт для Endlessh. Поскольку ботнеты не располагают бесконечными ресурсами, они обычно сканируют только стандартный порт SSH (22). Переместив свой SSH на нестандартный порт, вы можете запереть бота в ловушке Endlessh.

Для начала создайте резервную копию файла конфигурации SSH с вашего сервера с помощью следующей команды:

  1. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Этот файл можно использовать для восстановления исходных настроек, если что-то не работает, или если вы решите вернуть SSH на стандартный порт.

Откройте файл конфигурации SSH /etc/ssh/sshd_config с помощью nano или вашего любимого текстового редактора:

  1. sudo nano /etc/ssh/sshd_config

Найдите строку #Port 22. Раскомментируйте эту строку, удалив символ #, а затем измените порт на неиспользуемый порт на вашем сервере:

/etc/ssh/sshd_config
...
Port 2222
...

Примером обычно неиспользуемого порта является 2222. Вы можете выбрать любой порт для ваших повторяющихся SSH-подключений. Сохраните и закройте файл.

Если на вашем сервере используется брандмауэр, такой как ufw, вам потребуется разрешить трафик на новый порт:

  1. sudo ufw allow 2222/tcp

Затем перезапустите службу SSH:

  1. sudo systemctl restart sshd

В отдельной сессии терминала попробуйте подключиться к вашему серверу, используя новый порт:

  1. ssh sammy@your_server_ip -p 2222

Предупреждение: Не закрывайте ваше активное SSH-соединение, пока не подтвердите, что можете использовать SSH на новом порте. Если вы не можете подключиться через новый порт, вы рискуете потерять доступ к вашему серверу, закрыв сеанс. Если вы не можете подключиться к вашему серверу в отдельной сессии терминала, вы можете восстановить ваши исходные настройки SSH, выполнив следующие команды:

  1. sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
  2. sudo systemctl restart sshd

Если у вас возникнут дополнительные проблемы, проверьте, что служба sshd успешно перезапустилась, и пересмотрите настройки вашего брандмауэра, чтобы убедиться, что порт 2222 принимает трафик TCP.

Как только вы убедитесь, что можете установить новое соединение с портом 2222, вы можете безопасно закрыть ваш исходный терминал. При подключении к вашему серверу в будущем вам всегда нужно будет указывать новый порт, например, так:

  1. ssh sammy@your_server_ip -p 2222

Теперь, когда вы успешно переместили SSH на нестандартный порт, пришло время настроить Endlessh.

Шаг 2 – Установка Endlessh

Endlessh не имеет официального пакета, поэтому вы склонируете репозиторий, чтобы собрать его вручную. Вы будете использовать Git для клонирования репозитория, пакет build-essential (для компиляции проекта) и пакет libc6-dev.

Установите необходимые пакеты, используя менеджер пакетов apt:

  1. sudo apt install build-essential libc6-dev

Подтвердите установку, введя y, когда будет запрос.

Затем склонируйте репозиторий Endlessh с GitHub в ваш домашний каталог:

  1. git clone https://github.com/do-community/endlessh

Перейдите в каталог проекта и используйте команду make для компиляции Endlessh:

  1. cd endlessh
  2. make

Теперь вы можете запустить Endlessh с помощью следующей команды:

  1. sudo ./endlessh -v -p 22

Для проверки работы Endlessh вы можете попробовать установить SSH-соединение с портом 22 с флагом -v для отображения бесконечного баннера. В новом окне терминала установите SSH-соединение с портом 22 с помощью одной из следующих команд:

  1. ssh sammy@your_server_ip -v
  1. ssh sammy@your_server_ip -p 22 -v

Когда ваша новая SSH-сессия попытается подключиться к порту 22, вы увидите строку случайных символов появляющихся в терминале соединения каждые 10 секунд до закрытия сессии, как показано ниже:

Output
debug1: 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:

  1. sudo mv ./endlessh /usr/local/bin/

Введите ваш пароль, если потребуется.

Скопируйте файл службы из проекта в каталог /etc/systemd/system:

  1. sudo cp util/endlessh.service /etc/systemd/system/

Вы немного измените файл службы, чтобы запустить Endlessh на портах ниже 1024. Откройте файл службы в nano или вашем любимом текстовом редакторе:

  1. sudo nano /etc/systemd/system/endlessh.service

Найдите раздел о запуске Endlessh на портах ниже 1024.

Обновите файл, удалив # в начале строки с AmbientCapabilities=CAP_NET_BIND_SERVICE и добавив # в начале строки PrivateUsers=true, так:

/etc/systemd/system/endlessh.service
...
## Если вы хотите, чтобы 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:

  1. sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh

Вам нужно будет определить файл конфигурации для Endlessh, чтобы указать ему, какой порт использовать. Создайте и откройте файл конфигурации с именем /etc/endlessh/config:

  1. sudo mkdir /etc/endlessh
  2. sudo nano /etc/endlessh/config

В конфигурационном файле укажите порт для использования как 22:

/etc/endlessh/config
Port 22

Сохраните и закройте файл.

Теперь вы можете запустить службу Endlessh постоянно:

  1. sudo systemctl --now enable endlessh

Включение --now enable сделает службу постоянной после перезагрузки сервера.

Чтобы проверить успешный запуск службы, вы можете использовать команду systemctl status:

  1. sudo systemctl status endlessh

Если служба запущена успешно, вы увидите такой вывод:

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 в новой сессии терминала:

  1. ssh sammy@your_server_ip

Поскольку ваш тарпит запущен, новая сессия терминала не сможет подключиться и будет работать бесконечно, пока не будет остановлена вручную с помощью Ctrl+C в подключенном терминале.

Если вы хотите остановить работу службы, вы можете использовать следующую команду:

  1. sudo systemctl --now disable endlessh

После остановки службы вы можете использовать инструкции по восстановлению 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