Mencatat upaya akses SSH

60

Saya telah mengkonfigurasi server ubuntu dengan openssh agar dapat terhubung dan menjalankan perintah dari sistem jarak jauh seperti telepon atau laptop. Masalahnya adalah ... Saya mungkin bukan satu-satunya.

Apakah ada cara untuk mengetahui semua upaya login yang telah dilakukan ke server?

UserK
sumber
Anda juga harus mempertimbangkan menjalankan sshd pada port non-standar. Juga, dimungkinkan untuk mengatur iptables untuk menolak upaya koneksi baru jika IP tunggal mencoba koneksi ssh baru X kali dalam satu menit.
ivanivan
Bagi saya masalahnya bukan fail2ban tetapi sshguard, sesuatu yang belum pernah saya dengar
Ray Foss

Jawaban:

55

Di server Ubuntu, Anda dapat menemukan siapa yang masuk kapan (dan dari mana) dalam file /var/log/auth.log. Di sana, Anda menemukan entri seperti:

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
sumber
2
Karena penasaran, apakah Ubuntu memiliki satu lastbperintah ?
Bratchley
1
@ JoelDavis My Ubuntu 12.04 saya tidak, tetapi output adalah satu baris yang tidak terlihat seperti output Anda sama sekali. Mungkin perlu dikonfigurasi.
Anthon
Apakah ini relevan ?
Bratchley
Di Ubuntu Server 14.04 dan yang lebih tinggi, ini seharusnya bertuliskan/var/log/auth.log
Serge Stroobandt
29

Pada distro berbasis Red Hat seperti Fedora / CentOS / RHEL Anda dapat memeriksa pengguna yang login di dalam file /var/log/secure.

Jika Anda ingin informasi lebih lanjut, baca Tanya Jawab SuperUser ini berjudul: Bagaimana saya bisa mencatat upaya akses SSH dan melacak apa yang akhirnya dilakukan pengguna SSH di server saya? .

Ramesh
sumber
1
Tidak ada /var/log/securepada sistem Ubuntu saya.
Anthon
@ Anthon, anehnya saya tidak punya /var/log/authdi sistem saya. Itu sebabnya sebelum memposting jawabannya, saya memeriksa apakah saya punya /var/log/securedi sistem saya, yang juga merupakan server Ubuntu :)
Ramesh
Saya telah memeriksa 14,04, 12,04 dan dan mesin tua di bawah 8,04. Versi apa yang Anda jalankan? Sudah melakukan sesuatu yang istimewa untuk mendapatkan file itu?
Anthon
@ Anthon, ternyata server tempat saya diuji adalah RHEL. Namun, jawaban di tautan yang saya berikan adalah untuk Ubuntu yang tampaknya aneh, karena Anda telah memeriksa 3 variasi ubuntu dan tidak ada /var/log/secure.
Ramesh
6
/var/log/secureadalah isme Fedora / CentOS / RHEL.
slm
8

Di Ubuntu Anda dapat masuk melalui SSH dan menggunakan perintah ekor Linux untuk menampilkan x jumlah baris terakhir dari /var/log/auth.logfile Anda . Saat Anda masuk melalui SSH gunakan perintah berikut untuk melihat 100 baris terakhir dari log SSH Anda:

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

atau bahkan lebih bersih

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

Perhatikan bahwa konfigurasi default pada Ubuntu adalah BUKAN login ssh login ke /var/log/authfile. Ini adalah INFOlevel logging.

Jika Anda ingin menyertakan upaya login di file log, Anda harus mengedit /etc/ssh/sshd_configfile (sebagai root atau dengan sudo) dan mengubah LogLeveldari INFOmenjadi VERBOSE.

Setelah itu, restart daemon sshd dengan

sudo service rsyslog restart

Setelah itu, upaya login ssh akan masuk ke /var/log/auth.logfile.

Shay Walters
sumber
4

Rekomendasi saya adalah menggunakan auditd . Ini masuk menggunakan subsistem audit kernel linux dan menurut saya cara yang tepat untuk melakukannya jika Anda serius. Dan mengingat sifat pertanyaan {security related} Anda harus menggunakan PAM juga. Pada tingkat standar hanya dengan menginstal auditd dan PAM , Anda seharusnya secara otomatis mendapatkan semua upaya SSH yang berhasil dan tidak berhasil masuk dalam file audit.log Anda. Jadi Anda benar-benar tidak perlu mengkonfigurasi apa pun, cukup auditd dan PAM yang diinstal. Saya tahu tangan pertama ini untuk SLES. Dan bertaruh RHEL dan versi perusahaan lain dari linux akan beroperasi dengan cara yang sama.

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

dalam log audit mentah yang dihasilkan oleh auditd, Anda dapat menggunakan sesuatu seperti aureportmenyaringnya yang dijelaskan dalam halaman manual auditd , menulis parser teks Anda sendiri, atau cukup menggunakan VI dan mencari kata kunci.

di sini ada /var/log/audit/audit.logpengecualian file saya dengan saya ssh'ing ke server linux saya.

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)'
  • dari atas, nama server saya adalah hiu .
  • banyak baris seperti ini ada di audit.log, saya ingin yang ini berdasarkan exe = "/ usr / sbin / sshd"
  • jumlah akun yang dimasukkan ke dalam adalah nilai auid, yaitu 23456 untuk contoh ini
  • nama akun pengguna yang terkait dengan auid ditentukan oleh acct = "ron"
  • sering kali sistem audit akan mencatat hostname dns dari sistem yang mencoba terhubung, tetapi selalu memiliki alamat ipnya
  • tanggal entri yang dalam waktu yang sangat singkat, jadi Anda harus mengonversinya melalui sesuatu seperti date --date @1480622612.317yang menghasilkan Thu Dec 1 15:03:32 EST 2016dan ketika saya ssh'd ke server saya.

Kapan res=failedsaat Anda ingin menyelidiki alamat ip dan nama host untuk melihat sistem apa yang mencoba untuk terhubung, dengan apa yang dicoba nama pengguna. Dan jelas ssh yang berhasil mencoba untuk memahami apa yang terjadi pada sistem Anda - misalnya rekan kerja bob Anda yang duduk di meja yang sama setiap hari dengan hostname = bobscomputer dan ip address = 192.168.5.5; jika Anda melihat upaya ssh yang sukses pada jam 2 pagi kemarin di bawah nama penggunanya dari alamat ip 10.10.5.6 misalnya, maka mungkin ada baiknya Anda berbicara dengan bob untuk menyelidiki. Kemungkinan upaya hack oleh orang lain? Dan tidak lama setelah itu apakah ada upaya su untuk login log audit dari akun bob?

ketika Anda melihat berulang-ulang res=faileddan auid=0dan acct=rootkemudian itu seseorang yang mencoba untuk ssh ke kotak Anda ke account root, dan ketika Anda memodifikasi /etc/hosts.denydengan alamat IP untuk sshd.

ron
sumber
2

Saya tahu ini sudah lama tetapi saya menulis sesuatu untuk memonitor koneksi / upaya ssh yang berhasil dan gagal. Serta IP yang diblokir jika Anda menggunakan sshguard. Perangkat lunak ini ditulis dalam Python. Ini akan mengirim email kepada Anda ketika seseorang berhasil terhubung melalui ssh, ketika seseorang salah memasukkan kata sandi ssh atau ketika seseorang diblokir karena banyak upaya yang gagal. Semoga ini akan membantu seseorang di masa depan yang mencari masalah ini dan menemukan kode saya!

https://github.com/amboxer21/SSHMonitor

Untuk skrip python, saya menulis skrip bash untuk memantau prosesnya. Ia memeriksa apakah itu berjalan setiap menit melalui tugas root cron. Jika tidak berjalan, itu memulai proses lain. Yang disebut dengan tugas root cron setiap menit.

Aguevara
sumber
-2

Hal terbaik yang pernah saya temui untuk perintah SSH logging adalah rootsh alat ini memungkinkan administrator mendapatkan setiap perintah dari setiap sesi dengan tingkat logging yang luas.

Saya telah menulis skrip untuk menginstal dan mengkonfigurasi ROOTSH di ubuntu dan CentOS / RHEL

unduh dari github di sini adalah tautannya

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

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
Mansur Ali
sumber
Saya pikir ini adalah cara yang buruk untuk mempromosikan profil github Anda ... Pada dasarnya Anda meminta untuk mengunduh skrip dari web dan menjalankannya menggunakan root. Downvoted
UserK
Saya tidak mempromosikan profil github saya, saya hanya mencoba untuk menyederhanakan hal-hal seperti yang dilakukan orang di atas jika Anda memilih saya untuk mempromosikan profil turun memilih mereka juga. apalagi dalam panduan aturan pertukaran stack tidak ada tertulis seperti itu kita tidak bisa berbagi file kode dari repositori pribadi.
Mansur Ali
Maafkan selera humor saya yang buruk. Pertama-tama terima kasih atas jawaban Mansur. Downvote berasal dari fakta bahwa Anda meminta untuk mengeksekusi banyak perintah yang tidak diketahui sebagai pengguna root. Terakhir kali saya melakukannya ada 'rm -R slash' di dalamnya.
UserK
1
Tidak apa-apa, omong-omong pertukaran-pertukaran tidak akan memungkinkan saya untuk kode yang panjang itu sebabnya saya meletakkan script itu dalam jawaban saya. Linux sangat sederhana.
Mansur Ali