ค้นหาเว็บไซต์

23 เคล็ดลับความปลอดภัยในการเสริมความแข็งแกร่งของเซิร์ฟเวอร์ CentOS - ตอนที่ 2


ดำเนินการต่อจากบทช่วยสอนก่อนหน้านี้เกี่ยวกับวิธีรักษาความปลอดภัยและเสริมความแข็งแกร่งให้กับเซิร์ฟเวอร์ CentOS ในบทความนี้ เราจะพูดถึงเคล็ดลับด้านความปลอดภัยอื่นๆ ที่จะนำเสนอในรายการตรวจสอบด้านล่าง

ความต้องการ

  1. 20 เคล็ดลับความปลอดภัยในการทำให้เซิร์ฟเวอร์ CentOS แข็งแกร่ง – ตอนที่ 1

21. ปิดการใช้งานคำสั่ง SUID และ SGID ที่ไม่มีประโยชน์

หากบิต setuid และ setgid ถูกตั้งค่าบนโปรแกรมไบนารี คำสั่งเหล่านี้สามารถรันงานด้วยสิทธิ์ของผู้ใช้หรือกลุ่มอื่น เช่น สิทธิ์ root ซึ่ง สามารถเปิดเผยปัญหาด้านความปลอดภัยที่ร้ายแรงได้

บ่อยครั้งที่การโจมตีแบบบัฟเฟอร์โอเวอร์รันสามารถใช้ประโยชน์จากไบนารีที่ปฏิบัติการได้ดังกล่าวเพื่อเรียกใช้โค้ดที่ไม่ได้รับอนุญาตด้วยสิทธิ์ของผู้ใช้ระดับสูง

find /  -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

หากต้องการยกเลิกการตั้งค่าบิต setuid ให้รันคำสั่งด้านล่าง:

chmod u-s /path/to/binary_file

หากต้องการยกเลิกการตั้งค่าบิต setgid ให้รันคำสั่งด้านล่าง:

chmod g-s /path/to/binary_file

22. ตรวจสอบไฟล์และไดเร็กทอรีที่ไม่ได้รับอนุญาต

ไฟล์หรือไดเร็กทอรีที่ไม่ได้เป็นของบัญชีที่ถูกต้องจะต้องถูกลบหรือมอบหมายโดยได้รับอนุญาตจากผู้ใช้และกลุ่ม

ออกคำสั่ง find ด้านล่างเพื่อแสดงรายการไฟล์หรือไดเร็กทอรีที่ไม่มีผู้ใช้และกลุ่ม

find / -nouser -o -nogroup -exec ls -l {} \;

23. แสดงรายการไฟล์ที่เขียนได้ทั่วโลก

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

find / -path /proc -prune -o -perm -2 ! -type l –ls

24. สร้างรหัสผ่านที่รัดกุม

สร้างรหัสผ่านอย่างน้อยแปดตัวอักษร รหัสผ่านจะต้องมีตัวเลข อักขระพิเศษ และตัวพิมพ์ใหญ่ ใช้ pwmake เพื่อสร้างรหัสผ่าน 128 บิตจากไฟล์ /dev/urandom

pwmake 128

25. ใช้นโยบายรหัสผ่านที่รัดกุม

บังคับให้ระบบใช้รหัสผ่านที่รัดกุมโดยเพิ่มบรรทัดด้านล่างในไฟล์ /etc/pam.d/passwd

password required pam_pwquality.so retry=3

การเพิ่มบรรทัดด้านบน รหัสผ่านที่ป้อนไม่สามารถมีอักขระเกิน 3 ในลำดับแบบโมโนโทนิก เช่น abcd และอักขระที่เหมือนกันติดต่อกันมากกว่า 3 ตัว เช่น 1111.

หากต้องการบังคับให้ผู้ใช้ใช้รหัสผ่านที่มีความยาวขั้นต่ำ 8 อักขระ รวมถึงอักขระทุกคลาส การตรวจสอบความเข้มงวดสำหรับลำดับอักขระและอักขระต่อเนื่องกัน ให้เพิ่มบรรทัดต่อไปนี้ใน /etc/security /pwquality.conf ไฟล์

minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3

26. ใช้อายุรหัสผ่าน

คำสั่ง chage สามารถใช้สำหรับการมีอายุรหัสผ่านผู้ใช้ หากต้องการตั้งรหัสผ่านของผู้ใช้ให้หมดอายุใน 45 วัน ให้ใช้คำสั่งต่อไปนี้:

chage -M 45 username

หากต้องการปิดใช้งานเวลาหมดอายุของรหัสผ่านให้ใช้คำสั่ง:

chage -M -1 username

บังคับให้รหัสผ่านหมดอายุทันที (ผู้ใช้ต้องเปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งถัดไป) โดยการรันคำสั่งต่อไปนี้:

chage -d 0 username

27. ล็อคบัญชี

บัญชีผู้ใช้สามารถล็อคได้โดยดำเนินการคำสั่ง passwd หรือ usermod:

passwd -l username
usermod -L username

หากต้องการปลดล็อคบัญชี ให้ใช้ตัวเลือก -u สำหรับคำสั่ง passwd และตัวเลือก -U สำหรับ usermod

28. ป้องกันการเข้าถึงเชลล์ของบัญชี

เพื่อป้องกันไม่ให้บัญชีระบบ (บัญชีทั่วไปหรือบัญชีบริการ) เข้าถึง bash shell ให้เปลี่ยนรูทเชลล์เป็น /usr/sbin/nologin หรือ /bin/false ใน ไฟล์ /etc/passwd โดยใช้คำสั่งด้านล่าง:

usermod -s /bin/false username

หากต้องการเปลี่ยนเชลล์เมื่อสร้างปัญหาผู้ใช้ใหม่ให้ใช้คำสั่งต่อไปนี้:

useradd -s /usr/sbin/nologin username

29. ล็อคคอนโซลผู้ใช้เสมือนด้วย vlock

vlock เป็นโปรแกรมที่ใช้สำหรับล็อคเซสชันหลายเซสชันบนคอนโซล Linux ติดตั้งโปรแกรมและเริ่มล็อคเซสชันเทอร์มินัลของคุณโดยรันคำสั่งด้านล่าง:

yum install vlock
vlock

30. ใช้ระบบรวมศูนย์เพื่อจัดการบัญชีและการรับรองความถูกต้อง

การใช้ระบบการตรวจสอบความถูกต้องแบบรวมศูนย์สามารถลดความซับซ้อนในการจัดการและควบคุมบัญชีได้อย่างมาก บริการที่สามารถเสนอการจัดการบัญชีประเภทนี้ ได้แก่ IPA Server, LDAP, Kerberos, Microsoft Active Directory, Nis, Samba ADS หรือ Winbind

บริการเหล่านี้บางส่วนมีความปลอดภัยสูงตามค่าเริ่มต้นด้วยโปรโตคอลการเข้ารหัสและการเข้ารหัสคีย์สมมาตร เช่น Kerberos

31. บังคับให้ติดตั้งสื่อ USB แบบอ่านอย่างเดียว

การใช้ยูทิลิตี blockdev ทำให้คุณสามารถบังคับให้ติดตั้งสื่อแบบถอดได้ทั้งหมดเป็นแบบอ่านอย่างเดียว ตัวอย่างเช่น สร้างไฟล์การกำหนดค่า udev ใหม่ชื่อ 80-readonly-usb.rules ในไดเรกทอรี /etc/udev/rules.d/ โดยมีเนื้อหาดังนี้

SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"

จากนั้นใช้กฎด้วยคำสั่งด้านล่าง:

udevadm control -reload

32. ปิดการใช้งานการเข้าถึงรูทผ่าน TTY

เพื่อป้องกันไม่ให้บัญชีรูททำการเข้าสู่ระบบผ่านอุปกรณ์คอนโซลทั้งหมด (TTY) ให้ลบเนื้อหาของไฟล์ความปลอดภัยโดยพิมพ์พรอมต์คำสั่งต่อไปนี้เป็นรูท

cp /etc/securetty /etc/securetty.bak
cat /dev/null > /etc/securetty

โปรดจำไว้ว่ากฎนี้ใช้ไม่ได้กับเซสชันการเข้าสู่ระบบ SSH
เพื่อป้องกันการเข้าสู่ระบบรูทผ่าน SSH ให้แก้ไขไฟล์ /etc/ssh/sshd_config และเพิ่มบรรทัดด้านล่าง:

PermitRootLogin no

33. ใช้ POSIX ACL เพื่อขยายสิทธิ์ของระบบ

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

ตัวอย่างเช่น,

setfacl -m u:user:rw file
getfacl file

34. ตั้งค่า SELinux ในโหมดบังคับใช้

การปรับปรุง SELinux สำหรับเคอร์เนล Linux ใช้นโยบาย Mandatory Access Control (MAC) ซึ่งช่วยให้ผู้ใช้สามารถกำหนดนโยบายความปลอดภัยที่ให้สิทธิ์แบบละเอียดสำหรับผู้ใช้ โปรแกรม กระบวนการ ไฟล์ และอุปกรณ์ทั้งหมด

การตัดสินใจในการควบคุมการเข้าถึงของเคอร์เนลจะขึ้นอยู่กับบริบทที่เกี่ยวข้องกับความปลอดภัยทั้งหมด และไม่ได้ขึ้นอยู่กับข้อมูลระบุตัวตนผู้ใช้ที่ได้รับการรับรองความถูกต้อง

หากต้องการรับสถานะ Selinux และบังคับใช้นโยบาย ให้รันคำสั่งด้านล่าง:

getenforce
setenforce 1
sestatus

35. ติดตั้งยูทิลิตี้เพิ่มเติมของ SELinux

ติดตั้งแพ็คเกจ policycoreutils-python ซึ่งมียูทิลิตี้ Python เพิ่มเติมสำหรับการใช้งาน SELinux: audit2allow, audit2why, chcat และ การจัดการเนื้อหา

หากต้องการแสดงค่าบูลีนทั้งหมดพร้อมกับคำอธิบายสั้นๆ ให้ใช้คำสั่งต่อไปนี้:

semanage boolean -l

ตัวอย่างเช่น หากต้องการแสดงและตั้งค่าของ httpd_enable_ftp_server ให้รันคำสั่งด้านล่าง:

getsebool httpd_enable_ftp_server

หากต้องการให้ค่าบูลีนคงอยู่ตลอดการรีบูต ให้ระบุตัวเลือก -P เป็น setsebool ดังที่แสดงในตัวอย่างต่อไปนี้:

setsebool -P httpd_enable_ftp_server on

36. ใช้เซิร์ฟเวอร์บันทึกแบบรวมศูนย์

กำหนดค่า rsyslog daemon เพื่อส่งข้อความบันทึกของยูทิลิตี้ที่มีความละเอียดอ่อนไปยังเซิร์ฟเวอร์บันทึกแบบรวมศูนย์ ตรวจสอบไฟล์บันทึกด้วยความช่วยเหลือของยูทิลิตี้ logwatch

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

37. เปิดใช้งานกระบวนการบัญชี

เปิดใช้งานการบัญชีกระบวนการโดยการติดตั้งยูทิลิตี้ PSacct และใช้คำสั่ง lastcomm เพื่อแสดงข้อมูลเกี่ยวกับคำสั่งที่ดำเนินการก่อนหน้านี้ตามที่บันทึกไว้ในไฟล์การบัญชีระบบ และ sa เพื่อสรุปข้อมูลเกี่ยวกับคำสั่งที่ดำเนินการก่อนหน้านี้ตามที่บันทึกไว้ ในไฟล์บัญชีระบบ

38. การแข็งตัว /etc/sysctl.conf

ใช้กฎพารามิเตอร์เคอร์เนลต่อไปนี้เพื่อปกป้องระบบ:

ปิดการใช้งานการกำหนดเส้นทางต้นทาง

net.ipv4.conf.all.accept_source_route=0

ปิดใช้งานการส่งต่อ IPv4

ipv4.conf.all.forwarding=0

ปิดการใช้งาน IPv6

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

ปิดใช้งานการยอมรับและส่งแพ็กเก็ตที่มีการเปลี่ยนเส้นทาง ICMP เว้นแต่จะจำเป็นเป็นพิเศษ

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0

ปิดการใช้งานการส่งต่อเส้นทางย้อนกลับ

net.ipv4.conf.all.rp_filter=2

ละเว้นคำขอ ICMP echo ทั้งหมด (ตั้งค่าเป็น 1 เพื่อเปิดใช้งาน)

net.ipv4.icmp_echo_ignore_all = 0

39. ใช้บริการ VPN เพื่อเข้าถึงสถานที่ของคุณผ่านเครือข่ายสาธารณะที่ไม่มีการป้องกัน

ใช้บริการ VPN สำหรับผู้ให้บริการเสมอเพื่อเข้าถึงสถานที่ LAN จากระยะไกลผ่านทางอินเทอร์เน็ต บริการประเภทดังกล่าวสามารถกำหนดค่าได้โดยใช้โซลูชันโอเพ่นซอร์สฟรี เช่น OpenVPN หรือใช้โซลูชันที่เป็นกรรมสิทธิ์ เช่น Cisco VPN (ติดตั้งยูทิลิตีบรรทัดคำสั่ง vpnc ที่ Epel Repositories มอบให้)

40. ทำการสแกนระบบภายนอก

ประเมินความปลอดภัยของระบบเพื่อหาช่องโหว่โดยการสแกนระบบจากจุดระยะไกลผ่าน LAN ของคุณโดยใช้เครื่องมือเฉพาะ เช่น:

  1. Nmap – เครื่องสแกนเครือข่าย 29 ตัวอย่างคำสั่ง Nmap
  2. Nessus – เครื่องสแกนความปลอดภัย
  3. OpenVAS – ใช้เพื่อสแกนหาช่องโหว่และการจัดการช่องโหว่ที่ครอบคลุม
  4. Nikto – เครื่องมือสแกนสคริปต์ Common Gateway Interface (CGI) ที่ยอดเยี่ยม สแกนช่องโหว่ของเว็บใน Linux

41. ปกป้องระบบภายใน

ใช้การป้องกันระบบภายในจากไวรัส รูทคิท มัลแวร์ และติดตั้งระบบตรวจจับการบุกรุกที่สามารถตรวจจับกิจกรรมที่ไม่ได้รับอนุญาต (การโจมตี DDOS, การสแกนพอร์ต) ตามแนวทางปฏิบัติที่ดี เช่น:

  1. AIDE – สภาพแวดล้อมการตรวจจับการบุกรุกขั้นสูง – http://aide.sourceforge.net/
  2. ClamAV – เครื่องสแกนไวรัส https://www.clamav.net
  3. Rkhunter – เครื่องสแกนรูทคิท
  4. Lynis – เครื่องมือตรวจสอบและสแกนความปลอดภัยสำหรับ Linux
  5. Tripwire – ความปลอดภัยและความสมบูรณ์ของข้อมูล http://www.tripwire.com/
  6. Fail2Ban – การป้องกันเครือข่ายบุกรุก
  7. OSSEC – (HIDS) ระบบตรวจจับการบุกรุกบนโฮสต์ http://ossec.github.io/
  8. Mod_Security – ป้องกันการโจมตีแบบ Brute Force หรือ DDoS

42. แก้ไขตัวแปรสภาพแวดล้อมของผู้ใช้

เพิ่มรูปแบบ วันที่ และ เวลา เพื่อจัดเก็บการดำเนินการคำสั่งโดยใช้คำสั่งด้านล่าง:

echo 'HISTTIMEFORMAT="%d/%m/%y  %T  "' >> .bashrc'

บังคับให้บันทึก HISTFILE ทันทีทุกครั้งที่พิมพ์คำสั่ง (แทนที่จะออกจากระบบ):

echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc

จำกัดเซสชันการเข้าสู่ระบบแบบหมดเวลา รื้อเชลล์โดยอัตโนมัติเมื่อไม่มีกิจกรรมใดๆ เกิดขึ้นในช่วงเวลาที่ไม่ได้ใช้งาน มีประโยชน์มากในการยกเลิกการเชื่อมต่อเซสชัน SSH โดยอัตโนมัติ

echo ‘TMOUT=120’ >> .bashrc

ใช้กฎทั้งหมดโดยดำเนินการ:

source .bashrc

43. การสำรองข้อมูล

ใช้ยูทิลิตี้การสำรองข้อมูล เช่น tar, cat, rsync, scp, LVM snapshots ฯลฯ เพื่อจัดเก็บสำเนาของระบบของคุณ โดยเฉพาะนอกสถานที่ ในกรณีที่ระบบล้มเหลว

หากระบบถูกบุกรุก คุณสามารถดำเนินการกู้คืนข้อมูลจากการสำรองข้อมูลครั้งก่อนได้

สุดท้ายนี้ อย่าลืมว่าไม่ว่าคุณจะใช้มาตรการรักษาความปลอดภัยและมาตรการตรงกันข้ามมากมายเพียงใดเพื่อให้ระบบของคุณปลอดภัย คุณจะไม่มีวันปลอดภัยอย่างสมบูรณ์ 100% ตราบใดที่เครื่องของคุณเสียบปลั๊กและเปิดเครื่องอยู่