วันนี้เรามาทำให้ Apache Web Server ของเราปลอดภัยมากขึ้นด้วยขั้นตอนง่ายๆ 8 ขั้นตอนกันครับ ถึงแม้จะไม่ได้ปลอดภัยขึ้นถึงระดับที่ไม่สามารถแฮกได้ แต่อย่างน้อยก็ทำให้ผู้ที่จะโจมตีต้องทำการบ้านมากขึ้นนิดหนึ่ง โดยเราจะเน้นไปที่การปิด Error ต่างๆ ของระบบ และแถมท้ายด้วยการติดตั้ง ModSecurity ซึ่งเป็น Web Application Firewall (WAF) ที่จะช่วยป้องกันเว็บไซต์ของเราให้ปลอดภัยจากการโจมตีในแบบต่างๆ ได้มากขึ้น
1. ยกเลิกการแสดงหน้า welcome page
ปกติแล้วเวลาที่เราติดตั้ง apache ระบบจะสร้างหน้า welcome page ขึ้นมาให้เรา ซึ่งจะบอกทุกอย่างเกียวกับระบบ แต่ปกติหน้านี้จะไม่แสดงถ้าเราทำหน้า index ขึ้นมาแล้ว แต่ว่าลบมันทิ้งไปเลยก็ดีกว่าครับ ขั้นตอนก็ง่ายๆ เข้าไปลบไฟล์ /etc/httpd/conf.d/welcome.conf ได้เลยครับ
1 | # rm /etc/httpd/conf.d/welcome.conf |
ก่อนลบไฟล์ /etc/httpd/conf.d/welcome.conf
หลังลบไฟล์ /etc/httpd/conf.d/welcome.conf
2. ซ่อนการแสดงเวอร์ชั่นของ Apache และ OS จากหน้า Error
ทุกครั้งที่มีการเรียกไฟล์ที่ไม่มีอยู่ใน website ของเรา Apache จะแสดงข้อมูลขึ้นมาว่าเราใช้ Apache และ OS version อะไร ซึ่งจะเป็นข้อมูลที่ดี ที่จะให้แฮกเกอร์นำข้อมูลเหล่านั้นไปหาช่องโหว่มาโจมตี โดยเราสามารถปิดการแสดงข้อมูลเหล่านี้ได้โดยการแก้ไขไฟล์ /etc/httpd/conf/httpd.conf
เปิดไฟล์ขึ้นมาแก้ไข จะใช้ vi หรือ nano แล้วแต่ถนัด
1 | # nano /etc/httpd/conf/httpd.conf |
จากนั้นแก้ค่า ServerSignature และ ServerTokens ตามนี้ครับ
1 2 | ServerSignature Off ServerTokens Prod |
ก่อนแก้ไขจะเห็นว่าถ้ามี Error ระบบจะแสดงเวอร์ชั่นของ Apache และ OS ขึ้นมา
หลังจากแก้ไขแล้วจะแสดงแค่ Error อย่างเดียว
3. ยกเลิกการแสดงไฟล์ในไดเร็กทอรีที่ไม่มีอินเด็กซ์ไฟล์
ถ้าหากว่าเราเปิดเข้าไปในไดเร็กทอรี ที่ยังไม่มีอินเด็กซ์ไฟล์ ระบบจะแสดงไฟล์ทั้งหมดขึ้นมาให้ ซึ่งจะไม่ปลอดภัยเลยหากว่าแฮกเกอร์สามารถเห็นไฟล์ในไดเร็กทอรีต่างๆ ของเราได้หมด การเปิดออฟชั่นนี้สามารถทำได้ง่ายๆ โดยเพิ่ม Options -Indexes เข้าไปในไฟล์ /etc/httpd/conf/httpd.conf
เปิดไฟล์ httpd.conf ขึ้นมาแก้ไข
1 | # nano /etc/httpd/conf/httpd.conf |
เพิ่ม Options -Indexes เข้าไปในส่วนของ
1 2 3 | <Directory /var/www/html> Options -Indexes </Directory> |
ก่อนการแก้ไข จะเห็นว่าระบบแสดงชื่อไฟล์ขึ้นมาให้
หลังการแก้ไข เราก็จะไม่เห็นไฟล์ต่างๆแล้ว
4. ปิดโมดูลที่ไม่จำเป็น
ค่าแรกเริ่มของ Apache จะเปิดโมดูลต่างๆ ขึ้นมาเกือบทั้งหมด แต่บางอย่างเราก็ไม่ได้ใช้ เปิดไว้ก็อาจจะเป็นช่องโหว่ให้โดนแฮกเกอร์โจมตี ทางทีดีปิดมันไว้ดีกว่า ถ้าอันไหนจะใช้เราค่อยมาเปิดทีหลัง โมดูลต่างๆ พวกนี้เราสามารถเข้าไปเปิดและเปิดได้ที่ไฟล์ /etc/httpd/conf/httpd.conf โดยค้นหาคำว่า LoadModule และทำการใส่เครื่องหมาย # หน้าโมดูลที่ไม่ต้องการ อย่างเช่นโมดูล mod_info, mod_userdir, mod_autoindex
เปิดไฟล์ httpd.conf ขึ้นมาเปิดหรือปิดโมดูลที่ต้องการ
1 | # nano /etc/httpd/conf/httpd.conf |
5. ปิดการทำงานของ Server Side Includes และ CGI Execution
ทุกวันนี้คงไม่มีใครใช้ SSI และ CGI ในการทำเว็บกันแล้ว การปิดการทำงานก็ง่ายๆ แค่เพิ่ม -Includes และ -ExecCGI ใน httpd.conf ในส่วนของ Directory
เปิดไฟล์ httpd.conf
1 | # nano /etc/httpd/conf/httpd.conf |
เพิ่ม -Includes -ExecCGI เข้าไปในส่วนของ Directory
1 2 3 | <Directory /var/www/html> Options -Indexes -Includes -ExecCGI </Directory> |
6. ทำการเก็บ Log ของทุก VirtualHost ที่อยู่ในเซิฟเวอร์
ทำได้โดยการเพิ่ม ErrorLog และ CustomLog เข้าไปใน VirtualHost
1 2 3 4 5 6 7 | <VirtualHost *:80> ServerAdmin webmaster@www.example.com DocumentRoot /var/www/www.example.com ServerName www.example.com ErrorLog /var/log/httpd/www.example.com-error_log CustomLog /var/log/httpd/www.example.com-access_log common </VirtualHost> |
7. ติดตั้ง mod_security
mod_security เป็น Web Application Firewall (WAF) ที่จะช่วยเพิ่มความปลอดภัยให้เซิฟเวอร์เรามากขึ้น โดยสามารถป้องกันการทำ SQL Injection ได้ด้วย
อย่างแรก ทำการติดตั้ง EPEL (Extra Packages for Enterprise Linux) กันก่อน
1 2 3 4 5 6 7 | ## RHEL/CentOS 6 ## สำหรับเครื่อง 32-Bit # wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm ## RHEL/CentOS 6 ## สำหรับเครื่อง 64-Bit # wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm |
จากนั้นติดตั้ง mod_security เป็นอันเรียบร้อย
1 | # yum install mod_security |
8. ทำการอัพเกรด Apache อย่างสม่ำเสมอ
1 | # yum update httpd |