Linux hardening - เว็บเซิร์ฟเวอร์


31

รายการตรวจสอบ / รูทีนของคุณเมื่อตั้งค่าเว็บเซิร์ฟเวอร์ Linux คืออะไร

คุณแนะนำอะไรเพื่อให้ได้ความปลอดภัยสูงสุด

มีวิธีที่ต้องการในการบำรุงรักษาซ้ำ ๆ หรือไม่?

คำตอบ:


27
  • ก่อนอื่นให้ระวังว่าความสามารถในการเขียนสคริปต์ใน Apache (php, cgi, ruby, ... ) นั้นเทียบเท่ากับบัญชีเชลล์ที่มีสิทธิ์ของผู้ใช้ที่เรียกใช้สคริปต์

  • หากเซิร์ฟเวอร์ถูกแชร์กับผู้ใช้หลายคนคุณอาจต้องการใช้ suexec (- หรือITK MPM - แนะนำโดยDavid Schmitt ) ดังนั้นไม่ใช่ทุกสคริปต์ที่ทำงานในฐานะผู้ใช้ apache เดียวกัน

  • จำลองเสมือนหรือ chroot apache เพื่อให้มีการประนีประนอมอย่างน้อยในชั้นความปลอดภัยเพิ่มเติม โปรดระวังว่าเมื่อคุณ chroot apache การบำรุงรักษาอาจยากขึ้นเมื่อคุณย้ายห้องสมุดไปที่คุกเป็นต้นหากคุณใช้ FreeBSD คุณสามารถใช้คุกแทนได้ซึ่งง่ายต่อการบำรุงรักษามากเพราะคุณสามารถติดตั้ง apache ได้ จากพอร์ตและเรียกใช้การตรวจสอบพอร์ตจากภายในโดยไม่ต้องกังวลเกี่ยวกับการพึ่งพาไลบรารีและการย้ายไฟล์ด้วยตนเองซึ่งจะกลายเป็นความยุ่งเหยิงที่น่าเกลียด ด้วย BSD jails คุณสามารถใช้ระบบการจัดการแพ็คเกจ (พอร์ต) ต่อไปได้ (บน GNU / Linux คุณสามารถใช้VServerสำหรับการจำลองเสมือน - แนะนำโดยDavid Schmitt )

  • (ชัด) ติดตามการอัพเดทและแพทช์ไม่เพียง แต่สำหรับ Apache เท่านั้น แต่ยังรวมถึง PHP, ruby, perl และอื่น ๆ ... อย่าเพิ่งเชื่อใจระบบปฏิบัติการของคุณเพื่อให้คุณได้รับการอัปเดตทั้งหมด บาง distro ของช้ามากกับแพทช์ของพวกเขา จำกัด เวลาในการเปิดเผยให้น้อยที่สุด 0 วัน ติดmilw0rmฟีดในเครื่องอ่าน RSS ของคุณสมัครรับจดหมายข่าวinsecure.orgฯลฯ ไม่เพียง แต่มันจะช่วยให้คุณเรียนรู้เกี่ยวกับช่องโหว่ก่อนที่ระบบปฏิบัติการของคุณจะเริ่มปล่อยแพทช์คุณยังจะได้เรียนรู้เกี่ยวกับช่องโหว่ใน php ตัวอย่างการใช้งาน cms ซึ่งอาจไม่ได้รับการจัดการหรือแก้ไขโดยระบบปฏิบัติการของคุณเลย

  • ใช้บางอย่างเช่น tripwire / aide, audit หรือ mtree (บน BSD) เพื่อติดตามการเปลี่ยนแปลงในระบบไฟล์ของคุณ อันนี้สำคัญมาก มีการเปลี่ยนแปลงใด ๆ ที่ส่งถึงคุณเป็นประจำตรวจสอบด้วยตนเองทุกวัน หากมีการเปลี่ยนแปลงไฟล์ใด ๆ ที่ไม่ควรเปลี่ยนแปลงให้ตรวจสอบสาเหตุ หากจาวาสคริปต์ที่เป็นอันตรายบางส่วนถูกแทรกลงในหน้าของคุณด้วยวิธีใดก็ตามคุณก็จะได้รับวิธีนี้ สิ่งนี้ไม่เพียง แต่ช่วยประหยัดเซิร์ฟเวอร์ของคุณ แต่ยังรวมถึงผู้ใช้ของคุณด้วยเนื่องจากหน้าเว็บของคุณเองอาจถูกนำไปใช้ในทางที่ไม่เหมาะสม (นี่เป็นกลยุทธ์ที่พบบ่อยมากผู้โจมตีมักไม่สนใจเซิร์ฟเวอร์ของคุณพวกเขาแค่ต้องการแพร่เชื้อผู้เยี่ยมชมของคุณให้มากที่สุดเท่าที่จะเป็นไปได้จนกระทั่งค้นพบผู้โจมตีเหล่านี้ก็ไม่รำคาญที่จะซ่อนเส้นทางของพวกเขา การจับประนีประนอมแบบนี้ให้เร็วที่สุดเป็นสิ่งสำคัญมาก)

  • ใช้สิ่งต่าง ๆ เช่นsuhosinเพื่อป้องกัน php ช่วย แต่ยังเรียนรู้ที่จะเข้าใจปรับแต่งมันเป็นพารามิเตอร์ที่คาดหวังของแอปพลิเคชันของคุณ

  • การใช้เคอร์เนลแพตช์เช่นPaXอาจช่วยปกป้องคุณจากช่องโหว่หน่วยความจำล้นมากเกินไป แม้ว่าซอฟต์แวร์ของคุณจะมีช่องโหว่ (สิ่งนี้ไม่ทำให้คุณคงกระพันมันเป็นเพียงอีกชั้นหนึ่งรองพื้น)

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

  • พิจารณาใช้การควบคุมการเข้าถึงที่จำเป็น (เช่น: SELinux ) อนุญาตให้คุณระบุรายละเอียดที่ได้รับอนุญาตให้ทำในแต่ละแอปพลิเคชัน อนุญาตให้เข้าถึงไฟล์ใด สิ่งที่เรียกว่าเคอร์เนลอนุญาตให้ทำ ฯลฯ เป็นกระบวนการที่เกี่ยวข้องมากและต้องมีความเข้าใจมากมาย Distro บางแห่งมีนโยบาย SELinux ที่ทำไว้ล่วงหน้าสำหรับแพ็คเกจของพวกเขา (เช่น: Gentoo ) ข้อเสนอแนะนี้เป็นสิ่งที่ขัดแย้งกับรายการด้านล่าง แต่ยังคงใช้ได้อย่างไรก็ตาม

  • ทำสิ่งที่ง่าย กลยุทธ์การรักษาความปลอดภัยที่ซับซ้อนอาจทำงานกับคุณได้

  • ใน Apache ให้ตั้งค่ากฎเริ่มต้นที่เข้มงวดมาก (ตัวเลือกไม่มีปฏิเสธจากทั้งหมด ฯลฯ ... ) และแทนที่ตามที่จำเป็นสำหรับ VirtualHosts เฉพาะ

  • ปฏิเสธการเข้าถึง dotfiles ทั้งหมด (ซึ่งครอบคลุมไฟล์. htaccess ทันที)

  • ใช้ https ทุกที่ที่มีการตรวจสอบรหัสผ่านทุกประเภท

  • ไฟร์วอลล์ควรเป็นนโยบายที่ปฏิเสธโดยค่าเริ่มต้น สร้างกฎเฉพาะในไฟร์วอลล์ของคุณเพื่อบันทึกปริมาณการใช้งานเฉพาะ

  • ตั้งค่าสคริปต์แยกวิเคราะห์เพื่อสแกนบันทึกของคุณเพื่อหาสิ่งผิดปกติ (ชุดรหัสโหมโรง IDSสามารถทำสิ่งนี้ได้ แต่โดยสุจริตฉันแนะนำให้คุณสร้างสคริปต์ของคุณเองเมื่อเวลาผ่านไปเพราะจะช่วยให้คุณเข้าใจเครื่องมือและกฎของคุณได้ดีขึ้น)

  • ให้เซิร์ฟเวอร์ของคุณส่งรายงานรายวันเกี่ยวกับผู้ใช้ที่เข้าสู่ระบบครั้งล่าสุดการเชื่อมต่อที่ใช้งานอยู่แบนด์วิดท์ที่ใช้ ฯลฯ

  • มี cron scan หา suid ไบนารีไฟล์ที่เขียนได้ทั่วโลกและอะไรทำนองนั้นและส่งให้คุณทางไปรษณีย์

  • สำหรับสิ่งใดก็ตามที่คุณตั้งค่าซึ่งส่งถึงคุณคุณควรสร้างรายการข้อยกเว้นเมื่อเวลาผ่านไป (โฟลเดอร์ที่จะเพิกเฉยต่อการเปลี่ยนแปลงของระบบไฟล์, 777 ไฟล์ที่จะอนุญาต, suid ไบนารีที่จะอนุญาต) เป็นสิ่งสำคัญที่คุณจะได้รับแจ้งในสิ่งที่ไม่ควรเกิดขึ้นเท่านั้น หากคุณได้รับจดหมายทุกวันด้วยสิ่งเล็ก ๆ น้อย ๆ คุณจะเริ่มไม่สนใจอีเมลเหล่านั้นและพวกเขาจะไร้ประโยชน์

  • มีกลยุทธ์การสำรองข้อมูลที่ดีแบบซ้ำซ้อน และอย่าเพิ่งคิดว่าการสร้างภาพหรือสำเนาของทุกอย่างใช้งานได้ ตัวอย่างเช่นหาก MySQL อยู่ระหว่างการเขียนลงในตารางระหว่างการสำรองข้อมูลไฟล์ไบนารี MySQL ของคุณอาจเสียหายเมื่อคุณกู้คืนการสำรองข้อมูลของคุณ ดังนั้นคุณจะต้องมี cron ที่ mysqldump เป็นฐานข้อมูลของคุณที่ด้านบนของภาพปกติหรือ tarballs ยามค่ำคืนหรือการควบคุมเวอร์ชันหรืออะไรก็ตามที่คุณตั้งค่าไว้ คิดเกี่ยวกับกลยุทธ์การสำรองข้อมูลของคุณ ฉันหมายความว่าจริงๆคิดเกี่ยวกับมัน

  • อย่าพึ่งพารายการเช่นนี้เพื่อความปลอดภัย :) อย่างจริงจัง! คุณจะพบสิ่งเหล่านี้มากมายทั่วอินเทอร์เน็ตไปอ่านพวกเขาทั้งหมดค้นคว้าคำแนะนำทั้งหมดและใช้สามัญสำนึกและประสบการณ์เพื่อประกอบความคิดของคุณเอง ในที่สุดประสบการณ์และสามัญสำนึกเป็นเพียงสิ่งเดียวที่จะช่วยคุณได้ ไม่มีรายการหรือเครื่องมือ อ่าน แต่อย่าคัดลอกโดยไม่เข้าใจ


+1 รายการที่ยอดเยี่ยม! ฉันขอแนะนำให้ดูที่ ITK MPM ( mpm-itk.sesse.net ) แทน suexec และ Linux VServer ( linux-vserver.org ) แทน chroots นอกจากนี้สำหรับการสแกนระบบไฟล์ยังมี tripwire หรือ aide และ chkrootkit
David Schmitt

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

@ David: ใช่ด้วยการกล่าวถึง tripwire ฉันเป็นผู้ช่วยโดยนัยฉันจะเพิ่มลิงก์ผู้ช่วยในกรณี ฉันจะเพิ่มข้อเสนอแนะ vserver ใช่ virtualisation และ / หรือ paravirtualization จะดีกว่า chroot ซึ่งเป็นสาเหตุที่ฉันพูดถึง FreeBSD jails สิ่งหนึ่งที่มีเครื่องเสมือนว่าเป็นที่ต้องทำซ้ำ userland + เครื่องมือที่จำเป็นสำหรับแต่ละ VM จะไปกินมากพื้นที่ดิสก์พิเศษซึ่งสามารถจะเป็นปัญหา
Jns

หากคุณจำเป็นต้องทำเวอร์ชวลไลซ์เซชั่นหรือเงินสด / ฮาร์ดแวร์สั้น ๆ การเมาท์ Jails + nullfs สามารถหลีกเลี่ยงปัญหานั้นได้ และเนื่องจากคุกไม่ได้ถูกจำลองเสมือนหรือจำลองดังนั้นจึงไม่มีค่าใช้จ่ายเลย ฉันเดาว่า vserver เป็นสิ่งที่ดีที่สุดใน GNU / Linux
jns

ว้าว! นี่ยอดเยี่ยมจริงๆ .. ชำระเงินรายการตรวจสอบที่ sans.org ด้วย มันช่วยได้มากจริงๆ sans.org/score/checklists
LalakaJ

5

ฉันแนะนำรายการตรวจสอบความปลอดภัย Linuxจาก SAN ฉันใช้สิ่งนั้นบวกกับกระบวนการภายในอื่น รายการตรวจสอบอาจล้าสมัยไปเล็กน้อย แต่ประเด็นสำคัญหลายข้อยังคงเป็นจริง


5
  • ฉันตั้งค่าไฟร์วอลล์และกระตุ้นเฉพาะการเพิ่มแต่ละบริการเท่านั้น
  • สำหรับบริการใด ๆ ฉันอ่านเอกสารช่วยเหลือของแอปพลิเคชั่นสำหรับไฟล์การกำหนดค่าของพวกเขาและตรวจสอบให้แน่ใจว่าอย่างน้อยฉันก็อ่านทุกการตั้งค่า
  • ฉันสมัครรับรายชื่อผู้รับจดหมายเพื่อความปลอดภัย
  • ฉันทำงาน rkhunter และ lynis ทุกคืนในงาน cron
  • ฉันมีข้อผิดพลาดทั้งหมดเกินกว่าเกณฑ์ที่กำหนดส่งถึงฉัน
  • ฉันมีการเปลี่ยนแปลงทั้งหมดที่เกี่ยวข้องกับการบันทึก (รีสตาร์ทบริการการบันทึก ฯลฯ ) ส่งอีเมลถึงฉัน
  • ฉันเก็บ ฯลฯ ในการโค่นล้ม

4

แก้ไข ~ / .ssh / config ของคุณ

permit_root_login no

สิ่งนี้ทำให้

ssh root@server

ไม่ตอบสนอง แต่

ssh user@server
user$ su

จะทำงานถ้าคุณต้องการเข้าสู่ระบบในฐานะรูท


1

จะมีสิทธิ์นับไม่ถ้วนในการตรวจสอบรายการตรวจสอบที่นับไม่ถ้วนไม่สิ้นสุดการค้นพบข้อบกพร่อง / ช่องโหว่ใหม่ ความปลอดภัยฉันจะไม่คิดว่าเป็นสิ่งที่คุณเปิดหรือปิดมันเป็นสิ่งที่คุณทำอย่างต่อเนื่อง

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

การไม่บอกว่านโยบายเริ่มต้นจะไม่ช่วย แต่โดยส่วนตัวแล้วฉันชอบที่จะรู้ว่ามันอนุญาตอะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.