การรักษาความปลอดภัย การเชื่อมต่อSSHช่วยให้คุณปกป้องระบบและข้อมูล Linux ของคุณ ผู้ดูแลระบบและผู้ใช้ตามบ้านจำเป็นต้องรักษาความปลอดภัยคอมพิวเตอร์ที่เชื่อมต่อกับอินเทอร์เน็ตด้วย 10 วิธีง่ายๆ ที่จะช่วยคุณรักษาความปลอดภัยเซิร์ฟเวอร์ SSHของคุณ
พื้นฐานบางประการเกี่ยวกับการรักษาความปลอดภัย SSH
SSH ย่อมาจาก Secure Shell โปรโตคอล SSH หรือเครื่องมือซอฟต์แวร์ช่วยให้ผู้ดูแลระบบและผู้ใช้สามารถเชื่อมต่อกับคอมพิวเตอร์ระยะไกลได้อย่างปลอดภัยโดยใช้โปรโตคอลนั้น
โปรโตคอล SSH เป็นโปรโตคอลที่เข้ารหัสซึ่งออกแบบมาเพื่อให้มีการเชื่อมต่อที่ปลอดภัยผ่านเครือข่ายที่ไม่ปลอดภัย เช่น อินเทอร์เน็ต SSH ใน Linux สร้างขึ้นจากโปรเจ็กต์ OpenSSH เวอร์ชันพกพา มีการใช้งานในรูปแบบไคลเอนต์ - เซิร์ฟเวอร์คลาสสิกโดยมีเซิร์ฟเวอร์ SSH ที่ยอมรับการเชื่อมต่อจากไคลเอนต์ SSH ไคลเอนต์ใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์และเปิดเผยเซสชันกับผู้ใช้ระยะไกล เซิร์ฟเวอร์ยอมรับการเชื่อมต่อและเริ่มเซสชัน
ในการกำหนดค่าเริ่มต้น เซิร์ฟเวอร์ SSH จะ “รับฟัง” สำหรับการเชื่อมต่อขาเข้าบน Transmission Control Protocol (TCP) พอร์ต 22 เนื่องจากนี่คือพอร์ตที่ได้มาตรฐานและได้รับความนิยม จึงเป็นเป้าหมายสำหรับภัยคุกคามของนักแสดงและบอทที่เป็นอันตราย
ผู้ประสงค์ร้ายเปิดตัวบอทที่สแกนช่วงที่อยู่IPเพื่อค้นหาพอร์ตที่เปิดอยู่ จากนั้นจะตรวจสอบพอร์ตเหล่านี้เพื่อหาช่องโหว่ที่สามารถใช้ประโยชน์ได้ เมื่อคิดว่าฉันปลอดภัย มีเป้าหมายที่ใหญ่กว่าและดีกว่าฉันมากมายเพื่อให้คนร้ายกำหนดเป้าหมายนั้นผิดอย่างสิ้นเชิง บอทเหล่านี้ไม่ได้เลือกเป้าหมายตามเกณฑ์ใดๆ พวกเขาเพียงมองหาวิธีเจาะระบบ
คุณจะตกเป็นเหยื่อหากคุณไม่รักษาความปลอดภัยระบบของคุณ
แรงเสียดทานด้านความปลอดภัย
จุดแรงเสียดทานด้านความปลอดภัยคือสถานการณ์ใดๆ ที่งานหลักถูกป้องกันหรือล่าช้าเนื่องจากข้อกำหนดด้านความปลอดภัย
ความขัดแย้งด้านความปลอดภัยทำให้เกิดความรู้สึกไม่สบาย (ในทุกระดับ) สำหรับผู้ใช้และผู้อื่นเมื่อคุณใช้มาตรการรักษาความปลอดภัย ผู้ที่เพิ่งเริ่มใช้ระบบคอมพิวเตอร์อาจกังวลว่าจะต้องป้อนรหัสผ่านทุกครั้งที่เข้าสู่ระบบเมนเฟรมหรือไม่ สำหรับพวกเขา นี่เป็นความขัดแย้งด้านความปลอดภัยรูปแบบหนึ่งด้วย
การแนะนำมาตรการรักษาความปลอดภัยมักจะรวมถึงรูปแบบความขัดแย้งสำหรับบางคนด้วย เจ้าของธุรกิจจะต้องชำระค่ามาตรการเหล่านี้ ผู้ใช้คอมพิวเตอร์อาจต้องเปลี่ยนนิสัยหรือจำข้อมูลการรับรองความถูกต้องต่าง ๆ เพิ่มขั้นตอนในการเชื่อมต่อให้สำเร็จ ผู้ดูแลระบบจะมีงานเพิ่มเติมที่ต้องทำเพื่อนำไปใช้และรักษามาตรการรักษาความปลอดภัยใหม่
การกระชับและล็อคระบบปฏิบัติการ Linux หรือ Unix สามารถทำได้อย่างรวดเร็ว มาตรการรักษาความปลอดภัยที่นี่คือชุดขั้นตอนที่ปฏิบัติตามได้ง่ายซึ่งจะปรับปรุงการรักษาความปลอดภัยของคอมพิวเตอร์โดยไม่จำเป็นต้องใช้แอปพลิเคชันของบุคคลที่สามและการแทรกแซง ไฟร์วอลล์เชิง ลึก
ใช้โปรโตคอล SSH เวอร์ชัน 2
ในปี 2549 โปรโตคอล SSH ได้รับการอัปเดตจากเวอร์ชัน 1 เป็นเวอร์ชัน 2 นี่เป็นการอัพเกรดที่สำคัญ มีการเปลี่ยนแปลงและปรับปรุงมากมาย โดยเฉพาะอย่างยิ่งในด้านการเข้ารหัสและการรักษาความปลอดภัย และเวอร์ชัน 2 ไม่สามารถใช้งานร่วมกับเวอร์ชัน 1 แบบย้อนหลังได้ หากต้องการป้องกันการเชื่อมต่อจากไคลเอ็นต์เวอร์ชัน 1 คุณสามารถระบุคอมพิวเตอร์ให้ยอมรับเฉพาะการเชื่อมต่อจากเวอร์ชัน 2 เท่านั้น
เมื่อต้องการทำเช่นนี้ ให้แก้ไขไฟล์ /etc/ssh/sshd_config โดยใช้คำสั่งต่อไปนี้:
sudo gedit /etc/ssh/sshd_config
เพิ่มบรรทัดต่อไปนี้:
Protocol 2
และบันทึกไฟล์ จากนั้นรีสตาร์ทกระบวนการ SSH daemon โดยใช้คำสั่งต่อไปนี้:
sudo systemctl restart sshd
ทดสอบการใช้งานการตั้งค่าใหม่โดยเปลี่ยนไปใช้เครื่องอื่นและลอง SSH เข้าไปในเครื่องทดสอบ เราจะใช้ตัวเลือก -1 (โปรโตคอล 1) เพื่อบังคับให้คำสั่ง ssh ใช้โปรโตคอลเวอร์ชัน 1
ssh -1 [email protected]
คำขอเชื่อมต่อถูกปฏิเสธ ตรวจสอบให้แน่ใจว่าคุณยังคงสามารถเชื่อมต่อกับโปรโตคอล 2 ได้ เราจะใช้ -2 (โปรโตคอล 2) ในการทดสอบ
ssh -2 [email protected]
ความจริงที่ว่าเซิร์ฟเวอร์ SSH ขอรหัสผ่านเป็นสัญญาณเชิงบวกว่ามีการเชื่อมต่อเกิดขึ้นและคุณกำลังโต้ตอบกับเซิร์ฟเวอร์ ไคลเอ็นต์ SSH สมัยใหม่จะใช้โปรโตคอล 2 เป็นค่าเริ่มต้น เราไม่จำเป็นต้องระบุโปรโตคอล 2 หากไคลเอ็นต์เป็นเวอร์ชันล่าสุด
ssh [email protected]
การเชื่อมต่อได้รับการยอมรับแล้ว
หลีกเลี่ยงประตู 22
พอร์ต 22 เป็นพอร์ตมาตรฐานสำหรับการเชื่อมต่อ SSH หากใช้พอร์ตอื่น ระบบจะเพิ่ม Security Through Obscurity (STO) เล็กน้อยให้กับระบบของคุณ การรักษาความปลอดภัยด้วยความคลุมเครือไม่ควรถือเป็นมาตรการรักษาความปลอดภัยที่แท้จริง ในความเป็นจริง บอตโจมตีที่ชาญฉลาดกว่าบางตัวจะตรวจสอบพอร์ตที่เปิดอยู่ทั้งหมดและตัดสินใจว่าบริการใดที่พวกเขากำลังดำเนินการอยู่ แทนที่จะอาศัยรายการค้นหาพอร์ตธรรมดา ๆ และสมมติว่าพอร์ตเหล่านั้นให้บริการ ตามปกติ แต่การใช้พอร์ตที่ไม่ได้มาตรฐานสามารถช่วยลดการรับส่งข้อมูลที่ไม่ดีบนพอร์ต 22 ได้
หากต้องการกำหนดค่าพอร์ตที่ไม่ได้มาตรฐาน ให้แก้ไขไฟล์การกำหนดค่า SSH ดังข้างต้น
ลบ # ที่จุดเริ่มต้นของ บรรทัดPortและแทนที่ 22 ด้วยหมายเลขที่คุณเลือก บันทึกไฟล์การกำหนดค่าและรีสตาร์ท SSH daemon
บนคอมพิวเตอร์เครื่องอื่นเราจะใช้คำสั่ง ssh เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ คำสั่ง ssh เริ่มต้นใช้พอร์ต 22:
ssh [email protected]
การเชื่อมต่อถูกปฏิเสธ ลองอีกครั้งและระบุพอร์ต 470 โดยใช้ ตัวเลือก –p (พอร์ต):
ssh -p 479 [email protected]
ยืนยันการเชื่อมต่อแล้ว
เชื่อมต่อตัวกรองโดยใช้ TCP Wrappers
TCP Wrappers เป็นรายการควบคุมการเข้าถึงที่เข้าใจง่าย ช่วยให้คุณสามารถปฏิเสธและอนุญาตการเชื่อมต่อตามลักษณะของคำขอการเชื่อมต่อ เช่น ที่อยู่ IP หรือชื่อโฮสต์ ควรใช้ TCP Wrappers ร่วมกับไฟร์วอลล์ที่กำหนดค่าอย่างเหมาะสม ไม่ใช่แทนที่
TCP Wrappers ติดตั้งไว้ล่วงหน้าบน เครื่อง Ubuntu 18.04 LTSจะต้องติดตั้งบน Manjaro 18.10 และ Fedora 30
หากต้องการติดตั้งบน Fedora ให้ใช้คำสั่งต่อไปนี้:
sudo yum install tcp_wrappers
หากต้องการติดตั้งบน Manjaro ให้ใช้คำสั่งนี้:
sudo pacman -Syu tcp-wrappers
มีไฟล์อยู่สองไฟล์ ไฟล์หนึ่งเก็บรายการอนุญาต และไฟล์หนึ่งเก็บรายการปฏิเสธ แก้ไขรายการปฏิเสธโดยใช้คำสั่งต่อไปนี้:
sudo gedit /etc/hosts.deny
คำสั่งดังกล่าวจะเปิดตัวแก้ไข gedit โดยที่ไฟล์ปฏิเสธที่จะโหลด
คุณต้องเพิ่มบรรทัด:
ALL : ALL
และบันทึกไฟล์. บรรทัดนี้จะบล็อกการเข้าถึงที่ไม่ได้รับอนุญาตทั้งหมด ตอนนี้ เราต้องให้สิทธิ์แก่การเชื่อมต่อที่คุณต้องการยอมรับ หากต้องการทำเช่นนั้น คุณต้องแก้ไขไฟล์สิทธิ์:
sudo gedit /etc/hosts.allow
คำสั่งดังกล่าวจะเปิดตัวแก้ไข gedit พร้อมไฟล์ที่ดาวน์โหลดได้
เราได้เพิ่มชื่อ SSH daemon, SSHD และที่อยู่ IP ของคอมพิวเตอร์ที่อนุญาตให้ทำการเชื่อมต่อได้ บันทึกไฟล์และดูว่าข้อจำกัดและการอนุญาตมีผลหรือไม่
ขั้นแรก คุณจะลองเชื่อมต่อจากคอมพิวเตอร์ที่ไม่ได้อยู่ในไฟล์ host.allow:
การเชื่อมต่อถูกปฏิเสธ เราจะพยายามเชื่อมต่อจากเครื่องที่มีที่อยู่ IP 192.168.4.23:
ยอมรับการเชื่อมต่อแล้ว
ตัวอย่างนี้อนุญาตให้เชื่อมต่อเครื่องเดียวเท่านั้น เครื่องห่อ TCP ค่อนข้างยืดหยุ่น รองรับชื่อโฮสต์ ไวด์การ์ด และซับเน็ตมาสก์เพื่อยอมรับการเชื่อมต่อจากช่วงที่อยู่ IP
ปฏิเสธคำขอเชื่อมต่อโดยไม่ต้องใช้รหัสผ่าน
แม้ว่าจะไม่ดี แต่ผู้ดูแลระบบ Linux สามารถสร้างบัญชีผู้ใช้โดยไม่ต้องใช้รหัสผ่าน นั่นหมายความว่าไม่จำเป็นต้องใช้รหัสผ่านสำหรับการเชื่อมต่อระยะไกลจากบัญชีนี้ การเชื่อมต่อเหล่านี้จะได้รับการยอมรับแต่ไม่ได้รับการรับรองความถูกต้อง
การตั้งค่าเริ่มต้นสำหรับ SSH ยอมรับคำขอเชื่อมต่อโดยไม่ต้องใช้รหัสผ่าน เราสามารถเปลี่ยนได้อย่างง่ายดายและตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดเหล่านั้นได้รับการตรวจสอบสิทธิ์แล้ว
คุณต้องแก้ไขไฟล์การกำหนดค่า SSH
เลื่อนลงในไฟล์จนกว่าคุณจะเห็นบรรทัดที่ระบุว่า#PermitEmptyPasswords no ลบ # ที่จุดเริ่มต้นของบรรทัดและบันทึกไฟล์ รีสตาร์ทภูต SSH
ใช้คีย์ SSH แทนรหัสผ่าน
คีย์ SSH มอบวิธีการที่ปลอดภัยในการเข้าสู่เซิร์ฟเวอร์ SSH รหัสผ่านสามารถถอดรหัส คาดเดา หรือบังคับดุร้ายได้ คีย์ SSH ไม่เสี่ยงต่อการโจมตีประเภทนี้
เมื่อสร้างคีย์ SSH คุณจะต้องสร้างคู่คีย์ อันหนึ่งคือกุญแจสาธารณะและอีกอันคือกุญแจส่วนตัว มีการติดตั้งรหัสสาธารณะบนเซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อ รหัสส่วนตัวจะถูกเก็บไว้อย่างปลอดภัยบนคอมพิวเตอร์ของคุณ
คีย์ SSH อนุญาตให้ทำการเชื่อมต่อได้โดยไม่ต้องใช้รหัสผ่าน ซึ่งมีความปลอดภัยมากกว่าการเชื่อมต่อโดยใช้การตรวจสอบสิทธิ์ด้วยรหัสผ่าน
เมื่อทำการร้องขอการเชื่อมต่อ คอมพิวเตอร์ระยะไกลจะใช้สำเนาของกุญแจสาธารณะเพื่อสร้างข้อความที่เข้ารหัสซึ่งส่งกลับไปยังคอมพิวเตอร์ เนื่องจากมันถูกเข้ารหัสด้วยกุญแจสาธารณะ คอมพิวเตอร์จึงสามารถถอดรหัสด้วยกุญแจส่วนตัวได้
จากนั้นคอมพิวเตอร์จะดึงข้อมูลบางส่วนจากข้อความ เข้ารหัส และส่งกลับไปยังเซิร์ฟเวอร์ หากเซิร์ฟเวอร์สามารถถอดรหัสได้ด้วยสำเนาของกุญแจสาธารณะ หากข้อมูลในข้อความตรงกับที่เซิร์ฟเวอร์ส่งถึงคุณ การเชื่อมต่อจะได้รับการยืนยัน
ที่นี่การเชื่อมต่อกับเซิร์ฟเวอร์ที่ 192.168.4.11 โดยผู้ใช้ด้วยคีย์ SSH โปรดทราบว่าระบบจะไม่แจ้งให้ป้อนรหัสผ่าน
ssh [email protected]
ปิดการใช้งานการตรวจสอบรหัสผ่านอย่างสมบูรณ์
คุณสามารถปิดใช้งานการรับรองความถูกต้องด้วยรหัสผ่านได้อย่างสมบูรณ์หากคุณใช้คีย์ SSH เราจำเป็นต้องแก้ไขไฟล์การกำหนดค่า SSH
เลื่อนไฟล์ลงจนกว่าคุณจะเห็นบรรทัดที่ขึ้นต้นด้วย#PasswordAuthenticationใช่ ลบ # ที่จุดเริ่มต้นของบรรทัด เปลี่ยนใช่เป็นไม่ใช่และบันทึกไฟล์ รีสตาร์ทภูต SSH
ปิดใช้งานการส่งต่อ X11
การส่งต่อ X11 ช่วยให้ผู้ใช้ระยะไกลสามารถเรียกใช้แอปพลิเคชันกราฟิกจากเซิร์ฟเวอร์ของคุณผ่านเซสชัน SSH แต่ถูกผู้ไม่ประสงค์ดีหาประโยชน์ได้ง่าย ควรปิดโดยแก้ไขไฟล์การกำหนดค่า SSH จะดีกว่า
เลื่อนไฟล์ลงจนกว่าคุณจะเห็นบรรทัด#X11Forwarding noลบ#ที่จุดเริ่มต้นของบรรทัดแล้วบันทึกไฟล์ รีสตาร์ทภูต SSH
ตั้งค่าการหมดเวลาของการไม่ได้ใช้งาน
หากมีการสร้างการเชื่อมต่อ SSH กับคอมพิวเตอร์และไม่มีกิจกรรมใดๆ เกิดขึ้นเป็นระยะเวลาหนึ่ง อาจก่อให้เกิดความเสี่ยงด้านความปลอดภัยได้
ดังนั้นคุณควรกำหนดขีดจำกัดการหมดเวลา การเชื่อมต่อ SSH จะถูกตัดการเชื่อมต่อหากไม่มีกิจกรรมใด ๆ ภายในระยะเวลาที่กำหนด เราต้องแก้ไขไฟล์การกำหนดค่า SSH อีกครั้ง
เลื่อนไฟล์ลงจนกว่าคุณจะเห็นบรรทัดที่ขึ้นต้นด้วย#ClientAliveInterval 0 ลบ # ที่ต้นบรรทัด เปลี่ยนตัวเลข 0 เป็นค่าที่คุณต้องการ ปกติแล้วคนจะตั้งเวลาไว้ที่ 300 วินาที ซึ่งก็คือ 5 นาที บันทึกไฟล์และรีสตาร์ท SSH daemon
กำหนดขีดจำกัดจำนวนรายการรหัสผ่าน
การกำหนดขีดจำกัดจำนวนการยืนยันสามารถช่วยป้องกันการเดารหัสผ่านและการโจมตีแบบดุร้าย หลังจากร้องขอการรับรองความถูกต้องตามจำนวนที่ระบุ ผู้ใช้จะถูกตัดการเชื่อมต่อจากเซิร์ฟเวอร์ SSH ตามค่าเริ่มต้น ไม่มีการจำกัดจำนวนครั้งในการพยายามใช้รหัสผ่าน แต่คุณสามารถแก้ไขได้ในไฟล์การกำหนดค่า SSH
เลื่อนไฟล์ลงจนกว่าคุณจะเห็นบรรทัดที่ขึ้นต้นด้วย#MaxAuthTries 0 การลบ # ที่จุดเริ่มต้นของบรรทัดจะเปลี่ยนตัวเลขเป็นค่าที่ต้องการ คุณสามารถตั้งค่าเป็น 3 บันทึกไฟล์เมื่อทำการเปลี่ยนแปลงและรีสตาร์ท SSH daemon
คุณสามารถทดสอบได้โดยลองเชื่อมต่อและป้อนรหัสผ่านผิด
โปรดทราบว่าหมายเลข MaxAuthTries มากกว่าจำนวนครั้งที่ผู้ใช้อนุญาต หลังจากพยายามล้มเหลวสองครั้ง คุณจะถูกตัดการเชื่อมต่อ ซึ่งหมายความว่า MaxAuthTries ถูกตั้งค่าเป็น 3
ปิดการใช้งานการเข้าสู่ระบบรูท
ไม่แนะนำคุณให้เข้าสู่ระบบในฐานะรูท เพียงใช้เป็นผู้ใช้ปกติบน Linux และใช้ sudo เพื่อดำเนินการที่ต้องใช้สิทธิ์รูท คุณไม่ควรอนุญาตให้รูทล็อกอินเข้าสู่เซิร์ฟเวอร์ SSH เฉพาะผู้ใช้ปกติเท่านั้นที่ได้รับอนุญาตให้เชื่อมต่อ หากจำเป็นต้องทำงานระดับผู้ดูแลระบบ ก็สามารถใช้ sudo ได้เช่นกัน หากคุณต้องอนุญาตให้ผู้ใช้รูทเข้าสู่ระบบ คุณสามารถบังคับให้ผู้ใช้เหล่านั้นใช้คีย์ SSH ได้
แก้ไขไฟล์การกำหนดค่าเพื่อปิดใช้งานการเข้าสู่ระบบรูท
เลื่อนไฟล์ลงจนกว่าคุณจะเห็นบรรทัดที่ขึ้นต้นด้วย#PermitRootLogin ห้ามรหัสผ่านให้ลบ # ที่จุดเริ่มต้นของบรรทัด
- หากคุณต้องการป้องกันไม่ให้รูทเข้าสู่ระบบ ให้แทนที่รหัสผ่านห้ามด้วยหมายเลข
- หากคุณอนุญาตให้รูทเข้าสู่ระบบแต่บังคับให้ใช้คีย์ SSH ให้ปล่อยรหัสผ่านที่ห้ามไว้เหมือนเดิม
บันทึกการเปลี่ยนแปลงและรีสตาร์ท SSH daemon
ขั้นตอนสุดท้าย
แน่นอน หากคุณไม่ต้องการให้ SSH ทำงานบนคอมพิวเตอร์ของคุณ ให้ปิดเครื่องด้วยคำสั่งต่อไปนี้:
sudo systemctl stop sshd
sudo systemctl disable sshd
ขอให้คุณประสบความสำเร็จ!