Регистрация попыток доступа по SSH


60

Я настроил сервер Ubuntu с помощью openssh, чтобы подключаться к нему и выполнять команды из удаленной системы, такой как телефон или ноутбук. Проблема в том ... Я, наверное, не единственный.

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


Вам также следует рассмотреть возможность запуска sshd на нестандартном порту. Кроме того, можно настроить iptables для запрета новых попыток подключения, если один IP-адрес пытается установить новое соединение ssh X раз в минуту.
ivanivan

Для меня проблема была не в fail2ban, а в sshguard, о чем я никогда не слышал
Рэй Фосс

Ответы:


55

На серверах Ubuntu вы можете найти, кто вошел в систему, когда (и откуда) в файле /var/log/auth.log. Там вы найдете записи вроде:

May  1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)

2
Из любопытства, есть ли lastbкоманда в Ubuntu ?
Братчли

1
@JoelDavis Мой Ubuntu 12.04 делает, но вывод - это одна строка, которая совсем не похожа на ваш вывод. Может быть, это нужно настроить.
Anthon


На Ubuntu Server 14.04 и выше это должно читаться/var/log/auth.log
Серж

29

В дистрибутивах Red Hat, таких как Fedora / CentOS / RHEL, вы можете проверить, вошли ли пользователи в файл /var/log/secure.

Если вам нужна дополнительная информация, прочтите этот раздел вопросов и ответов SuperUser под названием: Как я могу регистрировать попытки доступа SSH и отслеживать, что в конечном итоге пользователи SSH делают на моем сервере? ,


1
Нет ни /var/log/secureна одной из моих систем Ubuntu.
Антон

@Антон, на удивление у меня нет /var/log/authв моих системах. Вот почему перед публикацией ответа я проверил, есть ли /var/log/secureв моей системе, которая также является сервером Ubuntu :)
Ramesh

Я проверил 14.04, 12.04 и старую машину под 8.04. Какую версию вы используете? Сделали что-нибудь особенное, чтобы получить этот файл?
Anthon

@ Anthon, получается, что сервер, на котором я тестировал, был RHEL. Однако ответ в приведенной мною ссылке был для Ubuntu, что кажется странным, поскольку вы проверили 3 варианта Ubuntu, а их нет /var/log/secure.
Рамеш

6
/var/log/secureтакое Fedora / CentOS / RHEL ism.
SLM

8

В Ubuntu вы можете войти через SSH и использовать хвостовую команду Linux, чтобы отобразить последние x строк в вашем /var/log/auth.logфайле. Когда вы вошли в систему через SSH, используйте следующую команду, чтобы просмотреть 100 последних строк вашего журнала SSH:

tail /var/log/auth.log -n 100

или даже чище

tail -100 /var/log/auth.log | grep 'sshd'

7

Обратите внимание, что конфигурация по умолчанию в Ubuntu - НЕ регистрировать логины ssh в /var/log/authфайле. Это INFOуровень ведения журнала.

Если вы хотите, чтобы он включал попытки входа в систему в файле журнала, вам нужно отредактировать /etc/ssh/sshd_configфайл (как root или с помощью sudo) и изменить значение LogLevelс INFOна на VERBOSE.

После этого перезапустите демон sshd с помощью

sudo service rsyslog restart

После этого попытки входа по ssh будут зарегистрированы в /var/log/auth.logфайле.


4

Я рекомендую использовать AuditD . Это ведение журнала с использованием подсистемы аудита ядра Linux и, на мой взгляд, правильный способ сделать это, если вы серьезно. И учитывая природу вопроса, связанного с безопасностью, вы также должны использовать PAM . На уровне по умолчанию, в котором установлены только audd и PAM , вы должны автоматически получать все успешные и неудачные попытки SSH, зарегистрированные в вашем файле audit.log. Таким образом, вам действительно не нужно ничего настраивать, просто установите audd и PAM . Я знаю это из первых рук для SLES. И поспорим, что RHEL и любая другая корпоративная версия linux будут работать аналогично.

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

в необработанном журнале аудита, сгенерированном Auditd, вы можете использовать что-то вроде aureportфильтрации, описанное на страницах руководства audd , написать собственный анализатор текста или просто использовать VI и искать ключевые слова.

Вот исключение моего /var/log/audit/audit.logфайла со мной на моем сервере Linux.

node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
  • Исходя из вышесказанного, мой сервер называется акула .
  • многие строки, подобные этой, находятся в Audit.log, я хочу эту на основе exe = "/ usr / sbin / sshd"
  • UID учетной записи, в которую входит ssh'd, является значением auid, которое в данном примере составляет 23456.
  • имя учетной записи пользователя, связанной с auid, определяется как acct = "ron"
  • В большинстве случаев система аудита записывает имя хоста DNS системы, пытающейся подключиться, но всегда имеет свой IP-адрес
  • дата записи, которая находится в эпоху времени, так что вам придется конвертировать ее через что-то вроде того, date --date @1480622612.317что приводит Thu Dec 1 15:03:32 EST 2016и когда я ssh'd на моем сервере.

Когда res=failedвы хотите исследовать эти ip-адреса и имена хостов, чтобы увидеть, какие системы пытались подключиться и под каким именем пользователя. И, очевидно, успешный ssh ​​пытается понять, что происходит в вашей системе - например, ваш коллега Боб, который ежедневно сидит за одним столом с hostname = bobscomputer и ip address = 192.168.5.5; если вы видите вчера успешную попытку ssh в 2 часа ночи под его именем пользователя с ip-адреса 10.10.5.6, то, возможно, в ваших интересах поговорить с Бобом, чтобы выяснить это. Возможна ли попытка взлома кем-то еще? И вскоре после этого su пытается получить root-права в журнале аудита из учетной записи Боба?

когда вы видите повторяющиеся res=failedи auid=0и acct=rootзатем , что кто - то пытается SSH в ваш ящик в корневой учетной записи, и при изменении /etc/hosts.denyс этим IP - адресом для SSHD.


2

Я знаю, что это старый, но я написал что-то для мониторинга успешных и неудачных соединений / попыток ssh. А также забаненные IP-адреса, если вы используете sshguard. Программное обеспечение написано на Python. Он отправит вам электронное письмо, когда кто-то успешно подключится через ssh, когда кто-то неправильно введет пароль ssh или кто-то забанен из-за множества неудачных попыток. Надеемся, что это поможет кому-то в будущем, кто ищет эту проблему и находит мой код!

https://github.com/amboxer21/SSHMonitor

Для скрипта на python я написал скрипт bash для мониторинга процесса. Он проверяет, работает ли он каждую минуту с помощью задачи root cron. Если он не запущен, запускается другой процесс. Который вызывается задачей root cron каждую минуту.


-2

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

Я написал скрипт для установки и настройки ROOTSH в Ubuntu и CentOS / RHEL

скачать с github вот ссылка

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh

Я думаю, что это плохой способ продвижения вашего профиля на github ... По сути, вы просите загрузить скрипт из Интернета и запустить его с помощью root. Downvoted
UserK

Я не рекламирую свой профиль на github, я просто попытался упростить вещи, как это делают люди выше, если вы проголосуете за то, чтобы я продвигал профиль, а также проголосуйте за них. Более того, в руководстве по правилам стекового обмена ничего не написано так, что мы не можем делиться файлами кода из личных репозиториев.
Мансур Али

Пожалуйста, прости мое плохое чувство юмора. Прежде всего спасибо за ответ Мансур. Понижение происходит из-за того, что вы просите выполнить несколько неизвестных команд от имени пользователя root. В прошлый раз, когда я сделал это, внутри был «rm -R slash».
UserK

1
Ничего страшного, кстати, стек-обмен не позволит мне использовать такие длинные коды, поэтому я включил этот скрипт в свой ответ. Linux очень прост.
Мансур Али
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.