Назад | Перейти на главную страницу

Как определить, что удаленный сеанс ssh запущен из внешней сети?

Как я могу настроить monit, чтобы уведомлять меня о новых удаленных сеансах SSH, которые происходят из-за пределов одной конкретной подсети?

Я рассматривал попытки подключения к журналу как часть ~/.bashrc script, но я не уверен, возможно ли это, потому что я не уверен в некоторых деталях реализации.

В частности, мне нужно знать, как делать следующие вещи в ~/bashrc сценарий:

  1. Как получить IP-адрес и подсеть, связанные с новым подключением
  2. Как проверить, находится ли IP за пределами выбранной мной подсети

Я предполагаю, что сценарий может выглядеть примерно так:

# check that this is an SSH connection
# check whether the SSH connection originates outside the selected subnet
echo "New connection from $SSH_CLIENT" > /var/log/_ssh.log

Рецепт монита:

check file _ssh with path /var/log/_ssh.log
   if failed checksum then alert

Наряду с $ SSH_CLIENT есть $ SSH_CONNECTION. Чтобы увидеть доступные переменные, запустите «env» (без кавычек) в командной строке. -Тим

Вы не можете вести этот журнал из ~/.bashrc или аналогичный, потому что он выполняется только для некоторых интерактивных сеансов, а не если кто-то ssh yourserver mycommand, sftp yourserver, и т.д.

Все попытки входа в систему ssh, неудачные или успешные, регистрируются через системный журнал с auth объект. Сообщение журнала включает IP-адрес источника, метод аутентификации и информацию о том, прошла ли аутентификация. Я думаю, что ваш лучший вариант - использовать программное обеспечение для мониторинга журналов.

Я не знаю monit, но похоже, что его задача - наблюдать за sshd и перезапускать его, если он умирает, что является другой проблемой.

Я не знаю monit, но вы можете легко это сделать с помощью брандмауэра. Зарегистрируйте все внешние соединения с помощью специального тега и оставьте внутренние без регистрации. iptables - ваш друг, если вы работаете в Linux.

Вы также можете заблокировать все ssh-соединения с помощью hosts.allow / hosts.deny. Вы увидите журналы в журналах ssh.

Переменная среды $ SSH_CLIENT - это IP-адрес, удаленный порт и локальный порт текущего сеанса SSH пользователя.

Тем не менее, почему бы вам просто не отбросить все из любой другой подсети, кроме безопасной? Избавит вас от лишних хлопот.

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