Thursday, August 22, 2013

Tối Ưu Hóa Và Bảo Mật Apache

1. Edit một số directive default trong httpd.conf để giảm thiểu việc lộ lọt thông tin cấu hình của máy chủ hoặc các tác vụ ko cần thiết:
TraceEnable Off : Disable TRACE request method
ServerSignature Off : Disable việc thể hiện các thông tin về máy chủ (apache version, các mod đang sử dụng ...) ở footer các page do server generate ra, một phần nào đó cũng giảm thiểu được bandwidth cho các bạn.
ServerTokens Prod : Chỉ thể hiện "Server: Apache" trong header trả về thay vì "Server: Apache 2.2.16" hoặc "Server: Apache 2.2.16/mod_abc,mod_xyz" ...
UseCanonicalName Off : Disable việc sử dụng CanonicalName.
HostnameLookups Off : Disable tính năng lookup hostname từ IP address của client.

2. Giảm thời gian Timeout và enable KeepAlive: việc này sẽ làm giảm thiếu số lượng socket connection được mở đến server, thời gian tồn tại của chúng trên server ...
Code:

Timeout 15
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 7

3. Tính toán số lượng MaxClients hợp lý: Việc này nhằm đảm bảo nếu như apache bị flood cũng sẽ ko sử dụng hết tài nguyên của máy chủ khiến máy chủ bị treo, cũng như việc cấp phát lượng bộ nhớ phù hợp cho httpd.
Em viết sẵn 1 cái script dùng để tính toán số lượng MaxClient dành cho máy chủ đang chạy ở mode DSO. Với các mode khác thì mọi người dựa vào ý tưởng rồi tính toán cho phù hợp:
Code:


#!/bin/bash
# Script compute MaxClient for Apache
# Coded by Ikazuchi[at]quantrilinux.com
# Date: 14/05/2012

# Get total MEM
TOTAL_MEM=$(head -1 /proc/meminfo | awk '{print $2}')

# Get total Memory is being used
TOTAL_MEM_USED=$(free | grep 'buffers/cache' | awk '{print $3}')

# Get average memory of 1 process httpd
count=0
httpd_mem=0

for process_mem in `ps -ylC httpd --sort:rss | awk '{print $8}' | grep -v RSS`
do
let "count+=1"
let "httpd_mem+=$process_mem"
done

# Average memory per process
HTTPD_AVG_MEM=$(( $process_mem / $count ))

# Get total memory used for httpd:
HTTPD_TOTAL_MEM=$(( $TOTAL_MEM - $TOTAL_MEM_USED + $httpd_mem ))

MAX_CLIENT=$(( $HTTPD_TOTAL_MEM / $HTTPD_AVG_MEM ))

# Final result
echo -e "Total RAM in this server:\t\t $TOTAL_MEM KB"
echo -e "Total RAM is being used:\t\t $TOTAL_MEM_USED KB"
echo -e "Total RAM will be used for httpd:\t $HTTPD_TOTAL_MEM KB"
echo -e "Average RAM per process httpd:\t\t $HTTPD_AVG_MEM KB"
echo -e "Recommend MaxClients value:\t\t $MAX_CLIENT"

Kết quả ví dụ sẽ như sau:
Code:
Total RAM in this server:         8115520 KB
Total RAM is being used:         4546728 KB
Total RAM will be used for httpd:     4584432 KB
Average RAM per process httpd:         4611 KB
Recommend MaxClients value:         994