Установка 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: Endlessh, SSH