การรักษาความปลอดภัย SSH เกี่ยวข้องกับเทคนิคที่เป็นไปได้มากมาย แต่ไม่ใช่ว่าทั้งหมดจะใช้งานได้จริงในทุกสภาพแวดล้อม คำแนะนำในบทความนี้เป็นวิธีการที่ได้รับการยอมรับอย่างกว้างขวางและมีผลกระทบสูงซึ่งสร้างสมดุลระหว่างความง่ายในการนำไปปฏิบัติและการป้องกันที่แข็งแกร่ง คำแนะนำเหล่านี้ได้มาจากมาตรฐานที่กำหนดโดยองค์กรต่างๆ เช่น NIST, CERT และโครงการ OpenSSH และสะท้อนถึงหลักการสำคัญที่ SSL.com นำไปใช้ในการรักษาความปลอดภัยของใบรับรองดิจิทัลด้วย เช่น การปกป้องคีย์ การใช้การเข้ารหัสที่แข็งแกร่ง และการจำกัดการเข้าถึงที่มีสิทธิพิเศษ
เมื่อคุณได้กำหนดแนวทางปฏิบัติที่ดีที่สุดพื้นฐานเหล่านี้แล้ว คุณสามารถสำรวจวิธีการขั้นสูงอื่นๆ เช่น SSH ที่ใช้ใบรับรอง การเคาะพอร์ต หรือ SSH ผ่าน VPN ตามความต้องการ
1. ใช้การตรวจสอบสิทธิ์โดยใช้รหัสแทนรหัสผ่าน
มันคืออะไร:
คุณแทนที่การเข้าสู่ระบบด้วยรหัสผ่านด้วยคู่คีย์สาธารณะ/ส่วนตัวที่เข้ารหัส คีย์สาธารณะจะอยู่บนเซิร์ฟเวอร์ของคุณ ในขณะที่คีย์ส่วนตัวจะอยู่บนเครื่องภายในเครื่องของคุณ
เพราะเหตุใดจึงปลอดภัยกว่า:
- รหัสผ่านมีความเสี่ยงต่อการโจมตีแบบบรูทฟอร์ซ
- ผู้โจมตีจะต้องได้รับรหัสส่วนตัวของคุณทางกายภาพจึงจะเจาะเข้าไปได้ ซึ่งยากกว่าการเดารหัสผ่านมาก
วิธีการใช้งาน:
สร้างคู่คีย์
บน Linux หรือ macOS ให้เปิดเทอร์มินัลและเรียกใช้:
SSH-keygen -t ed25519
เพื่อความปลอดภัยยิ่งขึ้น (ถ้า ed25519 ไม่พร้อมใช้งานในสภาพแวดล้อมของคุณ) คุณสามารถใช้:
SSH-keygen -t อาร์เอส -b 4096
คัดลอกคีย์สาธารณะไปยังเซิร์ฟเวอร์ของคุณ
คุณสามารถใช้คำสั่ง ssh-copy-id (บน Linux/macOS) เพื่อถ่ายโอนคีย์สาธารณะของคุณได้อย่างง่ายดาย:
ssh-copy-id ผู้ใช้@ที่อยู่เซิร์ฟเวอร์
หากไม่มี ssh-copy-id ให้ผนวกเนื้อหาของไฟล์ id_ed25519.pub (หรือ id_rsa.pub) ของคุณไปยังไฟล์ ~/.ssh/authorized_keys ของเซิร์ฟเวอร์ด้วยตนเอง
ปิดใช้งานการตรวจสอบรหัสผ่าน
ใน /etc/ssh/sshd_config ให้ตั้งค่าดังนี้:
รหัสผ่าน
เริ่มบริการ SSH ใหม่:
sudo systemctl การเริ่มต้นใหม่ SSH
การตรวจสอบสิทธิ์โดยใช้คีย์ SSH นั้นคล้ายกับการจัดการใบรับรองดิจิทัลตรงที่ช่วยให้แน่ใจว่ามีเพียงผู้ที่มีคีย์ส่วนตัวที่ถูกต้องเท่านั้นที่สามารถสร้างการเชื่อมต่อได้
2. ปิดใช้งานการเข้าสู่ระบบรูท
มันคืออะไร:
ป้องกันผู้ใช้ root จากการเข้าสู่ระบบโดยตรงผ่าน SSH
เพราะเหตุใดจึงปลอดภัยกว่า:
- บัญชีรูทมีสิทธิพิเศษไม่จำกัดและเป็นเป้าหมายที่น่าสนใจสำหรับผู้โจมตี
- การปิดการใช้งานการเข้าถึงรูทโดยตรงทำให้ผู้โจมตีต้องเดาไม่เพียงแค่คีย์หรือรหัสผ่านเท่านั้น แต่ยังรวมถึงชื่อผู้ใช้ที่ถูกต้องด้วย
วิธีการใช้งาน:
ใน /etc/ssh/sshd_config ค้นหาหรือเพิ่ม:
PermitRootLogin no
รีสตาร์ท SSH:
sudo systemctl การเริ่มต้นใหม่ SSH
ขั้นตอนนี้จะช่วยจำกัดพื้นที่การโจมตีของคุณได้อย่างมีประสิทธิภาพโดยการลบบัญชีที่ทรงพลังที่สุดออกจากการเข้าถึงได้ง่าย
3. บังคับใช้การเข้ารหัสที่แข็งแกร่งและอัลกอริทึม MAC
มันคืออะไร:
SSH ช่วยให้คุณระบุรหัสเข้ารหัสและรหัสยืนยันข้อความ (MAC) ที่จะใช้ในการเข้ารหัสข้อมูลและตรวจสอบความสมบูรณ์ของข้อมูล
เพราะเหตุใดจึงปลอดภัยกว่า:
- อัลกอริทึมที่เก่าหรืออ่อนแอ (เช่น DES, RC4) อาจเสี่ยงต่อการโจมตีทางการเข้ารหัส
- การใช้รหัสที่ทันสมัย (เช่น AES-256) และ MAC ที่แข็งแกร่ง (เช่น HMAC-SHA2) ช่วยให้ข้อมูลเซสชันของคุณเป็นความลับและป้องกันการปลอมแปลง
วิธีการใช้งาน:
ใน /etc/ssh/sshd_config เพิ่มหรืออัพเดตรายการรหัส/MAC ของคุณ:
รหัส aes256-ctr,aes192-ctr,aes128-ctr
MAC hmac-sha2-256,hmac-sha2-512
รีสตาร์ท SSH:
sudo systemctl การเริ่มต้นใหม่ SSH
การรักษาข้อมูลเข้ารหัสให้ทันสมัยสำหรับ SSH ถือเป็นสิ่งสำคัญพอๆ กับการรับรองว่ามีการใช้โปรโตคอลและรหัสที่ปลอดภัย TLS.
4. อัปเดต SSH (และระบบของคุณ) อยู่เสมอ
มันคืออะไร:
ตรวจสอบให้แน่ใจว่า OpenSSH และระบบปฏิบัติการอื่นๆ ของคุณได้รับแพตช์ความปลอดภัยเป็นประจำ
เพราะเหตุใดจึงปลอดภัยกว่า:
- ซอฟต์แวร์ที่ล้าสมัยมักมีช่องโหว่ที่ทราบอยู่แล้ว
- ผู้โจมตีมักจะกำหนดเป้าหมายเป็นเวอร์ชันเก่าที่มีช่องโหว่ที่ไม่ได้รับการแก้ไข
วิธีการใช้งาน:
บนระบบที่ใช้ Debian หรือ Ubuntu:
sudo apt-get อัพเดต && sudo apt-get upgrade
บนระบบ CentOS, Fedora หรือ RHEL:
sudo yum ปรับปรุง
อย่าลืมตรวจสอบการอัปเดตเฟิร์มแวร์ด้วยหากคุณกำลังรัน SSH บนอุปกรณ์เครือข่ายหรือฮาร์ดแวร์อื่น
5. ใช้การตรวจสอบสิทธิ์แบบสองปัจจัยหรือหลายปัจจัย (2FA/MFA)
มันคืออะไร:
เพิ่มชั้นความปลอดภัยอีกชั้นโดยต้องใช้สิ่งอื่นนอกเหนือจากรหัสผ่านหรือคีย์ (เช่น รหัสแบบใช้ครั้งเดียวบนโทรศัพท์ของคุณ)
เพราะเหตุใดจึงปลอดภัยกว่า:
- แม้ว่าผู้โจมตีจะได้คีย์ SSH ของคุณ แต่พวกเขายังคงต้องใช้ปัจจัยที่สองในการเข้าสู่ระบบ
- ช่วยป้องกันการโจรกรรมข้อมูลประจำตัว
วิธีการใช้งาน:
ติดตั้งและกำหนดค่าเครื่องมือ MFA
ตัวอย่างเช่น Google Authenticator ให้ สามารถติดตั้งบนเซิร์ฟเวอร์ Linux และตั้งค่าเป็นโมดูล PAM (Pluggable Authentication Modules) ได้ ปฏิบัติตามคำแนะนำในการติดตั้งที่เจาะจงสำหรับระบบปฏิบัติการของคุณ
แก้ไข /etc/pam.d/sshd และ /etc/ssh/sshd_config
- เปิดใช้งาน Google Authenticator หรือโมดูล MFA อื่น
- ตั้งค่า ChallengeResponseAuthentication ใช่ และวิธีการรับรองความถูกต้อง publickey, keyboard-interactive (หรือการรวมกันใดก็ตามที่เหมาะกับสภาพแวดล้อมของคุณ)
รีสตาร์ท SSH:
sudo systemctl การเริ่มต้นใหม่ SSH
6. เปิดใช้งานการบันทึกและการตรวจสอบ
มันคืออะไร:
บันทึกเหตุการณ์การเข้าสู่ระบบ SSH ติดตามกิจกรรมที่น่าสงสัย และรับการแจ้งเตือนเมื่อมีบางสิ่งผิดปกติ
เพราะเหตุใดจึงปลอดภัยกว่า:
- ความพยายามบุกรุกมักจะมองเห็นได้ในบันทึกเป็นการเข้าสู่ระบบที่ล้มเหลวซ้ำๆ หรือการกระทำที่ไม่ได้รับอนุญาต
- การตรวจจับในระยะเริ่มต้นหมายความว่า คุณสามารถตอบสนองได้อย่างรวดเร็ว ไม่ว่าจะเป็นการบล็อก IP หรือการเปลี่ยนแปลงการกำหนดค่าก่อนที่จะเกิดความเสียหาย
วิธีการใช้งาน:
เพิ่มความละเอียดของบันทึก
ใน /etc/ssh/sshd_config ให้ตั้งค่าดังนี้:
บันทึกระดับรายละเอียด
บันทึกรวม
- เครื่องมือที่ชอบ syslog, rsyslog,หรือ syslog-ng ช่วยรวบรวมและรวมบันทึกไว้ที่ศูนย์กลาง
- A โซลูชัน SIEM (การจัดการข้อมูลความปลอดภัยและเหตุการณ์) สามารถนำเสนอการวิเคราะห์ขั้นสูงและการแจ้งเตือน
ใช้เครื่องมือป้องกันการบุกรุก
fail2ban สแกนไฟล์บันทึกและแบน IP ที่แสดงสัญญาณที่เป็นอันตราย เช่น การป้อนรหัสผ่านผิดพลาดบ่อยเกินไป
7. ดำเนินการควบคุมและจำกัดการเข้าถึง
มันคืออะไร:
จำกัดผู้ที่สามารถเชื่อมต่อกับ SSH และจากที่ใด เพื่อป้องกันการร้องขอขาเข้าที่ไม่ได้รับอนุญาตหรือมากเกินไป
วิธีการทำ:
ข้อจำกัดของไฟร์วอลล์
อนุญาต SSH จากที่อยู่ IP ที่รู้จักหรือเชื่อถือได้เท่านั้น ตัวอย่างเช่น บน Linux ที่มี ufw:
sudo ufw อนุญาตจาก 192.168.1.0/24 ไปยังพอร์ตใดก็ได้ 22
การกำหนดค่าพอร์ต
การรัน SSH บนพอร์ตที่ไม่ใช่มาตรฐาน (เช่น 2222) สามารถลดความพยายามในการสแกนอัตโนมัติได้ แม้ว่าจะไม่สามารถใช้แทนมาตรการรักษาความปลอดภัยจริงได้ แต่ก็สามารถลดสัญญาณรบกวนได้
ข้อจำกัดของผู้ใช้/กลุ่ม
ใน /etc/ssh/sshd_config ให้ระบุ:
อนุญาตให้ผู้ใช้ อลิซ บ็อบ
or
AllowGroups sshadmins
8. ใช้รหัสผ่านคีย์ SSH และการจัดเก็บคีย์ที่ปลอดภัย
มันคืออะไร:
เข้ารหัสคีย์ส่วนตัวของคุณด้วยรหัสผ่าน เพื่อให้แม้ว่าเครื่องของคุณจะถูกบุกรุก คีย์นั้นก็จะไม่สามารถใช้งานได้ทันที
เพราะเหตุใดจึงปลอดภัยกว่า:
- ไฟล์คีย์ที่ถูกขโมยโดยไม่มีรหัสผ่านสามารถทำให้เข้าถึงได้ทันที
- วลีรหัสผ่านทำหน้าที่เป็นชั้นการเข้ารหัสเพิ่มเติมบนคีย์ท้องถิ่นของคุณ
วิธีการใช้งาน:
ตั้งค่ารหัสผ่านระหว่างการสร้างคีย์
SSH-keygen -t ed25519
(คุณจะได้รับแจ้งให้ป้อนรหัสผ่าน)
ปกป้องไฟล์สำคัญของคุณ
จำกัดสิทธิ์การเข้าถึงโฟลเดอร์ .ssh และไฟล์คีย์ของคุณ:
chmod 700 ~ / .ssh
chmod 600 ~/.ssh/id_ed25519
พิจารณาโมดูลความปลอดภัยฮาร์ดแวร์ (HSM) หรือโทเค็น
สำหรับองค์กรขนาดใหญ่ การใช้ฮาร์ดแวร์เฉพาะสำหรับการจัดเก็บคีย์สามารถบรรเทาความเสี่ยงจากการโจรกรรมที่ใช้ซอฟต์แวร์หรือมัลแวร์ได้
สรุป
ความปลอดภัยของ SSH แบ่งออกเป็นหลายชั้น โดยการใช้การตรวจสอบสิทธิ์โดยใช้คีย์ การปิดใช้งานการเข้าถึงรูทโดยตรง การใช้การเข้ารหัสที่แข็งแกร่ง การอัปเดตข้อมูล การกำหนดให้ต้องมีการตรวจสอบสิทธิ์หลายขั้นตอน การตรวจสอบบันทึก การจำกัดการเข้าถึง และการปกป้องคีย์ของคุณด้วยรหัสผ่าน คุณจะสามารถป้องกันความเสี่ยงที่พบบ่อยที่สุด (และร้ายแรงที่สุด) ได้
มาตรการเหล่านี้สอดคล้องกับปรัชญาความปลอดภัยที่กว้างขึ้นซึ่ง SSL.com แนะนำให้ใช้กับใบรับรองดิจิทัล ได้แก่ ปกป้องคีย์การเข้ารหัส ใช้การเข้ารหัสที่แข็งแกร่ง จำกัดการเข้าถึงที่มีสิทธิพิเศษ และเฝ้าระวังระบบของคุณอย่างเข้มข้น เมื่อคุณกำหนดแนวทางปฏิบัติที่ดีที่สุดพื้นฐานเหล่านี้แล้ว คุณสามารถสำรวจตัวเลือกขั้นสูงเพิ่มเติม เช่น ผู้ให้บริการใบรับรอง SSH การเคาะพอร์ต หรือการเรียกใช้ SSH ผ่าน VPN เพื่อปรับแต่งมาตรการความปลอดภัยของคุณเพิ่มเติม