Tải bản đầy đủ (.doc) (84 trang)

tối ưu hóa hệ thống linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.04 MB, 84 trang )

LỜI CẢM ƠN
Sau gần 3 tháng tìm hiều và thực hiện, đề tài “tối ưu hóa hệ thống Linux” đã
được hoàn thành, ngoài sự cố gắng của bản thân, chúng tôi còn nhận được nhiều sự
động viên, khích lệ từ gia đình, thầy cô và bạn bè.
Chúng em xin chân thành cảm ơn các thầy cô của trường Đại Học Giao Thông
Vận Tải TP HCM đã truyền đạt nhiều kinh nghiệm và kiến thức quý báu cho chúng
em trong suốt quá trình học tập. Đặc biệt chúng em xin tỏ lòng biết ơn sâu sắc tới
thầy Lê Quốc Tuấn đã trực tiếp hướng dẫn chúng em làm đề tài và các thầy cô trong
khoa công nghệ thông tin đã tận tình giúp đỡ chúng em trong suốt quá trình thực
hiện đề tài.
Thành quả đạt được ngày hôm nay là do thầy cô luôn sẵn sàng giúp đỡ và tạo
mọi điều kiện tốt nhất cho chúng em. Chúng em sẽ mang theo kiến thức thầy cô đã
dạy phục vụ trên con đường sự nghiệp và phát triển, mở rộng kiến thức thầy cô đã
dạy.
Mặc dù đã cố gắng hết sức để hoàn thành đề tài này, nhưng chắc chắn sẽ
không tránh khỏi những sai sót. Chúng em rất mong nhận được sự thông cảm và
đóng góp, chỉ bảo tận tình của quý thầy cô và bạn bè.
TP Hồ Chí Minh, Ngày… Tháng… Năm 2012
Nhóm sinh viên thực hiện
Lê Thái Dương–Vũ Văn Phong
i
MỤC LỤC
LỜI CẢM ƠN i
MỤC LỤC ii
DANH SÁCH CÁC HÌNH vi
TỪ VIẾT TẮT vii
TỔNG QUAN 1
CHƯƠNG 1: TỔNG QUAN VỀ TỐI ƯU VÀ BẢO MẬT LINUX 4
CHƯƠNG 2: TỐI ƯU DỊCH VỤ WEB SERVER 11
CHƯƠNG 3: TỐI ƯU HỆ THỐNG VỚI PROXY 22
CHƯƠNG 4: TỐI ƯU HỆ THỐNG VỚI FIREWALL 32


CHƯƠNG 5: LOAD BALANCING 43
KẾT LUẬN 56
HƯỚNG PHÁT TRIỂN 57
DANH MỤC TÀI LIỆU THAM KHẢO 58
PHỤ LỤC CÁCH TRIỂN KHAI MỘT SỐ DỊCH VỤ CẦN THIẾT 58
ii
iii
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
























Tp. Hồ Chí Minh, ngày … tháng … năm 201…
Giáo viên hướng dẫn
ThS: Lê Quốc Tuấn
iv
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN























Tp. Hồ Chí Minh, ngày … tháng … năm 201…

Giáo viên phản biện
v
DANH SÁCH CÁC HÌNH
Hình 1.2: Cấu trúc Microkernels 5
Hình 1.3: Cấu trúc Hybrid Kernel 6
Hình 2.1: Quá trình xử lý các Request của apache với ModSecurity 14
Hình 3.1: Giới hạn truy cập trang web không cho phép 27
Hình 3.2: Host không bị giới hạn có thể truy cập vào những trang cấm 28
Hình 3.3: Download đã bị giới hạn 30
Hình 3.4: Chứng thực username và password khi truy cập web thông qua proxy
31
Hình 4.1 Quá trình xử lý của Iptables 32
Hình 4.2: Bảng mô tả quá trình NAT động 32
Hình 4.3: Bảng mô tả quá trình đóng giả IP Masquerade 33
Hình 4.4: Kết nối telnet đến Server Linux 38
Hình 4.5: Không thể kết nối đến server linux thông qua telnet 39
Hình 4.6: Cho phép Packet đi qua interface eth0 và eth1 40
Hình 5.1: Cấu trúc hệ thống cân bằng tải 44
Hình 5.2: Mô hình cân bằng tải trong thực tế 45
Hình 5.3: Lập thông số cho Server Load Blancer 2 thông qua tab Redundancy
49
Hình 5.4: Thiết lập tên Server, giao thức cũng như kiểu phân tải phù hợp 49
Hình 5.5: Cấu hình cho các WebServer trong Piranha 50
Hình 5.6: Thiết lập thông số cho từng WebServer 50
Hình 5.7: Active trạng thái cho các WebServer 50
vi
TỪ VIẾT TẮT
Từ viết tắt Tiếng Anh Nghĩa tiếng việt
I/O Input/Output Thiết bị nhập/xuất.
CPU Central Processing Unit Đơn vị xử lí trung tâm.

RAM Random Access Memory Bộ nhớ truy xuất ngẫu nhiên.
URL Uniform Resource Locator Tham chiếu tài nguyên
SQL Structured Query Language Ngôn ngữ truy vấn mang tính cấu
trúc
MPMs Multi-Processing Modules Xử lý nhiều mô-đun
HTTP HyperText Transfer Protocol Giao thức truyền tải văn bản.
HTTPS Hypertext Transfer Protocol
Secure
Giao thức truyền tải văn bản an toàn.
XSS Cross-Site Scripting Một kỹ thuật tấn công.
XML eXtensible Markup Language Ngôn ngữ đánh dấu mở rộng.
HTML HyperText Markup Language Ngôn ngữ đánh dấu siêu văn bản.
URI Uniform Resource Identifier Định danh tài nguyên đồng dạng.
ID Identification Xác định.
IP Internet Protocol Giao thức liên mạng.
FTP File Transfer Protocol Giao thức truyền tập tin.
SSL Secure Sockets Layer Là 1 tiêu chuẩn an ninh công nghệ.
CARP Common Address Redundancy
Protocol
Địa chỉ chung dư giao thức
ICP International Center of
Photograph
WCCP Web Cache Communication
Protocol
Giao thức bộ nhớ Web
SNMP Simple Network Management
Protocol
Tập hợp các giao thức.
DNS Domain Name System Hệ thống tên miền.
ACL Access Control List Điều khiển danh sách truy cập.

NCSA National Center for
Supercomputing Applications
Trung tâm ứng dụng siêu máy tính
quốc gia.
NAT Network Address Translation Chuyển đổi địa chỉ mạng.
TCP Transmission Control Protocol Giao thức điều khiển truyền vận.
UDP User Datagram Protocol Là 1 giao thức cốt lõi của TCP/IP.
ICMP Internet Control Message Là 1 giao thức hoạt động trên layer 2
vii
Protocol
viii
TỔNG QUAN
A. Lý do chọn đề tài
Ngày nay, xu hướng sử dụng Open Source ngày càng gia tăng. Với những ưu
điểm như sự ổn định, miễn phí, cập nhật bản vá lỗi nhanh… Do vậy Linux ngày
càng được sử dụng rộng rãi. Ngày càng có nhiều doanh nghiệp và các tổ chức chính
phủ sử dụng các phần mềm mã nguồn mở như Linux… Điều này chứng minh rõ
ràng giá cả không phải là lợi thế duy nhất mà các phần mềm này mang lại cho
người sử dụng.
Trong giai đoạn suy thoái của nền kinh tế, việc sử dụng các phần mềm mã
nguồn mở sẽ giúp doanh nghiệp tiết kiệm một khoảng chi phí không nhỏ .Không
chỉ có thế, các phần mềm mã nguồn mở miễn phí còn mang rất nhiều lợi ích khác
cho công việc kinh doanh, một số lợi ích thậm chí còn lớn hơn cả các phần mềm giá
rẻ. Đối với các doanh nghiệp ở Việt Nam, ý thức chú trọng áp dụng CNTT vào
trong doanh nghiệp chưa được cao, đặc biệt là vấn đề bản quyền chưa được chú
trọng đầu tư thì phần mềm mã nguồn mở sẽ là biện pháp thay thế hoàn hảo.
Chính xu hướng đó mà chúng em đã đăng ký đềtài “Tối ưu hóa hệ thống mạng
Linux”,Chúng em nhận thấy với những ưu điểm kể trên và xu hướng phát triển, thì
việc áp dụng đề tài này vào trong doanh nghiệp là tất yếu ở hiện tại và tương lai.
B. Nhiệm vụ đồ án

Tối ưu hóa hệ thống Linux đòi hỏi phải có những thay đổi trên hệ thống. Một
hệ thống sau khi được tối ưu phải có những ưu điểm khác biệt so với hệ thống khi
chưa được tối ưu. Vì thế nhiệm vụ đồ án đặt ra là:
o Tối ưu hóa hệ điều hành linux.
o Tối ưu hóa bảo mật hệ thống linux
o Tối ưu hóa dịch vụ triển khai
Những triển khai tối ưu đòi hỏi phải được ứng dụng thức tế trong các mô hình
mạng. Giải quyết được các vấn đề về tối ưu và mở ra những giải pháp mới phù hợp,
đáp ứng được từng mô hình mạng.
1
C. Cấu trúc đồ án
o Chương 1: Tổng quan về tối ưu và bảo mật linux. Trong chương này
chúng em sẽ giới thiệu về linux, tối ưu và bảo mật. Những tối ưu cơ bản
ảnh hưởng đến hệ thống được trình bày ở chương này.
o Chương 2: Tối ưu dịch vụ Web server. Chương này chúng em trình bày và
triển khai yêu cầu tối ưu hóa dịch vụ linux. Và dịch vụ Web server chúng
em triển khai trước tiên.
o Chương 3: Tối ưu hệ thống với Proxy. Trình bày về dịch vụ Proxy và
những ràng buộc để tối ưu theo từng yêu cầu của dịch vụ. Cấu hình proxy
quản lý mô hình mạng tùy chỉnh.
o Chương 4: Thiết lập Firewall IPtables. Trình bày bảo mật hệ thống và
những yêu cầu cần phải làm trong Firewall
o Chương 5: Load Balancing. Tối ưu với phương pháp cân bằng tải. Những
vấn đề về cân bằng tải như tính năng, cách thiết lập và kiểm tra được
chúng em giới thiệu trong chương này.
Ngoài ra, phụ lục có cài đặt, triển khai những dịch vụ đi kèm hoặc cần làm
trước khi triển khai những chương trên.
2
D. Mô hình triển khai
3

CHƯƠNG 1: TỔNG QUAN VỀ TỐI ƯU VÀ BẢO MẬT LINUX
1.1Cơ bản về tối ưu và bảo mật hệ thống linux.
1.1.1 Giới thiệu Linux kernel
Kernel – hạt nhân: là một thành phần trung tâm của một hệ thống điều hành.
Nó hoạt động như một cổng kết nối giữa người sử dụng các ứng dụng và phần cứng.
Mục đích của hạt nhân chính là để quản lý các thông tin liên lạc giữa các phần mềm
(ứng dụng cấp người dùng) và phần cứng (CPU, đĩa bộ nhớ, chuột, bàn phím…).
Nhiệm vụ chính của hạt nhân là:
- Quản lý quy trình.
- Quản lý thiết bị.
- Quản lý bộ nhớ.
- Ngắt xử lý.
- Giao tiếp I/O
- Hệ thống tập tin …
Ví dụ: như Process được tạo trong quá trình, kernel sẽ quản lý các Process này
sử dụng RAM như thế nào cho tối ưu nhất, không bị xung đột với nhau.
Nói đến Kernel là nói đến những phần mềm, ứng dụng ở mức thấp (low -
level) trong hệ thống, có khả năng thay đổi linh hoạt để phù hợp với phần cứng.
Monolithic kernels:
Trong một Monolithic kernels, tất cả các dịch vụ trên hệ điều hành chạy cùng
với các chuỗi hạt nhân chính, do đó chúng cùng nằm trong cùng một khu vực bộ
nhớ.
4
Hình 1.1: Cấu trúc Monolithic kernels
Cách tiếp cận này cung cấp truy cập phần cứng phong phú và mạnh mẽ. Ví dụ:
một chương trình muốn thu nhập thông tin từ bộ nhớ và các tiến trình khác, chúng
cần có quyền truy cập trực tiếp và không phải chờ đợi các tác vụ khác kết thúc. Ưu
điểm lớn đó cũng khiến Monolithic gặp một khó khăn lớn đó là sự phụ thuộc giữa
các thành phần hệ thống, khi một trình điều khiển bị lỗi nó có thể dẫn tới sự sụp đổ
toàn bộ hệ thống.

Microkernels
Microkernel (còn được viết tắt μK hoặc uK) là một thuật ngữ mô tả một cách
tiếp cận để thiết kế hệ điều hành mà theo đó các chức năng của hệ thống được di
chuyển ra khỏi "hạt nhân" truyền thống vào một tập hợp các "máy chủ" mà giao tiếp
thông qua một hạt nhân "nhỏ nhất", để lại càng ít càng tốt trong "không gian hệ
thống" và càng nhiều càng tốt trong "không gian người dùng". Với cách tiếp cận hệ
thống như trên giúp cho người dùng rất dễ dàng để nhìn thấy, tiếp xúc với nhiều thứ
khác nhau trong máy tính.
Hình 1.2: Cấu trúc Microkernels
Microkenels có tính linh hoạt cao, vì thế bạn không phải lo lắng khi thay đổi
một thiết bị nào đó, ví dụ card màn hình, ổ cứng, RAM…
Hybrid Kernel:
Hybrid Kernel được sử dụng trong hầu hết các hệ điều hành thương mại chẳng
hạn như Microsoft Windows NT, 2000, XP, Vista, và 7.Hybrid Kernel tương đối
giống với Micro Kernel, ngoại trừ bao gồm một số mã khác trong không gian hạt
nhân để tăng hiệu suất.
5
Hình 1.3: Cấu trúc Hybrid Kernel
Hybrid kernel có cách tiếp cận kết hợp tốc độ và thiết kế đơn giản của một
monolithic Kernel với sự an toàn mô đun và thực thi của một microkernel. Cách
tiếp cận này làm cho Hybrid kernel có khả năng lựa chọn và quyết định tốt nhất để
cho phép ứng dụng nào chạy trong user nào là phù hợp nhất.Hybrid đảm bảo tính
hiệu quả của hệ thống ở mức độ cao nhất.
Kenerl Linux:
Linux Kernel là 1 hệ thống điểu hành hạt nhân được phát triển và sử dụng bởi
cộng đồng người dùng Linux.Với hơn 13 triệu dòng lệnh, Linux Kernel đang là ví
dụ nổi bật nhất về phần mềm mã nguồn mở, miễn phí.Hầu hết các bản phân phối
linux đều chấp nhận kiến trúc monolithic kernel để giải quyết mọi lời gọi hệ thống
và phần cứng.
Biên dịch Kernel:

Kernel Linux là một “nhân hiện đại” có tính module rất cao.Từ Kernel 2.6.x
trở đi, có thêm rất nhiều chức năng và mở rộng. Với tinh thần “biên dịch nhân”, một
yếu tố chính yếu và quan trọng nhất cần ghi nhận đó là tính bộ phận(Modularity)
của Kernel linux. Đối với người sử dụng bình thường, modularity cho phép chọn
lựa cách biên dịch các Drivers của nhân theo dạng modules hay theo dạng biên dịch
trực tiếp vào nhân. Khi xác lập cấu hình lại cho Kernel thường có 3 sự lựa chọn:
- M: cho Module, lựa chọn này có nghĩa là chỉ khi nào cần dùng các drivers
này thì mới được ứng tải. Lựa chọn này giúp tạo nên 1 hạt nhân nhỏ gọn và dễ dàng
6
di chuyển cho nhiều mục đích khác nhau.Với lựa chọn M này cũng giúp khả năng
biên dịch lại một số Modeles nào đó muốn cập nhật lại.
- Y: cho biên dịch trực tiếp vào nhân: Lựa chọn này có nghĩa là dù các Drivers
có được dùng hay không vẫn được tải lên khi Kernel khởi động và tất nhiên nó
chiếm một phần bộ nhớ. Ưu điểm của lựa chọn này là một khi Drivers đã được biên
dịch vào nhân thì không còn quan ngại đến tính trung thực của nhân và các Drivers
nữa. Lựa chọn này làm tăng tính bảo mật vì khi đã được biên dịch thẳng vào Kernel
thì tránh được trường hợp các modules không tin cậy cài vào nhân lúc nào đó trong
quá trình hoạt động của máy. Khi các Drivers cần thì đã có sẵn và không cần tải
nữa.
- N: không cho biên dịch vào nhân
Lý do cần để biên dịch lại Kernel:
- Chữa lỗi của Kernel, nếu các lỗi này thuộc về lõi của nhân thì phải vá ngồn
của nhân và biên dịch lại để sửa chữa các lỗi được công bố.
- Nâng cao hiệu quả của nhân.
- Loại bỏ những Drivers không dùng tới.
- Thử nghiệm Modules do mình tạo ra.
Thông thường nơi chứa mã nguồn để biên dịch Kernel là usr/src. Để biên dịch
hạt nhân không xảy ra sai sót chúng ta lưu ý 2 vấn đề sau
- Có đủ chỗ chứa trên ổ đĩa, ít nhất là phải có đủ chỗ chứa cho mã nguồn
(trước và sau khi xả nén), chỗ chứa để cài Kernel và các modules mới sau khi biên

dịch. Vấn đề này bây giờ không còn là trở ngại vì ổ lưu trữ dữ liệu của các máy hiện
tại rất lớn.
- Phải có bộ công cụ cần thiết và đúng phiên bản. Điều này rất quan trọng vì
phiên bản công cụ cho mỗi phiên bản nhân là khác nhau. Ví dụ công cụ Gnu C trên
kernel 2.4 tối thiểu phải là Gnu C 2.91.66
1.1.2 Cấu hình thiết lập tối ưu kernel
Trước khi sử dụng các công cụ để cấu hình lại Kernel ta nên sử dụng
lệnhmake mrproper
7
Lệnh này làm cho mã nguồn được sạch sẽ trước khi biên dịch.
Để biên dịch Kernel, chúng ta cần di chuyển vào thư mục /usr/src/kernels/
chứa kernel. Có 3 phương tiện config phổ biến dùng biên dịch kernel:
• Make config: phương tiện đơn giản nhất và không đòi hỏi thêm thư viện nào
khác để chạy công cụ này. Sử dụng lệnh này sẽ đưa ra 1 loạt câu hỏi và nhận các
câu trả lời Y – M - N của bạn.Nhược điểm của lệnh này là khi các chúng ta có lỡ
lựa chọn sai câu trả lời thì chúng ta không thể quay lại điều chỉnh mà phải bắt đầu
lại từ đầu. Phương tiện này chỉ phù hợp với ai rất kinh nghiệm và nắm rõ mình cần
gì trong cấu hình kernel
• Make menuconfig: phương tiện này cần thêm thư viện “ncurses” để tạo giao
diện đồ họa. Với công cụ này bạn có thể quay lại thay đổi những lựa chọn sai mà
không phải bắt đầu lại từ đầu. Menuconfig có đặc tính trợ giúp, nếu bạn chưa nắm
rõ giá trị hoặc module nào đó ở lựa chọn thì menuconfig có “trợ giúp hữu cảnh”
giúp chúng ta hiểu và lựa chọn đúng cho các giá trị hoặc module.
• Make xconfig: phương tiện này được sử dụng rộng rãi vì nó rất linh hoạt,
nhất là trong những hệ thống chạy X Windows, xconfig cần trọn bộ thư viện Qt và
X Window để tạo các giao diện đồ họa. Ngoài các phím chức năng, chúng ta còn có
thể sử dụng chuột để chọn lựa chọn của mình.
1.2 Các bước biên dịch Kernel
1.2.1 Tạo dependency, dọn dẹp và tạo nhân
Để tạo dependency và mục đích dọn dẹp chúng ta có thể sử dụng các lệnh sau:

# make dep
#make clean
#make bzImage
Hoặc ta có thể gom chung lại thành 1 lệnh:
# make dep clean bzImage
Lưu ý: Nếu chạy lệnh dep, clean, bzImage riêng biệt thì chúng ta phải chờ cho
lệnh được thực hiện lần lượt. Tức là lệnh dep hoàn thành thì chạy lệnh clean,
8
cleanhoàn thành chạy đến bzImage, nếu chạy lệnh gom chung 3 lệnh làm 1 thì
chúng ta không phải chú ý đến vấn đề đó vì nó sẽ tự động chạy theo lần lượt.
−dep: Tạo các dependencies và các file nbao gồm includes cần thiết trong quá
trình biên dịch nhân.
− clean: Dùng đê dọn dẹp tất cả những opjects vụn, không cần thiết cho quá
trình tạo file ở dep
−bzImage: Là bước tạo nhân, cũng là bước quan trọng nhất. Nếu 1 trong 2
bước trên gặp lỗi thì chúng ta phải làm lại để chạy bước bzImage này. Lệnh này còn
được rút ngắn lại và có chứng năng tương tự: #make zImage
1.2.2 Tạo modules và cài modules
Để tạo Modules cho hạt nhân, ta có 2 lệnh sau:
# make modules
#make modules_install
Hoặc làm chung trên 1 lệnh:
# make modules modules_install
Điểm khác biệt giữa hai dòng lệnh này:
− Bạn có thể chỉ muốn biên dịch Modules mà không muốn cài cho kernel
ngay sau khi biên dịch xong.
− Bạn muốn biên dịch kernel trên máy này và đem qua máy khác cài.
Rất ít trường hợp biên dịch 1 máy rồi đem qua 1 máy khác cài nên thông
thường người sử dụng muốn biên dịch và cài đặt luôn thì có thể sử dụng câu lệnh đi
chung biên dịch và cài đặt luôn.

Nếu bạn chọn chạy 2 lệnh lần lượt: biên dịch xong mới cài thì có một điểm
lưu ý bạn phải chạy ở chế độ Super user (root), vì chỉ có quyền này mới install được
Modules vừa được biên dịch. Ví dụ hướng dẫn:
Chạy bằng user bình thường: #make modules
Chuyển sang supper user: #su
Cài đặt modules vừa biên dịch xong: #make modules_install
Đối với phiên bản kernel 2.6.x các bạn có thể tham khảo chi tiết về thông tin
modules tổng quát và cách sử dụng modules (thuộc user space) trong 3 hồ sơ chi
9
tiết: ./Documentation/kbuild/modules.txt,./Documentation/networking/net-
module.txtvà ./Documentation/sound/oss/README.modules thuộc mã nguồn
kernel mà bạn dự định sẽ biên dịch.
10
CHƯƠNG 2: TỐI ƯU DỊCH VỤ WEB SERVER
2.1 Cơ bản về tối ưu Web Server
Việc tối ưu ứng dụng Web không chỉ mang lại hiệu suất cao cho Web Server
mà còn làm tăng khả năng bảo mật cho dịch vụ có thể coi là một trong những phần
không thể thiếu trong hệ thống Linux.
Phần này sẽ tập trung nghiên cứu việc tối ưu dịch vụ Web Server.
- Thiết lập một số directive default trong httpd.conf để giảm thiểu việc lộ
thông tin cấu hình của máy chủ hoặc các tác vụ không 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ủ
(apacheversion, 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.
• 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.

- TimeOut:
Thiết lập thời gian (s) mà Server chờ đợi các receipts và transmissions trong
quá trình liên lạc.
Mặc định giá trị này là 300 giây.Chúng ta nên giảm thời gian này xuống.
- KeepAlive:
Thiết lập để Server cho phép gửi nhiều Request trong mỗi Connection và có
thể được sử dụng ngăn chặn bất kỳ một Client từ tiêu thụ quá nhiều tài nguyên của
Server.
Mặc định KeepAlive Off.
Nếu KeepAlive được bật, Server có thể nhanh chóng sinh ra số lượng tối đa
11
của tiến trình con (Maximum number of child processes) và làm máy chủ chậm lại
đáng kể.
Khi bật tính năng này, bạn cần xem xét chỉnh lại tham số KeepAliveTimeout
và theo dõi /var/log/httpd/error_log trên server. Log này sẽ báo khi nào Server hết
tiến trình con.
- KeepAliveTimeout:
KeepAliveTimeout thiết lập thời gian (s) mà Server Processes chờ đợi sau khi
một Request tới và được phục vụ trước khi nó đóng connection.
Khi Server nhận được một Request, chỉ thị Timeout sẽ được áp dụng thay thế.
Chỉ thị KeepAliveTimeout mặc định được thiết lập là 15s.
- MaxKeepAliveRequests :
Đặt số lượng tối đa các Request cho phép cho mỗi connection liên tục.
MaxKeepAliveRequests được thiết lập để mặc định là 100.
- Apache MPMs:
Tùy nhu cầu và lượng tải mà ta lựa chọn MPMs cho phù hợp.
• Prefork
• Worker
Mặc định Apache trong Unix chạy Prefork.
- StartServers:

Chỉ thị này thiết lập để xác định có bao nhiêu Server Processes được tạo khi
khởi động.
Kể từ khi WebServer tự động kill và create Server Processes dựa trên các lưu
lượng truy cập nó sẽ không thay đổi giá trị của tham số này.
Mặc định Prefork là 8, Worker sẽ là 2.
- MaxClients:
Số lượng tối đa các kết nối sẽ được xử lý cùng một lúc.
- MinSpareServers:
Số lượng nhỏ nhất Child Processes idle (nhàn rỗi).
- MaxSpareServers:
12
Số lượng lớn nhất Child Processes idle (nhàn rỗi).
- MaxRequestsPerChild:
Chỉ thị này thiết lập số lượng Request lớn nhất mà mỗi Child Processes phải
xử lí trước khi nó được tái tạo.
Nên thiết lập giá trị này lớn hơn 1000.Thiết lập là 0 nếu unlimited.
Giá trị này được tính bằng công thức :
Tổng lượng request một ngày / Tổng số Processes một ngày
Nếu có yêu cầu KeepAlive, chỉ yêu cầu đầu tiên được tính vào giới hạn này.
Trong thực tế, nó thay đổi hành vi để hạn chế số lượng kết nối cho mỗi Child
Processes.
2.2 Tối ưu dịch vụ Web Server với ModSecurity:
2.2.1 Cơ bản về ModSecurity:
Mod_security là một module của Apache, là một web application
firewall(WAF), nó thiết lập một lớp an ninh bên ngoài để tăng cường độ an toàn,
phát hiện và ngăn chặn các cuộc tấn công trước khi chúng được thực thi.
Phân tích tỉ mỉ và log toàn bộ các hoạt động của giao thức http như request,
response.
Theo dõi lưu lượng gói tin http (HTTP trafic)theo thời gian thực để sớm phát
hiện các cuộc tấn công tượng tự như hệ thống web intrusion detection, chủ động

theo dõi những request để phát hiện những điểm không bình thường, các gói tin này
sẽ bị log hoặc bị loại bỏ.
Modsecurity hoạt động dựa trên các rules.Đó là tập hợp các dấu hiệu dùng để
nhận biết và phát hiện các cuộc tấn công. Thông thường, mỗi dạng tấn công, ví dụ
SQL injection hoặc XSS hoặc Files Inclusion hoặc Local attack đều có những dấu
hiệu riêng, từ đó người quản trị có thể phân tích các request và đưa ra các rules để
ngăn chặn các cuộc tấn công này.
2.2.2Cấu trúc các rules
SecRule Target Operator [Actions]
- Target:
13
Quy định cụ thể mục tiêu của request hoặc response mà chúng ta muốn kiểm
tra.
Hiện có hơn 70 biến có thể được sử dụng để tạo rule.
Ngoài ra còn có một loại biến đặc biệt được gọi là biến collection có thể chứa
nhiều đối số.Một ví dụ về collection là ARGS, trong đó có chứa tất cả các đối số.
- Operator:
Chỉ định các phương thức, phép so sánh dữ liệu được sử dụng khi thực hiện
khớp với các biến cụ thể hoặc các biến. Operator mặc định, nếu không được chỉ
định, là @rx, tức là rule engine sẽ sử dụng biểu thức chính quy để khớp xâu với
biến cụ thể nào đó.
- Action:
Hành động sẽ được áp đặt khi một luật được khớp (rule match). Những hành
động này có thể là cho phép hoặc từ chối request và chỉ định mã lỗi trả về, … Nếu
không có action nào được quy định, các action mặc định của action
SecDefaultAction sẽ được sử dụng (rule chứa action này thường được khai báo đầu
tiên).
Hình 2.1: Quá trình xử lý các Request của apache với ModSecurity
14
Mod_security xử lý 1 request theo5 phase, từ bản 2.x trở đi có thể áp các rules

vào cả 5 phase này:
- Phase Request Header
Rule được đặt tại đây sẽ được thực hiện ngay say khi Apache đọc request
header, lúc này phần request body vẫn chưa được đọc.
- Phase Request Body
Thời điểm các thông tin chức năng chung đưa vào được phân tích và xem xét,
các rule mang tính application-oriented thường được đặt ở đây. Ở thời điểm này đã
nhận đủ các request argument và phần request body đã được đọc.
ModSecurity hỗ trợ ba loại mã hoá request body
• application/x-www-form-urlencoded dùng để truyền form dữ liệu
• multipart/form-data dùng để truyền file
• text/xml dùng để phân tich dữ liệu XML
- Phase Response Header
Thời điểm ngay sau khi phần response header được gửi trả về cho client. Đặt
rule ở đây nếu muốn giám sát quá trình sau khi phần response được gửi đi.
- Phase Response Body
Thời điểm bạn muốn kiểm tra những dữ liệu HTML gửi trả về
- Phase logging
Thời điểm các hoạt động log được thực hiện, các rules đặt ở đây sẽ định rõ
việc log sẽ như thế nào, nó sẽ kiểm tra các error message log của Apache. Đây cũng
là thời điểm cuối cùng để chặn các connection không mong muốn, kiểm tra các
response header mà không thể kiểm tra ở phase 3 và phase 4.
2.2.3 Cài đặt và cấu hình ModSercurity.
Cài đặt thư viện:
Kiểm tra các gói thư viện cần thiết, ModSecurity yêu cầu có 4 thành phần sau
trước khi biên dịch:
− Apxs: Kiểm tra bằng cách:
whereis -b apxs
15


apxs: /usr/sbin/apxs
− Nếu chưa có, chúng ta phải cài thêm gói httpd-devel (hay
apache2-dev)
yum install libxml2-devel (hoặc apt-get install libxml2-dev)
− Pcre: Kiểm tra bằng cách:
whereis pcre

pcre: /usr/include/pcre.h /usr/share/man/man3/pcre.3.gz
− Nếu chưa có thì chúng ta phải cài thêm gói pcre-devel:
yum install pcre-devel (hoặc apt-get install pcre-dev)
−Mod_unique_id: Là mod thường đã được biên dịch cùng Apache. Có thể
kiểm tra lại bằng cách tìm trong httpd.conf dòng:
LoadModule unique_id_module modules/mod_unique_id.so
Nếu chưa có, chúng ta phải thêm vào với nội dung như trên.
Cài đặt ModSecurity:
Thực hiện tải mã nguồn về
wget />Thực hiện giải nén mã nguồn:
tar zxvf modsecurity-apache_2.5.11.tar.gz
Chuyển vào thư mục chứa mã nguồn và tiến hành biên dịch:
cdmodsecurity-apache_2.5.11/apache2/
−Tạo make file:
./configure

configure: creating ./config.status
config.status: creating Makefile
config.status: creating build/apxs-wrapper
config.status: creating mlogc-src/mlogc-batch-load.pl
16
config.status: creating t/run-unit-tests.pl
config.status: creating t/run-regression-tests.pl

config.status: creating t/gen_rx-pm.pl
config.status: creating t/csv_rx-pm.pl
config.status: creating t/regression/server_root/conf/httpd.conf
config.status: creating /tools/rules-updater.pl
config.status: creating mlogc-src/Makefile
config.status: creating mod_security2_config.h
− Tiến hành biên dịch make
Sau khi biên dịch thành công file mod_security2.so sẽ được tạo ra trong
thưmục libs.
Tích hợp ModSecurity vào Apache
Để Apache nhận ra sự tồn tại của ModSecurity chúng ta cần copy
mod_security2.so đến thư mục chứa modules của apache, đối với distro CentOS là
/etc/httpd/modules
cp/libs/mod_security2.so /etc/httpd/modules/
Sửa lại file httpd.conf để thực hiện load module ModSecurity:
vi/etc/httpd/conf/httpd.conf
Thêm dòng
LoadModule security2_module modules/mod_security2.so
Cấu hình ModSecurity
Chúng ta có thể cấu hình trực tiếp các thông số và rule của ModSecurity vào
file httpd.conf. Nhưng để cho rõ ràng và đảm bảo không sai sót trong quá trình thực
hiện - gây ảnh hưởng Apache, Chúng ta nên tạo một file cấu hình riêng và sau đó
include vào.
Trong CentOS các file cấu hình riêng mặc định chứa trong /etc/httpd/conf.d/
Tiến hành tạo file modsecurity.conf
Vi/etc/httpd/conf.d/modsecurity.conf
17

×