บทความนี้ขอแนะนำการปรับแต่งคอนฟิกพื้นฐานของ Apache ซึ่งติดตั้งมากับ Fedora 9 ทำให้เว็บเซิร์ฟเวอร์ทำงานอย่างมีประสิทธิภาพ โดยการปิดคุณสมบัติที่ไม่ได้ใช้งานออกไป เพื่อประหยัดขนาด CPU, Memory ที่ต้องใช้ในการรันโปรแกรม
การแก้ไขทั้งหมดในบทความนี้เป็นการแก้ไขคอนฟิกในไฟล์ /etc/httpd/conf/httpd.conf ซึ่งจะเป็นไฟล์คอนฟิกหลักของ Apache เว็บเซิร์ฟเวอร์
คำเตือน
- กรุณาทดสอบการแก้ไขคอนฟิกในเครื่องทดลองก่อนที่จะนำไปใช้กับเว็บเซิร์ฟเวอร์จริงๆ
- แนะนำให้สำรองไฟล์ (backup) ก่อนที่จะแก้ไขคอนฟิก
ตรวจสอบความถูกต้องของรูปแบบไฟล์ httpd.conf
เมื่อแก้ไขไฟล์ httpd.conf เสร็จสิ้น ให้ใช้คำสั่ง httpd –t เพื่อตรวจสอบรูปแบบ (syntax) ของไฟล์ก่อนว่าถูกต้องหรือไม่ ผลลัพธ์จากการรันคำสั่งต้องขึ้นว่า Syntax OK ก่อนที่จะ restart เซอร์วิสใหม่อีกครั้งเพื่อให้คอนฟิกที่แก้ไขมีผล
ตัวอย่างการใช้คำสั่ง httpd –t เพื่อตรวจสอบ syntax ของไฟล์ httpd.conf
[root@web-server ~]# httpd -t Syntax OK
ตัวอย่างผลลัพธ์การตรวจสอบในกรณีที่รูปแบบ syntax ของไฟล์ httpd.conf ไม่ถูกต้อง
[root@web-server ~]# httpd -t Syntax error on line 44 of /etc/httpd/conf/httpd.conf: Invalid command 'ServerToken', perhaps misspelled or defined by a module not included in the server configuration
ผลลัพธ์จะฟ้องว่าผิดตรงไหนในไฟล์คอนฟิก พร้อมทั้งคำแนะนำในการแก้ไข ซึ่งต้องแก้ไขจนกว่าจะได้ผลลัพธ์ “Syntax OK” แล้วค่อยใช้คำสั่ง service เพื่อทำการ restart เว็บเซิร์ฟเวอร์
ServerTokens OS
ServerTokens จะเป็นคอนฟิกที่ใช้ควบคุมการส่งข้อมูลของ Server: ใน HTTP Header กลับไปยังเว็บไคลเอนต์ เพื่ออธิบายถึงโปรแกรมที่ใช้รันเป็นเว็บเซิร์ฟเวอร์ และรายละเอียดเพิ่มเติม
แนะนำให้เปลี่ยนคอนฟิกจาก OS เป็น Prod เพื่อลดรายละเอียดของโปรแกรมที่ใช้ ด้วยเหตุผลทางด้านความปลอดภัยของตัวเซิร์ฟเวอร์เอง
ดีฟอลต์จากการติดตั้ง Fedora 9
ServerTokens OS
ข้อมูล Server: ใน HTTP Header ที่ส่งกลับไปยังไคลเอนต์จะมีทั้งชื่อโปรแกม เวอร์ชั่น และระบบปฏิบัติการที่ใช้ เช่น Apache/2.2.8 (Fedora)
คำแนะนำ
ServerTokens Prod
ข้อมูล Server: ใน HTTP Header จะส่งแค่คำว่า Apache
ServerSignature On
คอนฟิก ServerSignature จะควบคุมการแสดงข้อมูลของเว็บเซิร์ฟเวอร์ในหน้าเว็บเพจที่เปิดแล้วมีปัญหา เช่น Apache Server at 10.3.3.91 Port 80
แนะนำให้เปลี่ยนจาก On เป็น Off เพื่อปิดการแสดงข้อมูล
ดีฟอลต์จากการติดตั้ง Fedora 9
ServerSignature On
คำแนะนำ
ServerSignature Off
ปิดการใช้คุณสมบัติ Indexes
ดีฟอลต์คอนฟิกที่ติดตั้งมากับ Fedora นั้น จะเปิดการใช้ Indexes เพื่อแสดงชื่อไฟล์ต่างๆ ที่อยู่ในไดเร็คทอรี่ ที่ไม่มีไฟล์ index.html
ดีฟอลต์จากการติดตั้ง Fedora 9
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
คำแนะนำ
ปิดการใช้งาน Indexes โดยลบออกจากบรรทัด Options ในคอนฟิก Directory ต่างๆ
<Directory "/var/www/html"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
ปิดคอนฟิกการแสดงรูป icons
หลังจากการปิดการใช้งาน Indexes เพื่อแสดงชื่อไฟล์ต่างๆ ที่อยู่ในไดเร็คทอรีที่ไม่มีไฟล์ index.html เราสามารถปิดคอนฟิก icons ในบรรทัดต่อไปนี้ในไฟล์ได้ วิธีการปิดที่แนะนำคือใส่เครื่องหมาย # ไว้ด้านหน้า
ตัวอย่างการปิดคอนฟิก icons ในไฟล์ httpd.conf ด้วยการใส่เครื่องหมาย #
#Alias /icons/ "/var/www/icons/"
#<Directory "/var/www/icons"> # Options Indexes MultiViews FollowSymLinks # AllowOverride None # Order allow,deny # Allow from all #</Directory>
#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/* #AddIconByType (IMG,/icons/image2.gif) image/* #AddIconByType (SND,/icons/sound2.gif) audio/* #AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe #AddIcon /icons/binhex.gif .hqx #AddIcon /icons/tar.gif .tar #AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv #AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip #AddIcon /icons/a.gif .ps .ai .eps #AddIcon /icons/layout.gif .html .shtml .htm .pdf #AddIcon /icons/text.gif .txt #AddIcon /icons/c.gif .c #AddIcon /icons/p.gif .pl .py #AddIcon /icons/f.gif .for #AddIcon /icons/dvi.gif .dvi #AddIcon /icons/uuencoded.gif .uu #AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl #AddIcon /icons/tex.gif .tex #AddIcon /icons/bomb.gif core
#AddIcon /icons/back.gif .. #AddIcon /icons/hand.right.gif README #AddIcon /icons/folder.gif ^^DIRECTORY^^ #AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif
#ReadmeName README.html #HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
ปิดการใช้งาน CGI (ในกรณีที่ไม่ใช้งาน)
หากเว็บเซิร์ฟเวอร์ไม่มีการใช้งาน CGI แนะนำให้ปิดคุณสมบัตินี้ออกไป วิธีการปิดคือใส่เครื่องหมาย # นำหน้า บรรทัดต่อไปนี้
ตัวอย่างการปิดการใช้งาน CGI โดยการใส่เครื่องหมาย # นำหน้าบรรทัด
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all #</Directory>
ปิดการใช้งาน Server-Side Includes (SSI)
หากไม่มีการใช้งาน Sever-Side Includes (SSI) แนะนำให้ปิดคุณสมบัตินี้ออกไป วิธีการปิดคือใส่เครื่องหมาย # นำหน้า บรรทัดต่อไปนี้
ตัวอย่างการปิดการใช้งาน Server-Side Includes (SSI) โดยการใส่เครื่องหมาย # นำหน้าบรรทัด
#AddType text/html .shtml #AddOutputFilter INCLUDES .shtml