Làm reverse proxy vi Linux + Apache httpd, thuc series "Bo
v máy ch..." - 4/8/2005 10h:35
1. Gii thiu
Chào các fan hâm m Linux,
Bài viết này ch yếu da trên hai tài liu là "Web Security Appliance With Apache and
mod_security" ca Ivan, tác gi mod_security và "Securing Apache 2: Step-by-Step" ca Artur Maj.
Bà con có th xem đây là mt bn dch tiếng Vit ca hai tài liu trên, kèm theo nhng suy nghĩ
riêng ca bn thân tôi da vào kinh nghim thc tế khi trin khai reverse proxy -0-. Bài viết này có
th xem là mt case study thuc tp tài liu "Bo v máy ch an toàn vi phn mm t do".
Nhim v ca chúng ta là bo v mt hay nhiu content web-server -1- nm trong vùng Internal -2-,
các web-server này có th là Apache httpd, hoc Microsoft IIS, hoc có th ch là mt web-server
đơn gin được embedded vào mt ng dng nào đó. Để hoàn thành nhim v, chúng ta s tp trung
vào xây dng mt firewall/ids hot động tng application, trong tài liu này gi là reverse-proxy,
s dng Apache httpd -3- trên nn Linux.
2. Reverse proxy là gì?
[img]http://www-106.ibm.com/developerworks/lotus/library/lwp_proxy/geno2.jpg[/img]
Mt proxy, theo định nghĩa, là mt thiết b đứng gia server và client, tham gia vào "cuc trò
chuyn" gia hai bên. Khái nim proxy mà chúng ta thường dùng hàng ngày tt hơn nên được gi
là mt forward proxy: mt thiết b đứng gia mt client và tt c server mà client đó mun truy cp
vào. Mt reverse proxy làm công vic hoàn toàn ngược li: nó đứng gia mt server và tt c client
mà server này phi phc v. Reverse proxy ging như mt nhà ga kiêm mt trm kim soát, các
request t client, bt buc phi ghé vào reverse proxy, ti reverse proxy s kim soát, lc b các
request không hp l, và luân chuyn các request hp l đến đích cui cùng là các server. Chú ý là
mt reverse proxy có th luân chuyn request cho nhiu server cùng lúc.
Li thế ln nht ca vic s dng reverse proxy là kh năng qun lí tp trung. Mt khi đã đẩy
được tt c traffic đi qua mt trm kim soát duy nht (là reverse proxy), chúng ta có th áp dng
nhiu "đồ ngh" khác để tăng cường an ninh cho h thng ca mình. Dĩ nhiên, bt kì sn phm hay
công ngh nào cũng có ưu và khuyết đim ca nó, đi cùng vi single point of access bao gi cũng là
"bóng ma" single point of failure. Single point of failure có th được gii quyết bng cách xây dng
cluster. Đây là mt vn đề hoàn toàn vượt qua khi phm vi ca bài viết này, tôi ch xin gii thiu
b nào mun tìm hiu v cluster trên Linux thì th ghé vào http://www.linux-ha.org. Ngoài ra áp
dng reverse proxy đúng cách s giúp tăng cường performance cũng như nâng cao scalability ca
các web-application chy trên các content server. Chút xíu na, tôi s đi vào chi tiết các ưu đim
ca reverse proxy cũng như làm thế nào để khai thác các ưu đim đó.
3. Cài đặt máy ch reverse-proxy
3.1. Chn và cài đặt h điu hành cho reverse proxy
Dĩ nhiên là tôi s dng linux cho máy ch reverse proxy. Tôi không mô t quá trình cài đặt linux
đây bi có rt nhiu tài liu hay trên Internet nói v đề tài này, và hơn na tôi nghĩ là mt khi đã
nghĩ đến chuyn làm reverse proxy thì chc chn chuyn cài đặt Linux không là vn đề.Linux có
quá tri distro, thế mrro chn distro nào? Theo tôi thì distro nào cũng như nhau c thôi, nhưng nếu
ai đó hi tôi câu hi trên thì câu tr li s là Trustix -4-. Bt k chn distro nào, nh là sau khi cài
đặt xong, hãy dành mt chút thi gian để secure cái distro ca mình li trước khi đọc tiếp -5-. Phn
tiếp theo chúng ta s bàn v vic cài đặt Apache httpd cũng như các module kèm theo ca nó.
3.2. 1.3.x hay 2.x?
Trước tiên, tôi nghĩ cn phi tr li câu hi là chúng ta s chn phiên bn Apache nào để làm
reverse proxy đây, 1.3.x hay 2.x? Tôi chn 2.x vì ba lý do: th nht là tôi "nghe đồn" là có rt nhiu
0-day trong phiên bn 1.3.x :D. Lý do th hai là Apache 2.x cung cp mt b filtering API tt hơn
so vi phiên bn 1.3.x, cho phép các module có th nhìn thy và tương tác vi ni dung ca các
request cũng như các response tương ng t tr li t server. Điu này rt quan trng đối vi mt
reverse proxy đóng vai trò là mt application gateway bi vì nó phi kim tra tt c thông tin đi
xuyên qua nó trước khi chuyn giao cho bên nhn. -6-. Lý do cui cùng là Apache httpd 2.x có
performance cao hơn hn 1.3.x khi phc v các static content như file HTML và file hình nh. Tôi
quan tâm đến vn đề này là vì tôi có ý định gim ti cho các content server bên trong bng cách tách
content ra làm hai loi là dynamic (các loi file CGI/Perl, PHP) và static (các file HTML và file
hình nh), các content server ch phc v dynamic content, còn tt c static content thì đưa qua máy
ch reverse proxy luôn. Lúc đó khi các request ca client đi vào reverse proxy, nếu request đó có
đích đến là mt static content, máy ch reverse proxy s tr li luôn cho client mà không cn
forward request đó đến content server phía sau, ch nhng request đến các dynamic content mi
được forward để các content server x lí. Tôi s đi vào chi tiết vn đề này phn sau, ch lưu ý mt
điu là cui cùng tôi li không dùng Apache httpd cho mc đích này mà li s dng mt máy ch
web khác chuyên tr static content.
3.3. Chn module cho Apache httpd
Ngoài nhng module mà tài liu "Securing Apache 2: step by step" đề ngh, chúng ta phi chn
thêm các module sau đây:
-mod_rewrite, mod_proxy, mod_proxy_http: các module này s h tr chúng ta trong vic thiết lp
reverse proxy.
-mod_security: module này giúp chúng ta cu hình reverse proxy thành mt application firewall để
chng li các dng tn công thường thy vào các web-application chy trên content server. -7-
-mod_ssl: module này giúp chúng ta mã hóa d liu ca các kết ni t client đến server thông qua
giao thc SSL và TLS, biến giao thc HTTP không an toàn thành giao thc HTTPS rt bo mt. -8-
Phn quan trng tiếp theo là chn mt MPM phù hp vi mc đích làm reverse proxy ca chúng ta.
MPM là viết tt ca cm t Multi-Processing Module, là mt ci thin đáng k ca Apache httpd
2.x so vi Apache 1.x. Trong kiến trúc ca Apache 2.x, MPM đóng vai trò hết sc quan trng, nó
chu trách nhim lng nghe trên các cng mng, chp nhn các yêu cu kết ni t phía client, và
chuyn các yêu cu đó vào bên trong để Apache httpd x lí -9-. Trong trường hp này tôi chn
MPM worker. MPM worker s dng thread để phc v các request, do đó nó có kh năng phc v
mt lượng ln các request nhưng li tn rt ít tài nguyên so vi các process-based MPM khác như
prefork. Đồng thi MPM worker vn khai thác đặc tính n định ca cá process-based MPM bng
cách to ra nhiu process để trước, mi process có nhiu thread để sn sàng phc v client -10-.
3.4. Biên dch và cài đặt Apache httpd
Câu hi kế tiếp là biên dch các module theo kiu nào. Như chúng ta đều biết, có hai cách biên dch
các module trong Apache httpd. Cách th nht, gi là phương pháp động, là biên dch các module
thành các thư vin liên kết chia s (tương t như các thư vin DLL trên Windows). Vi cách này,
các module s được biên dch thành các file .so, và s được ti lên khi Apache httpd khi động nếu
cn (tùy theo các câu lnh LoadModule trong file cu hình conf/httpd.conf). Cách biên dch th hai,
gi là phương pháp tĩnh, là gom tt c module nhét vào trong file bin/httpd luôn (link statically).
Khi khi động và trong quá trình chy, Apache httpd không cn phi ti thêm module nào na.
Phương pháp tĩnh được xem là la chn tt hơn hết. Chn phương pháp tĩnh, chúng ta không cn
dùng đến module mod_so (module cn thiết để ti các file .so trong phương pháp động). Hơn na,
theo khuyến cáo ca Apache, s dng phương pháp tĩnh s giúp tăng 5% v mt performance so vi
phương pháp động.
Chúng ta ti Apache httpd 2.x http://httpd.apache.org/download.cgi và ti mod_security ti
http://www.modsecurity.org s dng các lnh sau:
CODE
localhost$ wget http://www.tux.org/pub/net/apache/dist/httpd/httpd-2.0.54.tar.gz
localhost$ wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
localhost$ tar -xzf httpd-2.0.54.tar.gz -C /usr/local/src
localhost$ tar -xzf modsecurity-1.8.7.tar.gz -C /usr/local/src
Tài liu kèm theo ca mod_security ch hướng dn cách biên dch mod_security thành mt thư vin
chia s ca Apache httpd, do đó chúng ta cn phi chun b đôi ch để có th biên dch tĩnh
mod_security:
CODE
localhost$ cd /usr/local/src
localhost$ mkdir -p httpd-2.0.54/modules/security
localhost$ cp modsecurity-1.8.7/apache2/mod_security.c httpd-2.0.54/modules/security
localhost$ cp httpd-2.0.54/modules/echo/Makefile.in httpd-2.0.54/modules/security
Okay, xong xuôi, bt đầu biên dch như sau:
CODE
localhost$ cd /usr/local/src/httpd-2.0.54
localhost$ ./configure ¥
--with-mpm=worker ¥
--disable-charset-lite ¥
--disable-include ¥
--disable-env ¥
--disable-status ¥
--disable-autoindex ¥
--disable-asis ¥
--disable-cgid ¥
--disable-cgi ¥
--disable-negotiation ¥
--disable-imap ¥
--disable-actions ¥
--disable-userdir ¥
--disable-alias ¥
--disable-so ¥
--with-module=security:mod_security.c ¥
--enable-modules='ssl rewrite proxy proxy_http'
Nếu quá trình biên dch thành công, chúng ta s tiếp tc như sau để cài Apache httpd vào h thng
(ti thư mc mc định là /usr/local/apache):
CODE
localhost$ make
localhost$ su
localhost# umask 022
localhost# make install
localhost# chown -R root:sys /usr/local/apache
3.5. Đổi "root" ca server
Phn này xin vui lòng tham kho tài liu "Securing Apache 2:Step by Step."
-m
(còn tiếp)
Phn sau:
4. Cu hình Apache httpd làm reverse proxy
----------------------
-0-: Thc tế phn tiếng Vit ca tài liu "Securing Apache 2: Step-by-Step" tôi sao chép khá nhiu
t bn dch và m rng tài liu "Securing Apache: Step-by-Step"
(http://www.securityfocus.com/infocus/1694) ca hnd aka conmale. Tham kho thêm v bn dch
và m rng ca anh conmale ti http://www.hvaonline.net/forum/index.php?a...T&f=161&t=46199
-1-: ngoài web-server ra, gii pháp reverse proxy (hoc tương t) có th áp dng cho các dch v
khác như VNC (xem th http://sourceforge.net/projects/vnc-reflector/), mail (xem th tài liu
"Qmail as the mail gateway" ca hnd@diendantinhoc.org). Ch duy nht mt dch v tui chưa làm
được reverse proxy là FTP, b nào có thông tin v ftp reverse proxy thì cho tui vài xu.
-2-: chúng ta vn có th thiết lp reverse proxy để bo v cho các web-server nm ngay vùng
DMZ, hoc thiết lp mt reverse-proxy đặt ngay trong vùng Internal để bo v các web-server
vùng Internal t các mi him ha đến t bên trong.
-3-: Ngoài Apache httpd ra, còn có rt nhiu software khác có th được ng dng để làm reverse
proxy mà đáng k nht là pound. Thao kho thêm ti địa ch http://www.apsis.ch/pound/.
-4-: Trustix là mt distro nh gn (trn b cài đặt ch có mt CD duy nht) được xây dng da trên
RedHat vi hai mc tiêu chính là bo mt và n định. Phiên bn stable mi nht ca Trustix là 2.2,
phiên bn unstable là 3.0 RC2. Tham kho thêm ti www.trustix.org.