GIT – (MS) là một tường lửa mức ứng dụng. Đứng trước Webserver và có khả năng xử lý traffic trước khi đưa vào Webserver. Mọi yêu cầu gửi đến Webserver từ phía client sẻ được gửi qua .

Modsecurity có thể :
– Theo dõi HTTP traffic để phát hiện những dấu hiệu bất thường.
– Lọc các dữ liệu ra vào webserver.
– Ghi lại các tương tác giữa client và webserver.
– And more ….
Modsecurity hoạt động dựa trên các rules. MS có hoạt động hiệu qua hay không phụ thuộc rất lớn vào khả năng thiết lập rule của người quản trị.
Trong chương tiếp theo tôi sẽ trình bày cụ thể quá trình cài đặt và cấu hình để kính hoạt MS. Để theo dõi bài viết được thông suốt các bạn nên có các khái niệm cơ bản về HTTP như : HTTP REQUEST, HTTP RESPONSE, REQUEST HEADER, REQUEST BODY….( Bạn nào đã biết những khái niệm này hãy post một bài cho mọi người theo dõi)

Cài đặt và cấu hình.
Phiên bản hiện tại sử dụng để demo là 2.5 trên . Các bạn có thể áp dụng các này đối với Fedora hay Redhat… (trong bài viết cũng đưa ra các đối với hay để các bạn tiện dùng).
1. mã nguồn

# wget http://www.modsecurity.org/download/modsecurity-apache_2.5.11.tar.gz
.......
01:52:06 (161 KB/s) - `modsecurity-apache_2.5.11.tar.gz' saved [1338425/1338425]

2. Kiểm tra tính toàn vẹn của mã nguồn ( việc này không bắt buộc nhưng các bạn nên có thói quen kiểm tra để đảm bảo rằng mã nguồn đã không bị can thiệp vào dưới bất kỳ hình thức nào ), bạn có thể dùng MD5 hay PGP để làm việc này. ở đây dùng PGP
– Đầu tiên cần download chữ ký :

wget http://www.modsecurity.org/download/modsecurity-apache_2.5.11.tar.gz.asc
......
02:04:38 (14.8 MB/s) - `modsecurity-apache_2.5.11.tar.gz.asc' saved [189/189]

– Thử sử dụng GPG để kiểm tra chữ ký :

gpg --verify modsecurity-apache_2.5.11.tar.gz.asc
gpg: Signature made Sat 07 Nov 2009 02:41:07 AM ICT using DSA key ID E77B534D
gpg: Can't check signature: public key not found

Lỗi này xảy ra vì chúng ta chưa có Public key của người ký file này. Chúng ta cần download Publick Key:

gpg --keyserver pgp.mit.edu --recv-key E77B534D
.....
gpg: Total number processed: 1
gpg:               imported: 1

– Kiểm tra chữ ký :

gpg --verify modsecurity-apache_2.5.11.tar.gz.asc
......
gpg: Good signature from "Brian Rectanus (work) <brian.rectanus@breach.com>"
gpg:                 aka "Brian Rectanus <brian@rectanus.net>"
gpg:                 aka "Brian Rectanus (personal) <brectanu@gmail.com>"

Kiểm tra thành công.
– Giải nén mã nguồn :

tar xfvz modsecurity-apache_2.5.11.tar.gz

– Xem cấu trúc gói mã nguồn :

ls -la modsecurity-apache_2.5.11
......
drwxrwx--- 6 1000 1000  4096 Nov  7 02:38 .
drwxr-x--- 6  root  4096 Feb  1 02:17 ..
drwxrwx--- 6 1000 1000  4096 Nov  7 02:38 apache2
-rw-rw---- 1 1000 1000 23819 Nov  6 02:36 CHANGES
drwxrwx--- 3 1000 1000  4096 Nov  7 02:41 doc
-rw-rw---- 1 1000 1000 15128 Jul  2  2007 LICENSE
-rw-rw---- 1 1000 1000  1919 Nov  6 02:36 modsecurity.conf-minimal
-rw-rw---- 1 1000 1000  6158 Jul 31  2008 MODSECURITY_LICENSING_EXCEPTION
-rw-rw---- 1 1000 1000   651 Mar  6  2009 README.TXT
drwxrwx--- 5 1000 1000  4096 Nov  7 02:39 rules
drwxrwx--- 2 1000 1000  4096 Nov  7 02:37 tools

3. Kiểm tra các gói thư viện cần thiết
MS 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.
......
apxs: /usr/sbin/apxs

Nếu chưa có thì bạn phải cài thêm gói -devel (hay apache2-dev đối với dòng debian,ubuntu.. )

yum  httpd-devel    (or apt-get  apache2-dev)
- libxml2 : Kiểm tra bằng cách :
whereis -b libxml2
......
libxml2: /usr/lib/libxml2.a /usr/lib/libxml2.so /usr/include/libxml2

Nếu chưa có thì bạn phải cài thêm gói libxml2-devel (or libxml2-dev đối với debian,ubuntu…)

yum install libxml2-devel (or 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ì bạn phải cài thêm gói pcre-devel :

yum install pcre-devel (or apt-get install pcre-dev)

– mod_unique_id : là mod thường đã được biên dịch cùng Apache. Bạn có thể kiểm tra lại bằng cách kiếm trong httpd.conf dòng :

LoadModule unique_id_module modules/mod_unique_id.so

Nếu mà chưa có thì bạn phải thêm vào.
4. Biên dịch
Chuyển vào thư mục chứa mã nguồn :

cd modsecurity-apache_2.5.11/apache2/

và tiến hành biên dịch :
– 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
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_2_config.h

– 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.
5. Tích hợp MS vào Apache
Để Apache nhận ra sự tồn tại của MS chúng ta cần copy mod_security2.so đến thư mục chứa modules của apache.
đối với centos là /etc/httpd/modules :

cp .libs/mod_security2.so /etc/httpd/modules/

và sửa lại file httpd.conf để load module bằng cách thêm vào httpd.conf dòng :

LoadModule security2_module modules/mod_security2.so

đối với centos :

vi  /etc/httpd/conf/httpd.conf

( Chú ý bạn phải thêm vào đúng khu vực chứa LoadModule trong file cấu hình)
6. File cấu hình MS
Bạn có thể config trực tiếp vào file httpd.conf. Nhưng để cho rõ ràng bạn nên tạo một file config riêng.
Trong Centos các file cấu hình riêng mặc định chứa trong. /etc/httpd/conf.d/

vi /etc/httpd/conf.d/modsecurity.conf

ví dụ tôi sửa nội dung file này như sau :

<IfModule security2_module> 

# Bat che do loc cua Modsecurity
SecRuleEngine On 
# Thiet lap action mac dinh
SecDefaultAction "phase:2,deny,log,status:404"

# rule thu nghiem block tat ca request co uri chua "kma"
SecRule REQUEST_URI "kma"

</IfModule>

7. Test
Chúng ta tiến hành tạo 2 file trong thư mục web, kma.html và abc.html chẳng hạn.
Khi chúng ta truy cập vào file abc.html thì trình duyệt trả về kết quả bình thường
Còn khi truy cập vào kma.html thì trình duyệt báo lỗi :

404 - Forbidden

Đó là kết quả do MS đã block những uri có chứa “kma”.
Đây chỉ là một ví dụ nhỏ để các bạn kiểm tra xem mod_security đã hoạt động hay chưa.

Để theo dõi bài viết được thông suốt từ chương sau các bạn buộc phải có các khái niệm cơ bản về HTTP như : HTTP REQUEST, HTTP RESPONSE, REQUEST HEADER, REQUEST BODY…

—-Ruleset—-

<IfModule mod_security.c>
# Turn the filtering engine On or Off
SecFilterEngine On

# Change Server: string
SecServerSignature “Apache”

# This setting should be set to On only if the Web site is
# using the Unicode encoding. Otherwise it may interfere with
# the normal Web site operation.
SecFilterCheckUnicodeEncoding Off

# The audit engine works independently and
# can be turned On of Off on the per-server or
# on the per-directory basis. “On” will log everything,
# “DynamicOrRelevant” will log dynamic requests or violations,
# and “RelevantOnly” will only log policy violations
SecAuditEngine RelevantOnly

# The name of the audit log file
SecAuditLog logs/audit_log

# Should mod_security inspect POST payloads
SecFilterScanPOST On

# Action to take by default
SecFilterDefaultAction “deny,log,status:403″

## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ##

# Require HTTP_USER_AGENT and HTTP_HOST in all requests
# SecFilterSelective “HTTP_USER_AGENT|HTTP_HOST” “^$”

# Require Content-Length to be provided with
# every POST request
SecFilterSelective REQUEST_METHOD “^POST$” chain
SecFilterSelective HTTP_Content-Length “^$”

# Don’t accept transfer encodings we know we don’t handle
# (and you don’t need it anyway)
SecFilterSelective HTTP_Transfer-Encoding “!^$”

# Protecting from XSS attacks through the PHP session cookie
SecFilterSelective ARG_PHPSESSID “!^[0-9a-z]*$”
SecFilterSelective COOKIE_PHPSESSID “!^[0-9a-z]*$”

SecFilter “viewtopic\.php\?” chain
SecFilter “chr\(([0-9]{1,3})\)” “deny,log”

# Block various methods of downloading files to a server
SecFilterSelective THE_REQUEST “wget ”
SecFilterSelective THE_REQUEST “lynx ”
SecFilterSelective THE_REQUEST “scp ”
SecFilterSelective THE_REQUEST “ftp ”
SecFilterSelective THE_REQUEST “cvs ”
SecFilterSelective THE_REQUEST “rcp ”
SecFilterSelective THE_REQUEST “curl ”
SecFilterSelective THE_REQUEST “telnet ”
SecFilterSelective THE_REQUEST “ssh ”
SecFilterSelective THE_REQUEST “echo ”
SecFilterSelective THE_REQUEST “links -dump ”
SecFilterSelective THE_REQUEST “links -dump-charset ”
SecFilterSelective THE_REQUEST “links -dump-width ”
SecFilterSelective THE_REQUEST “links http:// ”
SecFilterSelective THE_REQUEST “links ftp:// ”
SecFilterSelective THE_REQUEST “links -source ”
SecFilterSelective THE_REQUEST “mkdir ”
SecFilterSelective THE_REQUEST “cd /tmp ”
SecFilterSelective THE_REQUEST “cd /var/tmp ”
SecFilterSelective THE_REQUEST “cd /etc/httpd/proxy ”
</IfModule>

—/Ruleset—

Thảo luận bài viết tại forum : http://forum.gocit.vn/threads/modsecurity.668/

Print Friendly

Comments

comments

Bài viết liên quan