Установка Endlessh Tarpit на удаленный сервер

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

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

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

Требования

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

1: Перенос SSH на нестандартный порт

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

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

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

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

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

sudo nano /etc/ssh/sshd_config

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

...
Port 2222
...

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

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

sudo ufw allow 2222/tcp

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

sudo systemctl restart sshd

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

ssh 8host@your_server_ip -p 2222

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

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

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

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

ssh 8host@your_server_ip -p 2222

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

2: Установка Endlessh

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

Установите необходимые пакеты с помощью менеджера пакетов apt:

sudo apt install build-essential libc6-dev

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

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

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

Перейдите в каталог проекта и используйте команду make, чтобы скомпилировать Endlessh:

cd endlessh
make

Чтобы запустить Endlessh, введите такую команду:

sudo ./endlessh -v -p 22

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

ssh 8host@your_server_ip -v
ssh 8host@your_server_ip -p 22 -v

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

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:

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

Введите пароль, если система запросит его.

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

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

Давайте немного изменим service-файл, чтобы Endlessh запускался на портах ниже 1024. Откройте файл в nano или в другом текстовом редакторе:

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

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

Удалите # в начале строки AmbientCapabilities=CAP_NET_BIND_SERVICE и добавьте # в начало строки PrivateUsers=true:

...
## If you want Endlessh to bind on ports < 1024
## 1) run:
##     setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) uncomment following line
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comment following line
#PrivateUsers=true
...

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

Затем откройте Endlessh доступ к портам ниже 1024 (они также называются привилегированными портами). Предоставьте Endlessh возможность работать с помощью команды setcap:

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

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

sudo mkdir /etc/endlessh
sudo nano /etc/endlessh/config

В конфигурационном файле укажите порт 22:

Port 22

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

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

sudo systemctl --now enable endlessh

Параметр –now enable поможет сервису продолжить свою работу после перезагрузки сервера.

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

sudo systemctl status endlessh

В случае успешного запуска вы увидите такой вывод:

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

ssh 8host@your_server_ip

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

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

sudo systemctl --now disable endlessh

После остановки сервиса вы можете использовать инструкции по восстановлению SSH (предупреждение в разделе 1), чтобы вернуть исходную конфигурацию сервера. Повторно включить сервис можно с помощью команды sudo systemctl –now enable Endinfinh (при этом ничего не нужно повторно устанавливать), только при этом убедитесь, что SSH не работает на порту 22, когда вы это делаете.

Заключение

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

Tags: ,

Добавить комментарий