การบันทึกการพยายามเข้าถึง SSH


60

ฉันได้กำหนดค่าเซิร์ฟเวอร์อูบุนตูด้วย openssh เพื่อเชื่อมต่อกับมันและรันคำสั่งจากระบบระยะไกลเช่นโทรศัพท์หรือแล็ปท็อป ปัญหาคือ ... ฉันอาจไม่ใช่คนเดียว

มีวิธีที่จะทราบความพยายามในการเข้าสู่ระบบทั้งหมดที่ทำกับเซิร์ฟเวอร์หรือไม่?


คุณควรลองใช้ sshd บนพอร์ตที่ไม่ได้มาตรฐาน นอกจากนี้ยังเป็นไปได้ที่จะตั้งค่า iptables เพื่อปฏิเสธการพยายามเชื่อมต่อใหม่หาก IP เดียวพยายามเชื่อมต่อ ssh ใหม่ X ครั้งในหนึ่งนาที
ivanivan

สำหรับฉันปัญหาไม่ล้มเหลว 2ban แต่ sshguard สิ่งที่ฉันไม่เคยได้ยิน
Ray Foss

คำตอบ:


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
จากความอยากรู้ไม่ Ubuntu มีคำสั่ง ? lastb
Bratchley

1
@JoelDavis Ubuntu 12.04 ของฉันทำ แต่เอาท์พุทเป็นบรรทัดเดียวที่ไม่เหมือนเอาท์พุทของคุณเลย อาจจำเป็นต้องกำหนดค่า
Anthon


บน Ubuntu Server 14.04 ขึ้นไปสิ่งนี้ควรอ่าน/var/log/auth.log
Serge Stroobandt

29

บน distros หมวกตามสีแดงเช่น Fedora / CentOS / RHEL /var/log/secureคุณสามารถตรวจสอบสำหรับผู้ใช้เข้าสู่ระบบภายในแฟ้ม

หากคุณต้องการข้อมูลเพิ่มเติมอ่านคำถามและคำตอบ SuperUser นี้: ฉันจะบันทึกความพยายามในการเข้าถึง SSH และติดตามว่าผู้ใช้ SSH ทำอะไรบนเซิร์ฟเวอร์ของฉันได้อย่างไร .


1
ไม่มี/var/log/secureในระบบ Ubuntu ของฉัน
Anthon

@ ทันใดนั้นฉันไม่ได้มี/var/log/authในระบบของฉัน นั่นเป็นเหตุผลที่ก่อนโพสต์คำตอบที่ผมตรวจสอบถ้าผมมี/var/log/secureในระบบของฉันซึ่งยังเป็นเซิร์ฟเวอร์ Ubuntu :)
Ramesh

ฉันตรวจสอบ 14.04, 12.04 และและเครื่องเก่าที่ต่ำกว่า 8.04 คุณกำลังใช้เวอร์ชันใดอยู่ ทำอะไรเป็นพิเศษเพื่อรับไฟล์นั้น
Anthon

@ ทันใดนั้นกลับกลายเซิร์ฟเวอร์ที่ฉันทดสอบคือ RHEL แต่คำตอบในการเชื่อมโยงที่ฉันมีให้สำหรับอูบุนตูซึ่งดูเหมือนว่าแปลกเพราะคุณได้ตรวจสอบ 3 /var/log/secureรูปแบบของอูบุนตูและไม่มี
Ramesh

6
/var/log/secureคือ Fedora / CentOS / RHEL ism
slm

8

บน Ubuntu คุณสามารถเข้าสู่ระบบผ่าน SSH และใช้คำสั่ง Linux tail เพื่อแสดงจำนวน 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จากการINFOVERBOSE

หลังจากนั้นให้รีสตาร์ท sshd daemon ด้วย

sudo service rsyslog restart

หลังจากนั้นความพยายามในการเข้าสู่ระบบ ssh จะถูกบันทึกไว้ใน/var/log/auth.logไฟล์


4

คำแนะนำของฉันคือการใช้auditd นี่คือการบันทึกโดยใช้ระบบย่อยการตรวจสอบของเคอร์เนลลินุกซ์และในความคิดของฉันวิธีที่เหมาะสมที่จะทำถ้าคุณจริงจัง และด้วยลักษณะของคำถาม {ความปลอดภัยที่เกี่ยวข้อง} คุณควรใช้PAMด้วย ในระดับเริ่มต้นที่เพิ่งติดตั้งauditdและPAMคุณควรได้รับ SSH ที่ประสบความสำเร็จและไม่สำเร็จทั้งหมดที่พยายามเข้าสู่ระบบในไฟล์ audit.log ของคุณ ดังนั้นคุณไม่จำเป็นต้องกำหนดค่าอะไรเลยเพียงแค่ติดตั้งauditdและPAM ฉันรู้ว่ามือแรกของ SLES และจะเดิมพัน RHEL และรุ่นอื่น ๆขององค์กรของ linux จะทำงานในทำนองเดียวกัน

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

ในบันทึกการตรวจสอบวัตถุดิบที่สร้างขึ้นโดยauditdคุณสามารถใช้อย่างใดอย่างหนึ่งใช้สิ่งที่ชอบaureportในการกรองนั้นซึ่งได้อธิบายไว้ในauditdหน้าคนเขียน parser ข้อความของคุณเองหรือเพียงแค่ใช้ VI และค้นหาคำหลัก

นี่คือยกเว้น/var/log/audit/audit.logไฟล์ของฉันกับฉัน ssh'ing ลงในเซิร์ฟเวอร์ 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 คือค่าของ auid ซึ่งคือ 23456 สำหรับตัวอย่างนี้
  • ชื่อของบัญชีผู้ใช้ที่เชื่อมโยงกับ auid ถูกระบุโดย acct = "ron"
  • เวลาส่วนใหญ่ระบบตรวจสอบจะบันทึกชื่อโฮสต์ dns ของระบบที่พยายามเชื่อมต่อ แต่จะมีที่อยู่ IP เสมอ
  • วันที่ของรายการที่อยู่ในเวลายุคดังนั้นคุณจะต้องแปลงที่ผ่านสิ่งdate --date @1480622612.317ที่ผลลัพธ์Thu Dec 1 15:03:32 EST 2016และในเมื่อฉัน ssh จะลงในเซิร์ฟเวอร์ของฉัน

เมื่อres=failedใดคือเมื่อคุณต้องการตรวจสอบที่อยู่ IP และชื่อโฮสต์เหล่านั้นเพื่อดูว่าระบบพยายามเชื่อมต่อใดภายใต้ชื่อผู้ใช้ที่พยายามทำ และเห็นได้ชัดว่า ssh ที่ประสบความสำเร็จพยายามที่จะเข้าใจว่าเกิดอะไรขึ้นในระบบของคุณ - ตัวอย่างเช่นเพื่อนร่วมงานของคุณที่อยู่ที่โต๊ะเดียวกันทุกวันด้วยชื่อโฮสต์ = bobscomputer และที่อยู่ ip = 192.168.5.5; หากคุณเห็นความพยายามที่ประสบความสำเร็จในเวลา 2am เมื่อวานนี้ภายใต้ชื่อผู้ใช้ของเขาจากที่อยู่ IP 10.10.5.6 ตัวอย่างเช่นคุณอาจสนใจคุยกับบ๊อบเพื่อสอบสวน มีความพยายามแฮ็คจากบุคคลอื่นหรือไม่ และไม่นานหลังจากนั้นมีความพยายามที่จะรูทในบันทึกการตรวจสอบจากบัญชีของ bob หรือไม่

เมื่อคุณเห็นซ้ำ ๆres=failedและauid=0และacct=rootแล้วว่าเป็นใครบางคนพยายามที่จะ ssh ลงในช่องของคุณลงในบัญชีหลักและเป็นเมื่อคุณปรับเปลี่ยน/etc/hosts.denyมีที่อยู่ IP ที่ SSHD


2

ฉันรู้ว่ามันเก่า แต่ฉันเขียนบางสิ่งบางอย่างเพื่อตรวจสอบการเชื่อมต่อ / พยายาม ssh ที่ประสบความสำเร็จและล้มเหลว รวมถึง IP ที่ถูกแบนหากคุณใช้ sshguard ซอฟต์แวร์เขียนด้วย Python มันจะส่งอีเมลถึงคุณเมื่อมีคนประสบความสำเร็จในการเชื่อมต่อผ่าน ssh เมื่อมีคนได้รับรหัสผ่าน ssh ผิดหรือเมื่อมีคนถูกแบนเนื่องจากความพยายามที่ล้มเหลวหลายครั้ง หวังว่านี่จะช่วยให้ใครบางคนในอนาคตที่ค้นหาปัญหานี้และพบรหัสของฉัน!

https://github.com/amboxer21/SSHMonitor

สำหรับสคริปต์หลามฉันเขียนสคริปต์ทุบตีเพื่อตรวจสอบกระบวนการ มันตรวจสอบว่ามันทำงานทุกนาทีผ่านงานรูท cron หรือไม่ หากไม่ได้ใช้งานจะเป็นการเริ่มกระบวนการอื่น ซึ่งถูกเรียกใช้โดยงาน cron รูททุกนาที


-2

สิ่งที่ดีที่สุดที่ฉันเคยเจอสำหรับการบันทึกคำสั่ง SSH คือ rootsh เครื่องมือนี้อนุญาตให้ผู้ดูแลระบบได้รับคำสั่งทุกคำสั่งจากทุกเซสชันที่มีการบันทึกระดับสูง

ฉันเขียนสคริปต์เพื่อติดตั้งและกำหนดค่า 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 ของคุณ ... โดยทั่วไปคุณกำลังขอให้ดาวน์โหลดสคริปต์จากเว็บและดำเนินการโดยใช้รูท Downvoted
UserK

ฉันไม่ได้ส่งเสริมโปรไฟล์ GitHub ของฉันฉันแค่พยายามทำให้สิ่งต่าง ๆ เป็นเรื่องง่ายเหมือนที่คนอื่นทำถ้าคุณลงคะแนนให้ฉันเพื่อโปรโมตโปรไฟล์ลงคะแนนพวกเขาเช่นกัน ยิ่งไปกว่านั้นในคู่มือกฎของการแลกเปลี่ยนสแต็คไม่มีอะไรเขียนเหมือนที่เราไม่สามารถแบ่งปันไฟล์รหัสจากที่เก็บส่วนบุคคล
มันซูร์อาลี

โปรดยกโทษให้ฉันด้วยอารมณ์ขันที่ไม่ดี ก่อนอื่นขอขอบคุณสำหรับคำตอบของ Mansur downvote มาจากข้อเท็จจริงที่ว่าคุณกำลังขอให้เรียกใช้คำสั่งที่ไม่รู้จักในฐานะผู้ใช้รูท ครั้งล่าสุดที่ฉันทำมันมี 'rm -R slash' อยู่ข้างใน
UserK

1
มันโอเคด้วยวิธีการแลกเปลี่ยนสแต็คจะไม่อนุญาตให้ฉันใช้รหัสยาว ๆ นั่นคือเหตุผลที่ฉันวางสคริปต์นั้นไว้ในคำตอบของฉัน Linux นั้นง่ายมาก
Mansur Ali
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.