คุณต้องการให้บริการ SSH ไปทั่วโลกหรือไม่? หรือเพียงแค่สมาชิกในทีมในสถานที่เฉพาะ? คำตอบของฉันขึ้นอยู่กับความรุนแรงของการท้าทายของคุณ
ไม่ว่าในกรณีใดสิ่งหนึ่งที่คุณควรทำคือตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ SSH ไม่อนุญาตการล็อกอินด้วยรหัสผ่านสำหรับผู้ใช้รูท
- ใน / etc / ssh / sshd_config ตรวจสอบให้แน่ใจว่าคุณไม่เคยอนุญาตการเข้าสู่ระบบรูทยกเว้นด้วยคีย์ SSH
ในระบบของฉันฉันได้รับการตั้งค่านี้
PermitRootLogin without-password
แต่ฉันสังเกตเห็นใน Ubuntu ที่ใหม่กว่าพวกเขามี
PermitRootLogin prohibit-password
หากคุณอ่าน "man sshd_config" ฉันคิดว่านี่หมายถึง "ห้ามรหัสผ่าน" รุ่นใหม่นี้หมายถึงสิ่งเดียวกันและชัดเจนในความหมายมากขึ้น นั่นไม่ใช่ค่าเริ่มต้นในระบบ Linux บางระบบ แต่น่าจะเป็นเช่นนั้น
ตอนนี้เกี่ยวกับปัญหาของคุณ เซิร์ฟเวอร์ระบบของคุณมีผู้ใช้บางคนในสถานที่เฉพาะหรือไม่ ทำเช่นนี้!
แก้ไข /etc/hosts.deny และใส่
ALL: ALL
จากนั้นแก้ไข /etc/hosts.allow และรายการหมายเลข IP หรือช่วงที่ต้องการอนุญาตให้ใช้ SSH สัญกรณ์มีความสับสนเล็กน้อยเพราะถ้าคุณต้องการอนุญาตให้ทุกระบบที่มีหมายเลข IP เช่น 111.222.65.101 ถึง 111.222.65.255 คุณใส่รายการเช่นนี้ใน hosts.allow
ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.
นั่นคือทางออกที่ดุร้ายและทรงพลัง หากผู้ใช้ของคุณสามารถระบุช่วง IP ทำมันได้!
การแก้ปัญหานี้มีอยู่ก่อนที่จะสร้างตาราง IP มันเป็น (ฉันคิดว่า) จัดการได้ง่ายกว่ามาก แต่มันไม่ดีเท่าวิธีการแก้ปัญหาตาราง IP เพราะรูทีนตาราง IP จะพบศัตรูได้เร็วกว่าโปรแกรมที่ขับเคลื่อนโดย hosts.allow และโฮสต์ .ปฏิเสธ. แต่นี่เป็นไฟที่แน่นอนวิธีง่ายๆในการแก้ไขปัญหามากมายไม่ใช่แค่จาก SSH
สังเกตปัญหาที่คุณสร้างขึ้นเอง หากคุณต้องการเปิดเซิร์ฟเวอร์ FTP เว็บเซิร์ฟเวอร์หรืออะไรก็ตามคุณจะต้องทำรายการในโฮสต์ที่อนุญาต
คุณสามารถบรรลุวัตถุประสงค์พื้นฐานเดียวกันโดยเล่นซอกับ iptables และไฟร์วอลล์ เรียกได้ว่าเป็นทางออกที่ดีเพราะคุณปิดกั้นศัตรูที่อยู่นอกขอบเขต Ubuntu มี "ufw" (ไฟร์วอลล์ที่ไม่ซับซ้อน) และ "man ufw" มีตัวอย่างมากมาย ฉันควรมี GUI ที่ดีในการลุยผ่านสิ่งนี้ฉันไม่ต้องทำเช่นนี้ตลอดเวลา บางทีคนอื่นสามารถบอกเราได้ว่ามีตอนนี้หรือไม่
- แนะนำโพสต์อื่น ๆ ที่นี่โดยใช้กุญแจสาธารณะ SSH สำหรับผู้ใช้ของคุณเท่านั้น แน่นอนว่าจะช่วยในราคาของความซับซ้อนและความยุ่งยากสำหรับผู้ใช้ของคุณ ในแล็บของเรามีคอมพิวเตอร์ 15 เครื่อง ผู้ใช้ไปกับคอมพิวเตอร์ การขอการรับรองความถูกต้องของคีย์ SSH จะทำให้เกิดความยุ่งยากมากเพราะผู้คนไปจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง
แหล่งที่มาของความยุ่งยากอื่นจะเกิดขึ้นเมื่อผู้ใช้บางคนสะสมคีย์ ssh ที่แตกต่างกันสำหรับเซิร์ฟเวอร์ต่างๆ เนื่องจากฉันมีคีย์ SSH สำหรับโครงการที่ต่างกันประมาณ 12 โครงการตอนนี้ ssh ล้มเหลวเนื่องจากฉันมีพับลิกคีย์มากเกินไป (ต้องการ "ssh -o PubkeyAuthentication = false" หรือสร้างรายการในไฟล์. ssh / config มันเป็น PITA)
- หากคุณต้องปล่อยให้เซิร์ฟเวอร์เปิดให้ SSH จากโลกกว้างใหญ่แน่นอนคุณควรใช้รูทีนการปฏิเสธเพื่อบล็อกตำแหน่งที่พยายามเข้าสู่ระบบบ่อยครั้งมี 2 โปรแกรมที่ดีสำหรับสิ่งนี้สิ่งที่เราใช้คือ denyhosts และ fail2ban . โปรแกรมเหล่านี้มีการตั้งค่าที่อนุญาตให้คุณแบนผู้กระทำความผิดในช่วงเวลาที่คุณต้องการ
ในระบบ Centos Linux ของเราฉันสังเกตเห็นว่าพวกเขาทำแพ็กเกจ denyhosts และเสนอ fail2ban เท่านั้น ฉันชอบ denyhosts เพราะมันสร้างรายการผู้ใช้ / IP ที่มีปัญหาและจากนั้นใน hosts.deny รายการนั้นก็ถูกบันทึกไว้ เราติดตั้ง fail2ban แทนและมันก็โอเค ความเข้าใจของฉันคือคุณควรปิดกั้นผู้ใช้ที่ไม่ดีเหล่านี้ที่ขอบด้านนอกของเซิร์ฟเวอร์ดังนั้นตัวบล็อกที่อิงกับตาราง ip เช่น fail2ban จะดีกว่าจริง ๆ Denyhosts ทำงานในระดับที่สองหลังจากที่ศัตรูได้รับ iptables ที่ผ่านมาพวกเขาจะถูกปฏิเสธโดย sshd daemon
ในทั้งสองโปรแกรมนี้เป็นเรื่องน่าเบื่อที่จะให้ผู้ใช้ออกจากคุกหากพวกเขาลืมรหัสผ่านและลองลงชื่อเข้าใช้อีกสองสามครั้งมันเป็นการยากที่จะทำให้ผู้คนกลับเข้ามาในเมื่อพวกเขาทำผิดพลาดในการเข้าสู่ระบบ คุณคาดเดาได้ว่าจะมี GUI แบบจุดและคลิกที่คุณสามารถชี้และให้ผู้คนกลับมาได้ แต่มันไม่ใช่แบบนั้น ฉันต้องทำเช่นนี้ทุกสองสามเดือนและลืมวิธีระหว่างเวลาดังนั้นฉันจึงเขียนคำแนะนำสำหรับตัวเองในหน้าเว็บของฉัน http://pj.freefaculty.org/blog/?p=301