Rejestrowanie prób dostępu SSH

60

Skonfigurowałem serwer Ubuntu z openssh, aby się z nim połączyć i wykonywać polecenia ze zdalnego systemu, takiego jak telefon lub laptop. Problem w tym, że ... prawdopodobnie nie jestem jedyny.

Czy istnieje sposób, aby poznać wszystkie próby logowania do serwera?

UżytkownikK
źródło
Powinieneś także rozważyć uruchomienie sshd na niestandardowym porcie. Możliwe jest również skonfigurowanie iptables, aby odmawiał nowych prób połączenia, jeśli pojedynczy adres IP spróbuje nawiązać nowe połączenie ssh X razy w ciągu minuty.
ivanivan
Dla mnie problemem nie był fail2ban, ale sshguard, coś, o czym nigdy nie słyszałem
Ray Foss

Odpowiedzi:

55

Na serwerach Ubuntu możesz dowiedzieć się, kto zalogował się, kiedy (i skąd) w pliku /var/log/auth.log. Tam znajdziesz wpisy takie jak:

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)
Anthon
źródło
2
Z ciekawości, czy Ubuntu mają na lastbkomendę ?
Bratchley
1
@Jelelavis Mój Ubuntu 12.04 tak, ale dane wyjściowe to pojedynczy wiersz, który wcale nie wygląda jak twój wynik. Może trzeba to skonfigurować.
Anthon
Czy to jest istotne ?
Bratchley
Na Ubuntu Server 14.04 i nowszych powinno to brzmieć/var/log/auth.log
Serge Stroobandt
29

W dystrybucjach opartych na systemie Red Hat, takich jak Fedora / CentOS / RHEL, możesz sprawdzić, czy użytkownicy zalogowali się w pliku /var/log/secure.

Jeśli chcesz uzyskać więcej informacji, zapoznaj się z pytaniami i odpowiedziami SuperUser zatytułowanymi: Jak mogę rejestrować próby dostępu do SSH i śledzić, co użytkownicy SSH kończą na moim serwerze? .

Ramesh
źródło
1
Nie ma go /var/log/securena żadnym z moich systemów Ubuntu.
Anthon
@Anthon, co zaskakujące, nie mam /var/log/authw swoich systemach. Dlatego przed opublikowaniem odpowiedzi sprawdziłem, czy mam /var/log/securew swoim systemie, który jest także serwerem Ubuntu :)
Ramesh
Sprawdziłem 14.04, 12.04 i starą maszynę pod 8.04. Z której wersji korzystasz? Zrobiłeś coś specjalnego, aby uzyskać ten plik?
Anthon
@Anthon, okazuje się, że serwer, na którym testowałem, to RHEL. Jednak odpowiedź w linku, który podałem, dotyczyła Ubuntu, co wydaje się dziwne, ponieważ sprawdziłeś 3 wersje ubuntu i nie ma /var/log/secure.
Ramesh
6
/var/log/secureto ism Fedory / CentOS / RHEL.
slm
8

W systemie Ubuntu możesz zalogować się przez SSH i użyć polecenia tail Linux, aby wyświetlić ostatnią x liczbę wierszy /var/log/auth.logpliku. Po zalogowaniu przez SSH użyj następującego polecenia, aby wyświetlić 100 ostatnich wierszy dziennika SSH:

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

a nawet czystsze

tail -100 /var/log/auth.log | grep 'sshd'
WebComer
źródło
7

Zauważ, że domyślna konfiguracja Ubuntu NIE zapisuje logowań ssh do /var/log/authpliku. To jest INFOpoziom rejestrowania.

Jeśli chcesz, aby zawierała próby logowania do pliku dziennika, musisz edytować /etc/ssh/sshd_configplik (jako root lub sudo) i zmienić LogLevelz INFOna VERBOSE.

Następnie zrestartuj demona sshd za pomocą

sudo service rsyslog restart

Następnie próby logowania ssh zostaną zalogowane do /var/log/auth.logpliku.

Shay Walters
źródło
4

Polecam skorzystanie z audytu . Jest to logowanie przy użyciu podsystemu kontroli jądra Linuksa i moim zdaniem jest to właściwy sposób, jeśli mówisz poważnie. Biorąc pod uwagę naturę pytania związanego z bezpieczeństwem, powinieneś również używać PAM . Na domyślnym poziomie po zainstalowaniu audytu i PAM powinieneś automatycznie otrzymywać wszystkie udane i nieudane próby SSH zalogowane w pliku audit.log. Więc naprawdę nie musisz niczego konfigurować, wystarczy mieć audyty i PAM zainstalowane. Znam to z pierwszej ręki dla SLES. I stawiałbym RHEL oraz wszelkie inne przedsiębiorstwo wersja Linux będzie działać podobnie.

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

w surowym dzienniku kontroli wygenerowanym przez auditd możesz użyć albo czegoś w rodzaju aureportfiltrowania, co jest opisane na stronach kontrolowanych , napisać własny parser tekstu, lub po prostu użyć VI i wyszukać słowa kluczowe.

oto wyjątek od mojego /var/log/audit/audit.logpliku, w którym ssh'ing do mojego serwera 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)'
  • z powyższego nazwa mojego serwera to rekin .
  • wiele takich wierszy znajduje się w audit.log, chcę ten oparty na exe = "/ usr / sbin / sshd"
  • uid konta ssh'd to wartość auid, która w tym przykładzie wynosi 23456
  • nazwa konta użytkownika powiązanego z auid jest określona przez acct = "ron"
  • przez większość czasu system kontroli zapisuje nazwę hosta dns systemu próbującego się połączyć, ale zawsze ma on swój adres IP
  • data wpisu przypada na epokę, więc będziesz musiał przekonwertować to za pomocą czegoś takiego, date --date @1480622612.317co spowoduje Thu Dec 1 15:03:32 EST 2016i nastąpi, gdy ssh'd na mój serwer.

Kiedy res=failedchcesz sprawdzić adresy IP i nazwy hostów, aby zobaczyć, jakie systemy próbowały się połączyć, pod jaką nazwą użytkownika. I oczywiście udany ssh próbuje zrozumieć, co dzieje się w twoim systemie - na przykład twój bob współpracujący, który codziennie siedzi przy tym samym biurku z nazwą hosta = bobscomputer i adresem ip = 192.168.5.5; jeśli zobaczysz wczoraj udaną próbę ssh o 2 nad ranem pod jego nazwą użytkownika z adresu IP 10.10.5.6, na przykład może być w twoim najlepszym interesie porozmawiać z Bobem w celu zbadania. Możliwa próba włamania przez kogoś innego? A wkrótce potem są próby rootowania w dzienniku kontroli z konta boba?

kiedy widzisz powtarzalne res=failedi auid=0a acct=rootnastępnie, że ktoś próbuje ssh do swojej skrzynki do konta root, i to po zmodyfikowaniu /etc/hosts.denyz tego adresu IP dla sshd.

Ron
źródło
2

Wiem, że to stare, ale napisałem coś do monitorowania udanych i nieudanych połączeń / prób ssh. Jak również zablokowane adresy IP, jeśli używasz sshguard. Oprogramowanie jest napisane w języku Python. Prześle Ci wiadomość e-mail, gdy ktoś pomyślnie połączy się za pośrednictwem ssh, gdy ktoś pomyli hasło ssh lub gdy ktoś zostanie zbanowany z powodu wielu nieudanych prób. Mam nadzieję, że pomoże to w przyszłości komuś, kto szuka tego problemu i znajduje mój kod!

https://github.com/amboxer21/SSHMonitor

Dla skryptu python napisałem skrypt bash do monitorowania procesu. Sprawdza, czy działa co minutę za pomocą zadania root cron. Jeśli nie jest uruchomiony, uruchamia inny proces. Które są wywoływane przez zadanie root cron co minutę.

Aguevara
źródło
-2

Najlepszą rzeczą, jaką kiedykolwiek spotkałem przy logowaniu komend SSH, jest rootsh to narzędzie pozwala administratorowi uzyskać każdą komendę z każdej sesji z dużym poziomem rejestrowania.

Napisałem skrypt do instalacji i konfiguracji ROOTSH w Ubuntu i CentOS / RHEL

pobierz z github tutaj jest link

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

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
Mansur Ali
źródło
Myślę, że to zły sposób na promowanie twojego profilu github ... Zasadniczo prosisz o pobranie skryptu z sieci i wykonanie go przy użyciu roota. Downvoted
UserK
Nie promuję mojego profilu na githubie. Po prostu starałem się uprościć to, co robią ludzie powyżej, jeśli nie głosujecie na mnie za promowanie profilu. ponadto w przewodniku po regułach wymiany stosów nic nie jest napisane w ten sposób, że nie możemy udostępniać plików kodu z osobistych repozytoriów.
Mansur Ali
Proszę wybaczyć moje złe poczucie humoru. Przede wszystkim dziękuję za odpowiedź Mansur. Opinia negatywna pochodzi z faktu, że użytkownik jest proszony o wykonanie szeregu nieznanych poleceń jako użytkownik root. Ostatnim razem, gdy to zrobiłem, było w nim „rm-R slash”.
UżytkownikK
1
Jest ok, nawiasem mówiąc, wymiana stosów nie pozwoli mi na tak długie kody, dlatego umieściłem ten skrypt w mojej odpowiedzi. Linux jest bardzo prosty.
Mansur Ali