ป้องกันการ Hack ระบบ Web Server บน Linux

จดไว้อ่านเอง

1. ลง os เสร็จให้ mount /tmp noexec,nosuid
วิธีทำ https://www.vultr.com/docs/secure-tmp-and-tmpfs-on-centos-6
ลิงค์สำรอง https://www.ireallyhost.com/kb/vps/66
2. compile apache disable cgi
* Directadmin version ใหม่ ปิดในหน้า console ได้เลย
3. disable function ใน php.ini
4. set upload tmp dir ใน php.ini ไปที่ /tmp
5. ปิด ~user ใน apache 2.2 (อันนี้แค่อ่านเขียนไฟล์ข้าม user ได้ แต่ถ้า apache 2.4 มันป้องกันมาให้แล้ว)
วิธีปิด http://ip/~user

CustomBuild 2.0 now has the option by default:
# cd /usr/local/directadmin/custombuild
# ./build set userdir_access no
# ./build rewrite_confs

http://help.directadmin.com/item.php?id=344

6. /etc/my.cnf ใส่ local_infile=0

วิธีจูน apache และ mysql

maxclients ของ apache สูตรคำนวณคือแรมหาร 50 ครับ แรม 24GB ก็เซตประมาณ 480 – 512 ไม่เกินนั้น

ส่วนของ my.cnf นี่บอกยากครับ หลักๆ ใช้ความรู้สึกเอามากกว่า

ด้านล่างนี้เป็นค่าเฉลี่ยสำหรับเครื่อง hosting ที่มีแรมมากกว่า 8GB ครับ ค่าที่ยังปรับเพิ่มได้อีกมี key_buffers กับ innodb_buffer_pool_size นอกนั้นไม่ควรปรับเพิ่ม (max connections ปรับเพิ่มได้แต่ไม่เกิน 500 แต่ไม่แนะนำให้ปรับโดยเด็ดขาด)

[mysqld]
local-infile=0

innodb_buffer_pool_size=256M
innodb_additional_mem_pool_size=1M
innodb_log_buffer_size=500K
innodb_thread_concurrency=2
innodb_file_per_table

skip-character-set-client-handshake
skip-name-resolve
max_connections = 300
key_buffer = 512M
myisam_sort_buffer_size = 32M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
read_rnd_buffer_size = 1M

table_cache = 1536
thread_cache = 4
thread_concurrency = 2
thread_cache_size = 256
wait_timeout = 3600
connect_timeout = 10
max_tmp_tables = 256
tmp_table_size = 128M
max_allowed_packet = 16M
max_connect_errors = 10
query_cache_limit = 1M
query_cache_size = 32M
query_cache_type = 1
query_prealloc_size = 16384
query_alloc_block_size = 16384
max_heap_table_size = 128M

 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open_files_limit = 16384

 

Credit: icez

How to Setup mod_status on apache 2.x

vi /etc/httpd/conf/extra/httpd-info.conf

Code:
#
# Get information about the requests being processed by the server
# and the configuration of the server.
#
# Required modules: mod_status (for the server-status handler),
#                   mod_info (for the server-info handler)

#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.

<Location /server-status>
    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from
</Location>

#
# ExtendedStatus controls whether Apache will generate "full" status
# information (ExtendedStatus On) or just basic information (ExtendedStatus
# Off) when the "server-status" handler is called. The default is Off.
#
ExtendedStatus On

#
# Allow remote server configuration reports, with the URL of
#  http://servername/server-info (requires that mod_info.c be loaded).
# Change the ".example.com" to match your domain to enable.
#
<Location /server-info>
    SetHandler server-info
#    Order deny,allow
#    Deny from all
#    Allow from 
</Location>

[root@apache]# service httpd restart 
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

maxconnection แตกต่างจาก max client อย่างไร (ก๊อบไว้อ่านเอง)

max connection ก็คือ concurrent (ที่ connected ใช้งานในขณะนั้นๆ) กำหนดไว้ 100-500 หากแรม 1-2GB แค่นี้ mysql ก็ทำงาน slow แล้ว
กำหนดอย่างไรแล้ว ไปไล่หาดูใน my.cnf จะมี comment เอาไว้

การ tuning concurrent ไม่ใช่กำหนดให้มากที่สุด แต่กำหนดให้ทำงานเหมาะสมกับ cpu + ram (ram ที่กำหนดให้ mysqld) ต้องปรับ buffer ให้เหมาะสม
ค่าต่างๆเหล่านี้ระบุตายตัวไม่ได้ ต้องค่อยๆปรับขึ้นทีล่ะนิด

กำหนดพร้อมกันไปกับพวก timeout บางครั้ง เรากำหนด timeout ไว้ให้น้อยๆ ก็ทำให้ process ปลดปล่อยได้ง่าย connection ใดเปิดแล้วค้าง จะทำให้ไม่เกิดการ inqury ค้างสะสม ไม่มีอาการ wait จนกระทบกับ cpu speed & ram free

tuning ให้แรง ไม่ค่อยเห็นผล แต่ tuning ให้ทำงานราบรื่น… tune ได้ครับ

ด้าน apache ก็มีผลอย่างมากครับ ดูที่ใช้จำนวน slot และ SS (ดูใน server-status)

 

Credit by : smartnet.co.th (หนึ่งสุดหล่อ)

VirtualHost ง่ายๆ สไตล์ Windows ด้วย Apache

การติดตั้ง VirtualHost นี้อยู่บนพื้นฐานการติดตั้งบน WindowsXP ส่วนตัว Windows อื่นๆ ผู้อ่านต้องศึกษาเพิ่มเติมเอง และสำหรับตระกูล Linux ขอติดไว้ก่อนเพราะตอนนี้เครื่องผมยังไม่ได้ลง Linux และไม่ได้เล่นมาหลายเดือนแล้ว และอยู่บนพื้นฐานการติดตั้งเพื่อใช้งานในเครื่องเดียว (เพื่อเป็นแนวทางในการทำ VirtualHost) และจะมีหัวข้อ Advanch,FreeHost ซึ่งจะเป็นการทำในการใช้งานจริงซึ่งท่านจะต้องมีความรู้หลายอย่างเพิ่มเติม เช่น DNS,Apache,NameBaseVirtualHost) อีกอย่างอยู่บนพื่นฐานของ AppServ ครับ ท่านต้องติดตั้ง AppServ เรียบร้อยเสียก่อนครับ

สิ่งที่ต้องมี :

  • คอมพิวเตอร์
  • WindowsXP *
  • AppServ
  • Card Lan *
  • ความรู้เรื่อง TCP/IP *
* Windows ที่ไม่มีปัญหาคือ WindowsXP ส่วนเวอร์ชั่นอื่นๆ ต้องศึกษาข้อมูลเพิ่มเติมว่าต้อง Set อะไรเพิ่ม หรือจะเจอปัญหาอะไร เช่น XP,2000 อาจจะต้อง Config apache เพิ่ม หรือแก้ไขบางอย่าง
* Card Lan ไม่รู้เกี่ยวหรือป่าว เพราะเครื่องผมมี Cardlan ทุกเครื่อง และ สำหรับ Win XP,2000 อาจจะเจอปัญหาว่า มี Card Lan แต่ไม่ได้ Plug สายแลน ระบบ หรือ service TCP/IP จะไม่ทำงาน (อันนี้เป็น ปัญหาหรือ Bugs ของ windows ให้ศึกษาหรือหาทางแก้เอง) และเคยเห็นกระทู้ที่ว่า ไม่มี CardLan ไม่สามารถติดตั้ง Apache ได้ เพราะ Apache ทำงานบน TCP/IP Port 80
* ความรู้เรื่อง TCP/IP ขี้นอยู่กับว่าท่านจะนำไปทำในระดับไหน ยิ่งเพิ่มระดับยิ่งต้องมีความรู้เพิ่มเติมดังต่อไปนี้
ระดับผู้สนใจ
  • พื้นฐาน (ผู้ที่ติดตั้ง CMS ได้แล้วแต่ต้องการทำ หลายไซต์)
  • Advance (ใช้งานในระบบ LAN)
  • FreeHost (ใช้งานเป็น FreeHost เล่นๆ ได้เลย)
เริ่มกันเลย
1. เปิด Notepad แล้วพิมพ์ ดังนี้
โค้ด:
#ชื่อไซต์อะไรก็ได้ในที่นี้สมมุติว่าชื่อไซต์ soda1.com กะ soda2.com
#ชื่อไซต์ต้องไม่มีอยู่จริงเพราะถ้ามีอยู่จริง ท่านจะไม่สามารถเข้าไปในไซต์จริงได้
#เพราะว่ามันจะวนกลับมาหาเครื่องท่าน เช่นถ้าท่านตั้งชื่อว่า
http://www.yahoo.com/ เวลาที่ท่าน
#ต้องการเข้า net
http://www.yahoo.com/ มันจะวิ่งกลับมาที่เครื่องของท่านนะเอง แทนที่จะไปไซต์
#Yahoo จริง
# สามารถเพิ่มได้ไม่จำกัดขึ้นอยู่กับว่าท่านจะทำ VirtualHost กี่ไซต์
127.0.0.1       localhost
127.0.0.1       soda1.com
127.0.0.1       soda2.com

เสร็จแล้ว Save เป็นชื่อไฟล์ HOSTS ไว้ใน C:\WINDOWS\system32\drivers\etc ครับ ระวัง Notepad จะเติม HOSTS.TXT ให้โดยอัตโนมัติ ให้ rename เป็น HOSTS เฉยๆ

2.ทดสอบโดย ping http://www.soda1.com/ และ http://www.soda2.com/ จะต้องได้ผลดังนี้ครับ

โค้ด:
C:\>ping www.soda1.com

Pinging www.soda1.com [127.0.0.1] with 32 bytes

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms


C:\>ping www.soda2.com

Pinging www.soda2.com [127.0.0.1] with 32 bytes

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

ถ้าไม่ได้ ให้ตรวจสอบให้ดีว่า มี ไฟล์ HOST อยู่หรือป่าว

3.แก้ไขไฟล์ httpd.conf (โดยไปที่ Start -> Programs -> AppServ -> Apache Configure Server -> Edit the Apache httpd.conf Configuration File)
ให้เพิ่ม Code นี้เข้าไป ที่ท้ายสุดของไฟล์

โค้ด:
NameVirtualHost *

<VirtualHost *>
ServerName localhost
DocumentRoot “C:\AppServ\www”
</VirtualHost>

<VirtualHost *>
ServerName soda1.com
DocumentRoot “C:\AppServ\www\soda1”
</VirtualHost>

<VirtualHost *>
ServerName soda2com
DocumentRoot “C:\AppServ\www\soda2”
</VirtualHost>

Save ไฟล์
*ตรง ServerName นั้นให้สัมพันธ์กับการตั้งชื่อในไฟล์ HOSTS ส่วน DocumentRoot นั้นก็แล้วแต่ท่านว่า Site ไหน เก็บใน Folder ไหน ให้จำไว้ให้ดี เพราะจะใช้ในข้อต่อไป

4.ไปที่ Folder C:\AppServ\www สร้าง folder ขี้นมาให้สัมพันธ์กันกับข้างต้น
สร้างโฟล์เดอร์ soda1 ใน C:\AppServ\www
สร้างโฟล์เดอร์ soda2 ใน C:\AppServ\www

5.กลับไปที่ AppServ ทดสอบ Apache โดยไปที่ Start -> Programs -> AppServ -> Apache Configure Server -> Test the Apache httpd.conf Configuration File )
จะต้องได้ผลดังนี้( ไม่มี Error ) Syntax OK

โค้ด:
c:/appserv/apache/conf/httpd.conf: Syntax OK
Note the errors or messages above, and press the <ESC> key to exit. 18…

6.ทดสอบ Apache อีกครั้ง
ใช้ notepad สร้าง html เช่น

โค้ด:
<html> My Name’s SODA1 </html>  โดยทำการบันทึกเก็บไว้ที่  “C:\AppServ\www\soda1\index.html”
และ
<html> My Name’s SODA2 </html>  โดยทำการบันทึกเก็บไว้ที่  “C:\AppServ\www\soda2\index.html”

7. ทดสอบโดย
เปิด IE พิมพ์ url
www.soda1.com/ จะต้องได้ My Name’s SODA1
และ พิมพ์ url
www.soda2.com/ จะต้องได้ My Name’s SODA2

เสร็จแล้วครับ เห็นไหมครับ ง่ายนิดเดียว ความจริงอธิบายยาวไปแค่นั้นเองครับ เผื่อคนที่ไม่ค่อยมีความรู้เรื่อง DNS,VirtualHost และอื่นๆ
ถ้าจะสรุปจริงๆ คือ
1.แก้ไขไฟล์ HOSTS
2.แก้ไขไฟล์ httpd.conf
3.สร้าง Folder ให้ตรงกันเสร็จแล้วครับ VirtualHost
4.และการทำ Nuke ก็แค่ Dup Folder Nuke ทั้งตัว html และ ตัวฐานข้อมูลไป แต่ละไซต์และแก้ config ให้ตรงกันเท่านั้นเอง

** หลังจากแก้ไข httpd.conf แล้วอย่าลืม restart apache ด้วยครับ
ไปที่ Start -> Programs -> AppServ -> Apache Control Server -> Restart

ปรับปรุงเนี้อหาให้เป็น WindowsXP by PcSOdA