20 เคล็ดลับความปลอดภัยในการเสริมความแข็งแกร่งของเซิร์ฟเวอร์ CentOS - ตอนที่ 1
บทช่วยสอนนี้ครอบคลุมเฉพาะเคล็ดลับความปลอดภัยทั่วไปสำหรับ CentOS 8/7 ซึ่งสามารถใช้เพื่อทำให้ระบบแข็งแกร่งขึ้น เคล็ดลับรายการตรวจสอบมีวัตถุประสงค์เพื่อใช้เป็นส่วนใหญ่กับเซิร์ฟเวอร์ Bare-Metal ประเภทต่างๆ หรือบนเครื่อง (ทางกายภาพหรือเสมือน) ที่ให้บริการเครือข่าย
อย่างไรก็ตาม เคล็ดลับบางส่วนสามารถนำไปใช้กับเครื่องอเนกประสงค์ได้เช่นกัน เช่น เดสก์ท็อป แล็ปท็อป และคอมพิวเตอร์บอร์ดเดี่ยวขนาดการ์ด (Raspberry Pi)
ความต้องการ
- CentOS 8 การติดตั้งขั้นต่ำ
- CentOS 7 การติดตั้งขั้นต่ำ
1. การป้องกันทางกายภาพ
ล็อคการเข้าถึงห้องเซิร์ฟเวอร์ของคุณ ใช้การล็อคชั้นวางและกล้องวงจรปิด โปรดทราบว่าการเข้าถึงห้องเซิร์ฟเวอร์ทางกายภาพใดๆ ก็ตามอาจทำให้เครื่องของคุณประสบปัญหาด้านความปลอดภัยร้ายแรงได้
รหัสผ่าน BIOS สามารถเปลี่ยนได้โดยการรีเซ็ตจัมเปอร์บนเมนบอร์ดหรือโดยการถอดแบตเตอรี่ CMOS นอกจากนี้ ผู้บุกรุกสามารถขโมยฮาร์ดดิสก์หรือติดฮาร์ดดิสก์ใหม่โดยตรงกับอินเทอร์เฟซของเมนบอร์ด (SATA, SCSI ฯลฯ) บูตเครื่องด้วย Linux live distro และโคลนหรือคัดลอกข้อมูลโดยไม่ทิ้งร่องรอยของซอฟต์แวร์ใดๆ
2. ลดผลกระทบจากการสอดแนม
ในกรณีที่มีข้อมูลที่ละเอียดอ่อนสูง คุณควรใช้การป้องกันทางกายภาพขั้นสูง เช่น การวางและล็อคเซิร์ฟเวอร์ไว้ใน Faraday Cage หรือใช้โซลูชัน TEMPEST ทางการทหาร เพื่อลดผลกระทบของการสอดแนมระบบผ่านทางวิทยุหรือการรั่วไหลของไฟฟ้า
3. รักษาความปลอดภัย BIOS/UEFI
เริ่มต้นกระบวนการทำให้เครื่องของคุณแข็งแกร่งขึ้นโดยการรักษาความปลอดภัยการตั้งค่า BIOS/UEFI โดยเฉพาะการตั้งรหัสผ่าน BIOS/UEFI และปิดการใช้งานอุปกรณ์สื่อสำหรับบูต (CD, DVD, ปิดการใช้งานการสนับสนุน USB) ใน เพื่อป้องกันไม่ให้ผู้ใช้ที่ไม่ได้รับอนุญาตแก้ไขการตั้งค่า BIOS ของระบบหรือเปลี่ยนลำดับความสำคัญของอุปกรณ์บู๊ตและการบู๊ตเครื่องจากสื่ออื่น
เพื่อที่จะใช้การเปลี่ยนแปลงประเภทนี้กับเครื่องของคุณ คุณต้องอ่านคำแนะนำเฉพาะจากคู่มือผู้ผลิตเมนบอร์ด
4. ตัวโหลดการบูตที่ปลอดภัย
ตั้งรหัสผ่าน GRUB เพื่อป้องกันไม่ให้ผู้ใช้ที่เป็นอันตรายเข้าไปยุ่งเกี่ยวกับลำดับการบูตเคอร์เนลหรือระดับการรัน แก้ไขพารามิเตอร์เคอร์เนล หรือเริ่มระบบเข้าสู่โหมดผู้ใช้คนเดียวเพื่อสร้างความเสียหายให้กับระบบของคุณและรีเซ็ตรูท รหัสผ่านเพื่อรับการควบคุมพิเศษ
5. ใช้พาร์ติชั่นดิสก์แยกกัน
เมื่อติดตั้ง CentOS บนระบบที่ใช้เป็นเซิร์ฟเวอร์ที่ใช้งานจริง ให้ใช้พาร์ติชันเฉพาะหรือฮาร์ดดิสก์เฉพาะสำหรับส่วนต่อไปนี้ของระบบ:
/(root)
/boot
/home
/tmp
/var
6. ใช้ LVM และ RAID เพื่อความซ้ำซ้อนและการเติบโตของระบบไฟล์
พาร์ติชัน /var เป็นสถานที่สำหรับเขียนข้อความบันทึกลงดิสก์ ส่วนนี้ของระบบสามารถขยายขนาดได้แบบทวีคูณบนเซิร์ฟเวอร์ที่มีการรับส่งข้อมูลจำนวนมากซึ่งเปิดเผยบริการเครือข่าย เช่น เว็บเซิร์ฟเวอร์หรือไฟล์เซิร์ฟเวอร์
ดังนั้น ให้ใช้พาร์ติชั่นขนาดใหญ่สำหรับ /var หรือพิจารณาตั้งค่าพาร์ติชั่นนี้โดยใช้โลจิคัลวอลุ่ม (LVM) หรือรวมฟิสิคัลดิสก์หลายตัวเป็นอุปกรณ์ RAID 0 เสมือนที่มีขนาดใหญ่กว่าตัวเดียวเพื่อรักษาขนาดใหญ่ จำนวนข้อมูล สำหรับข้อมูล ความซ้ำซ้อนให้พิจารณาใช้เค้าโครง LVM ที่ด้านบนของระดับ RAID 1
สำหรับการตั้งค่า LVM หรือ RAID บนดิสก์ ให้ปฏิบัติตามคำแนะนำที่เป็นประโยชน์ของเรา:
- ตั้งค่า Disk Storage ด้วย LVM ใน Linux
- สร้างดิสก์ LVM โดยใช้ vgcreate, lvcreate และ lvextend
- รวมดิสก์หลาย ๆ อันไว้ในที่เก็บข้อมูลเสมือนขนาดใหญ่ที่เดียว
- สร้าง RAID 1 โดยใช้ดิสก์สองตัวใน Linux
7. แก้ไขตัวเลือก fstab เพื่อรักษาความปลอดภัยพาร์ติชันข้อมูล
แยกพาร์ติชั่นที่มีไว้สำหรับจัดเก็บข้อมูลและป้องกันการทำงานของโปรแกรม ไฟล์อุปกรณ์ หรือบิต setuid บนพาร์ติชั่นประเภทนี้โดยการเพิ่มตัวเลือกต่อไปนี้ในไฟล์ fstab ดังภาพประกอบด้านล่าง ข้อความที่ตัดตอนมา:
/dev/sda5 /nas ext4 defaults,nosuid,nodev,noexec 1 2
เพื่อป้องกันการเลื่อนระดับสิทธิ์และการดำเนินการสคริปต์ตามอำเภอใจ ให้สร้างพาร์ติชันแยกต่างหากสำหรับ /tmp และต่อเชื่อมเป็น nosuid, nodev และ noexec .
/dev/sda6 /tmp ext4 defaults,nosuid,nodev,noexec 0 0
8. เข้ารหัสฮาร์ดดิสก์ในระดับบล็อกด้วย LUKS
เพื่อป้องกันการสอดแนมข้อมูลที่ละเอียดอ่อนในกรณีที่มีการเข้าถึงฮาร์ดไดรฟ์ของเครื่อง ฉันขอแนะนำให้คุณเรียนรู้วิธีเข้ารหัสดิสก์โดยอ่านบทความของเรา การเข้ารหัสข้อมูลฮาร์ดดิสก์ Linux ด้วย LUKS
9. ใช้ PGP และการเข้ารหัสคีย์สาธารณะ
ในการเข้ารหัสดิสก์ ให้ใช้คำสั่ง PGP และ Public-Key Cryptography หรือ OpenSSL เพื่อเข้ารหัสและถอดรหัสไฟล์ที่ละเอียดอ่อนด้วยรหัสผ่านดังที่แสดงในบทความนี้ กำหนดค่าที่เก็บข้อมูลระบบ Linux ที่เข้ารหัส
10. ติดตั้งเฉพาะจำนวนแพ็คเกจขั้นต่ำที่จำเป็นเท่านั้น
หลีกเลี่ยงการติดตั้งโปรแกรม แอปพลิเคชัน หรือบริการที่ไม่สำคัญหรือไม่จำเป็น เพื่อหลีกเลี่ยงช่องโหว่ของแพ็คเกจ วิธีนี้สามารถลดความเสี่ยงที่การประนีประนอมของซอฟต์แวร์อาจนำไปสู่การประนีประนอมแอปพลิเคชันอื่น ๆ บางส่วนของระบบ หรือแม้แต่ระบบไฟล์ ซึ่งส่งผลให้ข้อมูลเสียหายหรือสูญหายในที่สุด
11. อัพเดตระบบบ่อยๆ
อัพเดตระบบอย่างสม่ำเสมอ ทำให้เคอร์เนล Linux ซิงค์กับแพตช์รักษาความปลอดภัยล่าสุดและซอฟต์แวร์ที่ติดตั้งทั้งหมดให้ทันสมัยเป็นเวอร์ชันล่าสุดโดยออกคำสั่งด้านล่าง:
yum update
12. ปิดการใช้งาน Ctrl+Alt+Del
เพื่อป้องกันไม่ให้ผู้ใช้รีบูตเซิร์ฟเวอร์เมื่อพวกเขาสามารถเข้าถึงแป้นพิมพ์หรือผ่านแอปพลิเคชันคอนโซลระยะไกลหรือคอนโซลเสมือน (KVM ซึ่งเป็นอินเทอร์เฟซซอฟต์แวร์การจำลองเสมือน) คุณควรปิดการใช้งาน Ctrl+Alt ลำดับคีย์ +Del
โดยดำเนินการคำสั่งด้านล่าง
systemctl mask ctrl-alt-del.target
13. ลบแพ็คเกจซอฟต์แวร์ที่ไม่จำเป็น
ติดตั้งซอฟต์แวร์ขั้นต่ำที่จำเป็นสำหรับเครื่องของคุณ อย่าติดตั้งโปรแกรมหรือบริการเพิ่มเติม ติดตั้งแพ็คเกจจากแหล่งเก็บข้อมูลที่เชื่อถือได้หรืออย่างเป็นทางการเท่านั้น ใช้การติดตั้งระบบขั้นต่ำในกรณีที่เครื่องถูกกำหนดให้ใช้งานตลอดชีวิตในฐานะเซิร์ฟเวอร์
ตรวจสอบแพ็คเกจที่ติดตั้งโดยใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้:
rpm -qa
สร้างรายการโลคัลของแพ็คเกจที่ติดตั้งทั้งหมด
yum list installed >> installed.txt
ศึกษารายการซอฟต์แวร์ที่ไม่มีประโยชน์และลบแพ็คเกจโดยออกคำสั่งด้านล่าง:
yum remove package_name
14. เริ่มบริการ Systemd ใหม่หลังจากอัพเดต Daemon
ใช้ตัวอย่างคำสั่งด้านล่างเพื่อรีสตาร์ทบริการ systemd เพื่อใช้การอัปเดตใหม่
systemctl restart httpd.service
15. ลบบริการที่ไม่จำเป็นออก
ระบุบริการที่กำลังฟังบนพอร์ตเฉพาะโดยใช้คำสั่ง ss ต่อไปนี้
ss -tulpn
หากต้องการแสดงรายการบริการที่ติดตั้งทั้งหมดพร้อมกับปัญหาสถานะเอาต์พุตให้ใช้คำสั่งด้านล่าง:
systemctl list-units -t service
ตัวอย่างเช่น การติดตั้งขั้นต่ำเริ่มต้นของ CentOS มาพร้อมกับ Postfix daemon ที่ติดตั้งตามค่าเริ่มต้น ซึ่งทำงานตามชื่อของต้นแบบภายใต้พอร์ต 25 ลบบริการเครือข่าย Postfix ในกรณีที่เครื่องของคุณจะไม่ถูกใช้เป็นเมลเซิร์ฟเวอร์
yum remove postfix
16. เข้ารหัสข้อมูลที่ส่ง
อย่าใช้โปรโตคอลที่ไม่ปลอดภัยสำหรับการเข้าถึงระยะไกลหรือการถ่ายโอนไฟล์ เช่น Telnet, FTP หรือโปรโตคอลข้อความธรรมดาสูงอื่นๆ เช่น SMTP, HTTP, NFS หรือ SMB ซึ่งโดย โดยค่าเริ่มต้น จะไม่เข้ารหัสเซสชันการตรวจสอบสิทธิ์หรือข้อมูลที่ส่ง
ใช้เฉพาะ sftp, scp สำหรับการถ่ายโอนไฟล์ และใช้ SSH หรือ VNC บนช่องทาง SSH สำหรับการเชื่อมต่อคอนโซลระยะไกลหรือการเข้าถึง GUI
ในการสร้างคอนโซล VNC ผ่าน SSH ให้ใช้ตัวอย่างด้านล่างซึ่งส่งต่อพอร์ต VNC 5901 จากเครื่องระยะไกลไปยังเครื่องท้องถิ่นของคุณ:
ssh -L 5902:localhost:5901 remote_machine
บนเครื่องท้องถิ่นให้รันคำสั่งด้านล่างเพื่อเชื่อมต่อเสมือนกับปลายทางระยะไกล
vncviewer localhost:5902
17. การสแกนพอร์ตเครือข่าย
ดำเนินการตรวจสอบพอร์ตภายนอกโดยใช้เครื่องมือ Nmap จากระบบระยะไกลผ่าน LAN การสแกนประเภทนี้สามารถใช้เพื่อตรวจสอบช่องโหว่ของเครือข่ายหรือทดสอบกฎไฟร์วอลล์
nmap -sT -O 192.168.1.10
18. ไฟร์วอลล์กรองแพ็คเก็ต
ใช้ยูทิลิตี firewalld เพื่อปกป้องพอร์ตของระบบ เปิดหรือปิดพอร์ตบริการเฉพาะ โดยเฉพาะพอร์ตที่รู้จัก (<1024)
ติดตั้ง เริ่มต้น เปิดใช้งาน และแสดงรายการกฎไฟร์วอลล์โดยใช้คำสั่งด้านล่าง:
yum install firewalld
systemctl start firewalld.service
systemctl enable firewalld.service
firewall-cmd --list-all
19. ตรวจสอบโปรโตคอลแพ็กเก็ตด้วย Tcpdump
ใช้ยูทิลิตี้ tcpdump เพื่อดักจับแพ็กเก็ตเครือข่ายในเครื่อง และตรวจสอบเนื้อหาเพื่อหาการรับส่งข้อมูลที่น่าสงสัย (พอร์ตต้นทาง-ปลายทาง, โปรโตคอล TCP/IP, การรับส่งข้อมูลเลเยอร์สอง, คำขอ ARP ที่ผิดปกติ)
เพื่อการวิเคราะห์ไฟล์ tcpdump ที่จับได้ดียิ่งขึ้น ให้ใช้โปรแกรมขั้นสูง เช่น Wireshark
tcpdump -i eno16777736 -w tcpdump.pcap
20. ป้องกันการโจมตี DNS
ตรวจสอบเนื้อหาของรีโซลเวอร์ของคุณ ซึ่งโดยทั่วไปคือไฟล์ /etc/resolv.conf ซึ่งกำหนดที่อยู่ IP ของเซิร์ฟเวอร์ DNS ที่ควรใช้เพื่อค้นหาชื่อโดเมน เพื่อหลีกเลี่ยงไม่ให้มีคนในเครื่อง - การโจมตีระดับกลาง, การรับส่งข้อมูลที่ไม่จำเป็นสำหรับเซิร์ฟเวอร์ DNS รูท, การปลอมแปลงหรือสร้างการโจมตี DOS
นี่เป็นเพียงส่วนแรก ในส่วนถัดไป เราจะพูดถึงเคล็ดลับด้านความปลอดภัยอื่นๆ สำหรับ CentOS 8/7