Comments 35
Ой зря вы реальный токен бота оставили и в картинках, и в текстах...
![устоять было невозможно :] устоять было невозможно :]](https://habrastorage.org/getpro/habr/upload_files/c19/a87/90f/c19a8790fa029d03c79942b62d72ca81.png)
Что такое "пароль на ssh", если календарь показывает 2024-й год уже?
Это технологии древних
Это такой секрет доступа, который человек способен запомнить (а не хранить на каком-либо носителе).
Это такая штука, которая нужна, когда умирает единственный носитель ключа… Хотя здесь скорее пароль VNC
Судя по отчёту fail2ban за последние сутки, на мой сервер с логином ломились 1734 раза.
Авторизация по логину отключена.
Это мне надо будет 1734 раза нажать кнопку "Запретить"? Работать то когда?
Подобные способы реализации двухфакторной авторизации — это отстрел лица. Насквозь. Пуля почувствуется в момент когда телега решит прилечь.
Чем SSH-ключи не угодили?
Возможно я не прав... но:
0. ssh и пароль в 2024 году нужно считать "днем открытых дверей".
1. По моим наблюдениям, с какого устройства подключаются на ssh, на нем же и TG запущен. Для удобства. Хотя бы в браузере. Контроль над TG будет получен одновременно с ключами.
2. Если TG ляжет (по любой причине), то контроль по ssh будет потерян.
ssh и пароль в 2024 году нужно считать "днем открытых дверей".
Только SSH или любой парольный доступ к любым сервисам?
Так вроде как пароль в 24 символа надо подбирать много тысяч лет. У меня есть штук 5 тестовых серверов где о ужас доступ по ssh у рута по паролю и стоит нотификация о подключении в телегу. За 4 года я не видел неавторизованных доступов. Как такое может быть?
Ошибка выжившего? :)
А вообще я везде по ключам хожу только и порты открываю себе Port Knock-ом.
А можете указать на хороший гайд где описывается настройка уведомлений о подключениях через телегу?
https://github.com/vdeville/ssh-login-alert-telegram
а для sftp нет такого?
Вы можете заменить содержимоеtelegram_auth.py
из статьи на это, будут просто уведомления о логине по ssh и sftp.
Скрытый текст
#!/usr/bin/env python3
import requests
import sys
import os
# Укажите ваш токен бота и chat_id
TELEGRAM_BOT_TOKEN = "SET"
CHAT_ID = "SET"
# Получение информации о пользователе
def get_ssh_info():
user = os.getenv('PAM_USER', 'Unknown')
rhost = os.getenv('PAM_RHOST', 'Unknown')
service = os.getenv('PAM_SERVICE', 'Unknown')
tty = os.getenv('PAM_TTY', 'Unknown')
return user, rhost, service, tty
# Функция отправки сообщения в Telegram
def send_telegram_message(message):
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": message,
}
try:
response = requests.post(url, json=payload)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"Failed to send message: {e}")
sys.exit(1)
# Основная логика выполнения
if __name__ == "__main__":
user, rhost, service, tty = get_ssh_info()
message = f"🔔 SSH Login Alert 🔔\nUser: {user}\nRemote Host: {rhost}\nService: {service}\nTTY: {tty}"
send_telegram_message(message)
Это интересно 🧐
Отключайте ssh доступ у рута, а стучитесь через обычного пользователя и потом используйте
su -
илиsudo
. Если у вас утечёт только пароль/ключ, то для получения доступа злоумышленнику придётся ещё и имя пользовательской учётки угадывать, а у вас будет время сменить скомпрометированные учётные данные. Не ахти что, но хоть что-то.Используйте ключи вместо паролей для доступа через ssh
Второй фактор (не только в ssh, а вообще) через телегу/смс/электронную почту/другой сервис живёт до тех пор, пока этот сервис вам предоставляет услуги. Телега забанила ваш бот по желанию левой пятки, телефон отключен за неуплату (забыли/уехали/оператор прилёг), ваш почтовый ящик попал спам-лист и приехали. TOTP гораздо надёжней и секурней. Да, всяким бабушкам проще через смс OTP получать, но мы тут обсуждаем продвинутые вещи, вроде ssh.
Учимся пользоваться fail2ban или похожими инструментами
Советы очень классные, может быть у вас есть пример конфигурации для тераформа?)
Второй фактор (не только в ssh, а вообще) через телегу/смс/электронную почту/другой сервис живёт до тех пор, пока этот сервис вам предоставляет услуги.
Есть мессанджеры, которые не требуют чьих-то услуг и легко резервируются. Например, Jami.
COTP плох тем, что теоретически его можно перехватить. И потом, подключать всякие сервисы, боты для отправки, которые потом меняют апи - не ахти как удобно. А при TOTP никуда ничего отправлять не надо. Один раз настроил и всё.
Огромное спасибо за рекомендацию Jami, очень годная и интересная штука оказалась)
Хорошая реализация, а сколько было уже тревожных логинов? Я весной после дорогостоящего взлома инфраструктуры, также сделал 2FA через Тележку, но только для запуска bash через sudo - все остальное недоступно теперь в принципе. В итоге, в случае проблем с ботом у меня остается возможность использовать su с паролем. А в бот приходит pin код требуемый для запуска оболочки
Такой вид *бутки администратора* сойдёт как для галочки, но всёже надо креативнее и надёжнее, ну или просто надёжно :)
Имхо, лучше otp/totp для 2fa использовать, благо носителей уже вагон и маленькая тележка.
И для любого варианта прокатит (pass / key / key+pass) + otp
Как настроить двухфакторную аутентификацию через Telegram для SSH