Регистрация попыток доступа по 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.