Apache network security HTTP server

Apache เป็นเว็บเซิร์ฟเวอร์ที่ใช้งานมากที่สุดในอินเทอร์เน็ต โดยจากการสำรวจของ NetCraft.com ในเดือนกรกฏาคม 2544 พบว่า มีผู้ใช้ Apache เป็นเว็บเซิร์ฟเวอร์ถึง 62.81% ในขณะที่ Microsoft's IIS และ Netscape มีผู้ใช้ราว 19.86% และ 6.91% ตามลำดับ ข้อมูลจาก http://www.netcraft.com/...ey/index-200007.html

จุดกำเนิดของ Apache นั้นเกิดขึ้นจาก National Center for Supercomputing Applications (NCSA) HTTPd web server ซึ่งพัฒนาโดย Rob McCool ในช่วงปี 1990 และภายหลังจากที่โครงการ NCSA HTTPd ถูกยกเลิก ได้มีนักพัฒนาหลายคนที่ได้นำ HTTPd มาปรับปรุงและใช้งาน

ในเดือน กุมภาพันธ์ 1995 ได้มีการจัดตั้ง Apache group ขึ้นโดยนักพัฒนา 8 คน และได้เผยแพร่เวอร์ชั่นแรกของ Apache คือ v 0.6.2 ในเดือนเมษายน 1995 และจากนั้น Apache 1.0 ก็ได้ถูกเผยแพร่เมื่อ 1 ธันวาคม 1995 และได้รับความนิยมอย่างรวดเร็วภายในเวลา 1 ปี กลายเป็นเว็บเซิร์ฟเวอร์ที่มีผู้ใช้งานมากที่สุด ปัจจุบัน The Apache Software Foundation เป็นผู้ดูแลโครงการ Apache HTTP server ซึ่งมีจุดประสงค์เพื่อสร้างเว็บเซิร์ฟเวอร์ที่มีความทนทานต่อการใช้งาน มีคุณภาพในระดับของ commercial-grade มี feature ที่น่าใช้งาน และสามารถเปิดเผย source code ได้ ทั้งนี้สามารถใช้ Apache เว็บเซิร์ฟเวอร์ได้ฟรีภายใต้ข้อกำหนดของ Apache Software License การติดตั้ง Apache ให้มีความปลอดภัยนั้นจะขึ้นอยู่กับตัวระบบปฏิบัติการและการเชื่อมต่อเครือข่ายมากกว่าเพราะถึงแม้ว่าหน้าต่างจะปิด ไว้แต่ถ้าประตูยังเปิดช่องไว้อยู่ ก็ไม่มีประโยชน์แต่อย่างไร

ในที่นี้เราจะไม่พูดถึงการทำให้ระบบปฏิบัติการมีความปลอดภัยมากยิ่งขึ้น เนื่องจากว่าเป็นเรื่องใหญ่มากเกินไปสำหรับเอกสารฉบับนี้ อย่างไรก็ตามการที่เราจะติดตั้งเว็บเซิร์ฟเวอร์ให้มีความปลอดภัยนั้น ก็ไม่ควรที่จะติดตั้งเซอร์วิสอื่นๆ ที่ไม่มีความจำเป็น เช่น ftp, mail, DNS ซึ่งถ้ามีความจำเป็นต้องติดตั้งก็ควรติดตั้งแยกเครื่องกันต่างหาก ทั้งนี้รวมไปถึงการไม่ติดตั้งแอพลิเคชันที่ไม่จำเป็นรวมทั้งคอมไพเลอร์ด้วย นอกจากนี้ปัญหาเรื่อง network security ก็จำเป็นต้องกล่าวถึงเป็นอย่างยิ่งเพราะ โดยส่วนใหญ่แล้ว Apache จะถูกเชื่อมต่อโดยตรงกับอินเทอร์เน็ต โดยไม่ได้มีการกรองจากไฟร์วอลล์ ซึ่งถ้าท่านมีความสามารถในการลงทุนและให้ความสำคัญกับ network security แล้ว ก็จำเป็น ที่จะติดตั้ง ไฟร์วอลล์เพื่อป้องกันการโจมตีแบบ Dinial of Service และ network-based attacks แบบอื่นๆ อีกและนอกจากนี้การติดตั้งซอฟแวร์เสริมตัวอื่น เช่น TCP wrapper, IPTables, SSH , Snort ก็จะช่วยให้ระบบของท่านมีความพร้อม ในการรับ มือกับเหตุการณ์ที่จะเกิดขึ้นด้วย

สมมุติฐานเอกสารนี้จะกล่าวถึง Apache ในส่วนของ POSIX environment เท่านั้น (หมายถึง Linux, UNIX) โดยเฉพาะอย่างยิ่ง Red Hat Linux 7 และท่านควรจะมีพื้นฐานในการใช้คำสั่งเบื้องต้นของ UNIX มาบ้าง เพราะบางอย่าง จะไม่มีการลงรายละเอียดมากนัก Obtaining Apache

ก่อนที่จะติดตั้ง Apache ให้มีความปลอดภัยนั้น ต้องสร้างความมั่นใจก่อนว่า source ที่ได้มานั้นเป็นตัวที่เป็นต้นฉบับจริงๆ ไม่ได้ถูกแก้ไขโดยผู้ไม่ประสงค์ดีมาก่อน และจุดที่ดีที่สุดในการดาวน์โหลด Apache ก็คือที่ http://httpd.apache.org/ ซึ่งสามารถดาวน์โหลด stable version รวมไปถึงเวอร์ชั่นก่อนหน้านี้ได้ด้วย แต่โดยส่วนใหญ่แล้ว Apache มักจะถูกรวบรวมไว้ใน CD-ROMs ของ Linux distributions อยู่แล้ว เช่น Red Hat Linux 7 จะมี Apache version 1.3.12 ติดมาด้วย เพื่อให้มั่นใจว่า Apache ที่ดาวน์โหลดมามีความสมบูรณ์ควรตรวจสอบโดยวิธีเช็ค PGP หรือ MD5 ในกรณีที่ใช้ RPM ก็สามารถตรวจสอบได้โดยใช้คำสั่ง "rpm -K packagename.rpm" ท่านสามารถหาเอกสารประกอบของ Apache ได้จาก http://httpd.apache.org/docs/ Installation
ในที่นี้จะติดตั้งโดยใช้เวอร์ชั่น RPM

ดังนั้นในกรณีที่ต้องการติดตั้ง Apache โดยใช้ออปชั่นที่ต้องการนั้น ให้ดาวน์โหลด source code และคอมไพล์เพื่อติดตั้งเอง ข้อดีของการใช้ RPM ก็คือเราสามารถตรวจสอบได้ว่า package ที่จะติดตั้งนั้น จะติดตั้งไฟล์อะไร ที่ใหนบ้าง เช่น "rpm -q apache -l | more" เวอร์ชั่นหลังๆ ของ Apache จะถูกรันโดย user ที่มีชื่อว่า apache ซึ่ง account นี้ไม่ต้องการ write permission ใน ServerRoot (เช่น /etc/httpd/) แต่อย่างใด มันต้องการแค่ read permission สำหรับไฟล์ configuration (เช่นภายใต้ /etc/httpd/conf/*) เท่านั้นเอง ซึ่งไฟล์ configuaration เหล่านี้มี root เป็น owner และปกติมันจะให้ read permission กับ other ซึ่งเราสามารถ remove read permission ของ other ออกไปได้ สำหรับ web do*****ent directories นั้นจะตั้งค่าได้ที่ไฟล์ configuration เช่น ที่ /var/www โดยดีฟ้อลต์แล้วมี owner คือ root และ web server ให้สิทธิในการอ่านและรัน (read and execute) ให้กับ world permission ดังนั้นแล้ว root จึงไม่ควร update ไฟล์ภายใต้ web do*****ent และก็เป็นการดีที่จะ chown จาก root ไปเป็น account อื่น ที่ไม่ใช่ apache account
นอกจากนี้เรายังสามารถสร้าง symbolic link ได้ภายใต้ web do*****ent และเช่นกันเราก็สามารถตั้งให้ Apache สามารถ follow หรือ ignore ตัว symbolic link ได้ ซึ่งจะมีการกล่าวถึงอีกครั้ง สิ่งหนึ่งที่สามารถทำได้คือการสร้างไฟล์ .htpasswd สำหรับใช้เก็บ user และ password เพื่อทำ authentication ซึ่งสามารถสร้างไฟล์นี้ได้โดยใช้คำสั่ง htpasswd -cmb /path/.htpasswd user password

-c = สรางไฟล์ใหม่
-m = ให้ใช้ MD5 ในการเข้ารหัส
-b = ใช้รหัสผ่านจาก command line (ถ้าไม่ระบุ จะต้องกรอกรหัสผ่านผ่านทาง interactive screen) โดยดีฟ้อลต์แล้วไฟล์ .htpasswd จะมี permission เป็น 644 และ owner = root , group = root ซึ่งทุกคนสามารถอ่านไฟล์นี้ได้ ดังนั้นจึงควรเปลี่ยน group ให้เป็น apache (chgrp apache .htpasswd) และเปลี่ยน permission เป็น 640 เพื่อป้องกันไม่ให้ user อื่นๆ ในระบบเข้ามาไฟล์นี้

Configuration Considerations
Apache เวอร์ชั่นเก่าๆ จะใช้ไฟล์ configuration แยกกัน ได้แก่ access.conf , srm.conf, httpd.conf แต่ปัจจุบันพารามิเตอร์ของทั้งสามไฟล์ได้ถูกรวมไว้ในไฟล์ httpd.conf ไฟล์เดียวเท่านั้น มีพารามิเตอร์ดังต่อไปนี้ที่มีผลกับความปลอดภัย ServerType ตัว Apache สามารถรันในลักษณะของ standalone หรือผ่านทาง inetd (xinetd ในเวอร์ชั่นของ Red Hat) ได้ แต่ทางที่ดีที่สุดคือให้รันในโหมด standalone ServerRoot ต้องมั่นใจว่าไม่ใช่ / (root) ของระบบ ResourceConfig/ AccessConfig ใช้ในกรณีที่ต้องการย้อนกลับไปใช้งานไฟล์ access.conf , srm.conf ซึ่งถูกใช้งานในเวอร์ชั่นเก่าๆๆ KeepAlive / MaxKeepAliveRequests / KeepAliveTimeout เกี่ยวข้องกับการเซ็ต persistent connection เพื่อใช้ในการป้องกันการทำ denial of service โดยการร้องขอใช้บริการจำนวนมาก จนเซิร์ฟเวอร์ไม่สามารถให้บริการได้ MinSpareServers / MaxSpareServers / StartServers / MaxClients / MaxRequestsPerChild พรารามิเตอร์เหล่านี้ไม่เกี่ยวข้องกับความปลอดภัยมากนัก แต่จะเกี่ยวข้องกับการทำ optimize มากกว่า User / Group โดยดีฟ้อลต์คือ apache ServerAdmin ไม่ควรใส่อี-เมล์จริงของท่าน ควรใช้อี-เมล์ที่ตั้งขึ้นมาโดยเฉพาะ เพราะจะมีความยุ่งยากในการหาว่าอี-เมล์นี้ถูกส่งมาจากที่ใด Do*****entRoot ใช้กำหนด directory สำหรับ web content เช่น /var/www Options FollowSymLinks / FllowSymLinksIfOwnermatch ตัว FollowSymLinks สั่งให้ Apache สามารถใช้งาน symbolic link ได้โดยไม่ต้องพิจารณาว่า owner คือใคร ในขณะที่ FllowSymLinksIfOwnermatch นั้น จะใช้งาน symbolic link นั้นได้เมื่อ owner ของ destination file เป็น owner เดียวกันกับ original file Options Indexes เมื่อผู้ใช้งานเรียก url ที่เป็น directory สิ่งที่ Apache จะทำคือ · ส่งไฟล์ข้อมูล · แสดง error page (access denied) · แสดงรายชื่อไฟล์ใน directory นั้นๆ ถ้า Indexes ถูกเซ็ต จะเป็น การแสดงรายชื่อไฟล์ใน directory นั้นๆ และถ้า FancyIndexing ถูกเซ็ตก็จะแสดงข้อมูล modified date, size, description ของไฟล์ใน directory นั้นๆ ด้วย ดังนั้นถ้าไม่ต้องการให้ผู้อื่นสามารถ browse directory ของเราได้ ก็ให้ลบ Indexes ออกไป ErrorLog / LogLevel / LogFormat / CustomLog พารามิเตอร์ทั้งสามตัวนี้ใช้ตั้งค่าที่เกี่ยวข้องกับล็อก เช่น path ที่จะใช้เก็บ ทั้งนี้ควรจะมีการทำ logrotate และเก็บข้อมูลนั้นไว้ เพื่อใช้ในการพิจารณาลักษณะ web traffic AccessFileName / Viewing ใช้ระบุชื่อไฟล ์ที่ใช ้สำหรับ ควบคุมการเรียกใช้งาน โดยดีฟ้อลต์แล้วจะใช้ชื่อ .htaccess ซึ่งโดยปกติแล้วถ้าเราไม่ต้องการจำกัดการใช้งานก็ให้ comment ข้อมูลในไฟล์ .htaccess ScriptAlias ใช้สำหรับกำหนด CGI-BIN directory ต้องมั่นใจว่า root ไม่ได้เป็น owner ของ directory นั้นๆ http put โดยดีฟ้อลต์แล้วมันจะถูก disable ไว้ ซึ่งถ้า enable ก้มหายถึงอนุญาตให้ใช้งาน http put Chroot Apache

ในกรณีที่ต้องการเพิ่มความปลอดภัยให้กับ Apache มากขึ้นก็สามารถพิจารณาใช้ chroot เข้ามาช่วยได้ ซึ่ง chroot ก็คือการจำลองให้ directory ที่หนึ่งกลายเป็น / (root) ของระบบ ดังภาพ ซึ่งจะช่วยให้สามารถสร้างroot directory ตัวใหม่ ซึ่งจะรัน Apache ภายใต้รูทนี้ คำสั่งและ เซอร์วิสที่รันภายใต้รูทใหม่นี้เรียกอีกอย่างว่า jail สำหรับวิธีในการติดตั้งและใช้งาน chroot นั้นสามารถหาข้อมูลได้จาก

http://www.linuxdoc.org/....3/chap29sec254.html
http://hoohoo.ncsa.uiuc.edu/...utorials/chroot.html
http://penguin.epfl.ch/chroot.html

และลิงค์ข้างล่างนี้ แนะนำวิธีในการเจาะเข้าไปใน chroot jail

http://www.bpfh.net/...ng/chroot-break.html SSL
SSL ถูกนำใช้งานเพราะสามารถเข้ารหัสข้อมูลได้ สำหรับวิธีการติดตั้งและตั้งค่านั้น ดูได้ที่ http://www.infosecuritymag.com/...web_server_sec.shtml Backup, Plan, Test, Monitor

หลังจากที่ config ตัว Apache ให้มีความปลอดภัยมากขึ้นแล้ว ก็ควรจะมีการสำรองข้อมูลไว้เพื่อนำกลับมาใช้ใหม่ในกรณีที่ระบบถูกบุกรุกหรือฮาร์ดแวร์มีปัญหา ทั้งนี้ควรจะมีการทดสอบการสำรองข้อมูลและการกู้ข้อมูลกลับ เพื่อไม่ให้มีปัญหาเมื่อต้องการใช้งานจริง สำหรับการตรวจตราระบบนั้น ให้ตรวจสอบล็อกไฟล์และสังเกตหาจุดที่ผิดปกติ ทั้งนี้อาจจะพิจารณาใช้ Tripwire เพื่อใช้ตรวจสอบความสมบูรณ์ของไฟล์ได้ นอกจากนี้ยังต้องคอบตรวจสอบ patch ที่ออกมาใหม่จาก Apache เป็นระยะ เช่น การไปตรวจสอบข่าวจาก

http://www.cert.org
http://www.apache.org
http://www.apachetoday.com
http://www.onlamp.com/apache เพื่อดูว่ามีการค้นพบช่องโหว่ใหม่หรือไม่ และจำเป็นต้องอัพเดต Apache หรือไม่
เนื้อหาจาก http://centralya.com/...le=article&sid=3
ผู้เขียน goragod โพสต์เมื่อ 08 มี.ค. 2551 เปิดดู 22,618 ป้ายกำกับ Apache
^