0

آموزش های تخصصی شبکه و امنیت و ضد امنیت

 
amindadaadad
amindadaadad
کاربر طلایی3
تاریخ عضویت : دی 1389 
تعداد پست ها : 3567
محل سکونت : سیستان و بلوچستان

پاسخ به:آموزش های تخصصی شبکه و امنیت و ضد امنیت
پنج شنبه 26 مرداد 1391  12:10 AM

اين مقاله به صورت قدم 
به قدم به شما نحوه نصب و تنظيم نمودن وب سرورهاي آپاچي نسخه 
1.3.x جهت امنيت بالاتر را نشان مي دهد كه 
سعي شده جزئيات كار به خوبي مورد بررسي قرار بگيرد .


قبل از اينكه ما مرحله 
امنيت وب سرور آپاچي را مورد بررسي قرار دهيم بايد اين را مشخص نماييم كه چه 
استفاده اي از سرور را خواهيم نمود . متنوع بودن استفاده از وب سرورهاي آپاچي نوشتن 
يك روند جهاني جهت امنيت اين سرور را بسيار مشكل مي سازد . به همين دليل است كه در 
اين مقاله ما چنين وب سروري با چنين شرايطي را در نظر مي گيريم :


  •  
  • <LI dir=rtl>
    اين وب سرور از طريق 
    اينترنت قابل دسترسي است


    <LI dir=rtl>
    فقط صفحات 
    اچ-تي-ام-ال ثابت در آن قرار مي گيرد


    <LI dir=rtl>
    اين سرور مكانيزم 
    هاستينگ مجازي را پشتيباني خواهد نمود 


    <LI dir=rtl>
    صفحات مهم وب سايت 
    فقط از طريق يك آدرس IP مخصوص و يا كاربران خاص مورد 
    استفاده قرار مي گيرد (

    basic authentication )


  • اين سرور همه درخواست هاي دريافتي را ضبط مي كند ( شامل اطلاعاتي در مورد 
    مرورگرهاي وب نيز خواهد شد )


از اين جهت قابل تاكيد است كه كه مدل ذكر شده در بالا 
PHP, JSP, CGI و ديگر تكنولوژي هايي 
كه امكان تداخل با سرويس هاي وب سرور را دارد را پشتيباني نمي كند . استفاده از 
تكنولوژي هايي كه در بالا ذكر شد با اين كه در دنياي امروز مورد احتياج هسنتد ممكن 
است يك ريسك امنيتي بزرگ در امنيت باشد كه قابل ذكر است يك اسكريپت كوچك مي تواند 
امنيت سرور را به كلي كاهش دهد . ولي چرا ؟ بايد بگم اسكريپت هاي كاربردي 
ASP/CGI ممكن است داراي حفره هاي امنيتي باشد ( مانند SQL 
Injection , CSS ) . دوم اين تكنولوژي ها ممكن است خود نيز داراي 
مشكل باشد ( مانند آسيب پذيري هاي ماژول هاي PHP, Perl
و ... ) به همين دليل است استفاده از اين تكنولوژي ها را زماني 
پيشنهاد مي شود كه واقعا مورد احتياج باشند .


فرض هاي امنيتي

يكي از مهم ترين موارد 
در هر پروژه كامپيوتري توجه به فرض هاي امنيتي است ( با توجه به توضيحاتي كه 
در زير آورده مي شود اين موضوع به راحتي قابل تحليل است ) و اين فرض ها بايد 
قبل از اينكه يك پروژه به انجام برسد در نظر گرفته شود . فرض هاي امنيتي كه ما جهت 
وب سرورمان در نظر گرفته ايم اين ها هستند :


  •  
  • <LI dir=rtl>
    سيستم عامل بايد تا 
    آنجايي كه امكان دارد از نظر امنيت مورد بررسي قرار گرفته باشد و مشكلات امنيتي 
    ان برطرف گردد ( هم در مقابل حملات داخلي و هم ريموت )


    <LI dir=rtl>
    وب سرور نبايد هيچ 
    سرويس ديگري غير از سرويس اچ-تي-تي-پي را ارائه دهد


    <LI dir=rtl>
    دسترسي ريموت به سرور 
    بايد توسط يك فايروال كنترل گردد 


    <LI dir=rtl>
    سرويس آپاچي بايد 
    تنها سرويسي باشد كه در سيستم وجود دارد


    <LI dir=rtl>
    فقط ماژول هاي آپاچي 
    آن هايي كه مورد احتياج هستند بايد فعال باشند

  • پروسه هاي آپاچي بايد 
    دسترسي محدود شده به فايل هاي سيستمي داشته باشند

نصب سيستم عامل

قبل از نصب وب سرور 
آپاچي ما بايد يك سيستم عامل را انتخاب نماييم . سرور آپاچي مي تواند بر روي بيشتر 
سيستم عامل ها كامپايل و نصب شود . بيشتر مقاله بر روي امنيت وب سرور آپاچي در 
سيستم عامل FreeBSD ( نسخه 4.7 ) تاكيد دارد ولي سعي شده تا 
آن جا كه امكان داشته روش هاي به گونه اي باشند كه در بيشتر سيستم عامل ها قابل 
استفاده باشد . من استفاده از سيستم عامل ويندوز را پيشنهاد نمي كنم چون جهت بالا 
بردن امنيت آپاچي سازگاري كمي دارد .


اولين قدم در بالا بردن 
امنيت وب سرور , رفع مشكلات امنيتي سيستم عامل به طور كامل 
است كه البته مقالات بسياري بر روي اينترنت جهت اين كار موجود است .


خوب بعد از اينكه سيستم 
عامل نصب شد و مشكلات امنيتي آن رفع گرديد ما بايد يك گروه جديد ( Apache ) 
را به پروسه ها اضافه كنيم ( مثال زير اين روند را در FreeBSD 
نشان مي دهد )






pw groupadd apache

pw useradd apache -c "Apache Server" -d 
/dev/null -g apache -s /sbin/nologin





به طور پيش فرض پروسه هاي آپاچي با سطح دسترسي nobody
( به غير از پروسه اصلي آن كه با سطح دسترسي روت اجرا مي شود ) 
اجرا مي شوند كه اين نيز خود يك مشكل امنيتي است .


اما نرم افزارها ...

قدم بعدي دريافت آخرين 
نسخه وب سرور 
آپاچي
 است . كه بعضي از تنظيمات اين سرور در هنگام كامپايل قابل تغيير است به 
همين دليل اين حائز اهميت است كه سورس آن را در مقابل نسخه باينري دريافت نماييد .


اما بعد از دريافت ما 
بايد تصميم بگيريم كه چه ماژول هايي از سرور فعال شوند و توضيح كوتاهي در اين مورد 
در 
target="_blank">http://httpd.apache.org/docs/mod قابل مشاهده است .


ماژول هاي آپاچي

انتخاب ماژول هاي اين 
سرور ار موارد مهم در امنيت سرور است . ما بايد اين قانون را مورد توجه قرار دهيم ( 
هر چه كم تر , بهتر ! ) . اما جهت روند امنيتي ماژول هايي 
كه مورد احتياج هستند در اينجا ذكر شده ‌:




نام ماژول
شرح


httpd_core 

ويژگي هاي كلي آپاچي ( نصب 
در همه موارد مورد احتياج است‌)



mod_access
فراهم نمودن كنترل دسترسي به 
كلاينت



mod_auth
مورد احتياج جهت 
HTTP Basic Authentication


mod_dir

مورد احتياج جهت 
جستجو و فايل هاي 

serve directory index : 
index.html, default.htm مانند




mod_log_config
مورد احتياج جهت ضبط نمودن 
وقايع 



mod_mime
مورد احتياج جهت 
character set, content- encoding 
و ...



ديگر ماژول هاي آپاچي 
بايد غيرفعال شوند . اين ارزش را دارد كه بگويم دو ماژول آپاچي وجود دارند كه 
خطرناك تر از ديگر ماژول ها هستند :
 
mod_autoindex

mod_info 
و .
 اولين ماژول 
فراهم كننده 
directory indexing 
به صورت خودكار است و صورت پيش فرش فعال شده است . اين 
براحتي قابل متوجه شدن است كه اين ماژول نصب شده است يا نه ( براي مثال 

http://server_name/icons 
)
 و محتواي دايركتوري ها را ببينيم و دومين ماژول 
mod_info 
هرگز نيايد از طريق اينترنت قابل دسترسي باشد به اين دليل كه 
دسترسي به تنظيمات سرور را امكان پذير مي سازد .


سوال بعدي چگونگي 
كامپايل ماژول ها است . روش ثابت راه حل مناسب تري به نظر مي رسد .


كامپايل نمودن نرم 
افزار 


اول از همه بايد بگويم 
اگر :: پچ امنيتي جديدي وجود داشت :: بايد بروز رسانده شود بعد از آن بايد سرور 
كامپايل شود و از اين طريق نصب شود :






./configure --prefix=/usr/local/apache 
--disable-module=all --server-

uid=apache --server-gid=apache --enable-module=access 
--enable-

module=log_config --enable-module=dir 
--enable-module=mime --enable-module=auth



make

su

umask 022

make install

chown -R root:sys /usr/local/apache




اما مرحله بعد ...

قدم بعدي محدود نمودن 
دسترسي پروسه هاي آپاچي به فايل هاي سيتمي است. ما اين كار را از طريق ايجاد يك 
دايركتوري روت جديد در دايركتوري 

/chroot/httpd
انجام مي 
هيم :


مالك همه دايركتوري هاي 
بالا بايد روت باشد و سطح دسترسي بايد به 0755 تغيير يابد . بعد ما يك فايل ديوايس 
را ايجاد مي كنيم :





ls -al 
/dev/null

crw-rw-rw- 1 root wheel 2, 2 Mar 14 
12:53 /dev/null

mknod /chroot/httpd/dev/null c 2 2

chown root:sys /chroot/httpd/dev/null 

chmod 666 /chroot/httpd/dev/null




يك 
روش ديگر نيز بايد استفاده شود تا 

/chroot/httpd/dev/log 
ايجاد شود كه هم چنين براي اينكه سرور به درستي كار كند . به دليل اينكه سيستم

FreeBSD است 
اين لاين بايد به 

/etc/rc.conf اضافه 
شود :





syslogd_flags="-l 
/chroot/httpd/dev/log"




ما براي اينكه تغييرات 
انجام بپذيرد بايد سيستم را ري استارت نماييم . البته جهت ايجاد 

/chroot/httpd/dev/log 
در سيستم عامل هاي ديگر بايد به راهنماي ديگر در مورد 

syslogd مراجعه كنيم .


قدم بعدي كپي
httpd به يك 
دايركتوري جديد همراه با همه باينري ها و فايل لايبرري است . جهت اين كار 
بايد ليستي از فايل هاي مورد نياز را تهيه كنيم . ما مي توانيم يك ليست را با چنين 
دستوراتي تهيه نماييم :




دستور
اجرا در محيط
شرح


ldd
همه
ليك كننده فايل هاي اجرايي و 
يا لايبرري هاي به اشتراك گذاشته شده



ktrace/ktruss/kdump
*BSD
فعال كردن مسير يابي پروسه 
ها در كرنل و نشان دادن اطلاعات مسيب يابي كرنل



sotruss
سولاريس
مسير يابي پروسه هاي لايبرري 
به اشتراك گذاشته شده



strace/ltrace
لينوكس
مسير يابي فراخوان ها سيستمي 
و سيگنال ها



strings
همه
پيدا نمودن استرينگ هاي قابل 
پرينت در فايل هاي باينري



trace
AIX
ضبط كننده وقايع انتخاب شده 
در سيستم



trace (freeware)
HP-UX <10.20
پرينت فراخوان هاي سيستمي و 
مسير يابي كرنل در پروسه ها



truss
FreeBSD, Solaris, AIX 5L, SCO Unixware
مسير يابي فراخوان ها سيستمي 
و سيگنال ها



مثال هايي از 
استفاده از دستورهاي 
ldd و
strings و truss
 :





localhost# ldd 
/usr/local/apache/bin/httpd

/usr/local/apache/bin/httpd:

libcrypt.so.2 => /usr/lib/libcrypt.so.2 
(0x280bd000)

libc.so.4 => /usr/lib/libc.so.4 
(0x280d6000)



localhost# strings /usr/local/apache/bin/httpd | grep lib

/usr/libexec/ld-elf.so.1

libcrypt.so.2

libc.so.4



localhost# truss /usr/local/apache/bin/httpd | grep open

(...)

open("/var/run/ld-elf.so.hints",0,00) 
= 3 (0x3)

open("/usr/lib/libcrypt.so.2",0,027757775370) = 3 (0x3)

open("/usr/lib/libc.so.4",0,027757775370) 
= 3 (0x3)

open("/etc/spwd.db",0,00) 
= 3 (0x3)

open("/etc/group",0,0666) 
= 3 (0x3)

open("/usr/local/apache/conf/httpd.conf",0,0666) = 3 (0x3)

(...)




دستورات بالا نه تنها جهت
httpd بايد 
اجرا شوند بلكه جهت همه باينري ها و لايبرري ها مورد احتياج هستند . به دليل اينكه 
سيستم عامل ما 
FreeBSD 
است بايد چنين فايل هايي نيز كپي گردد :





cp /etc/hosts 
/chroot/httpd/etc/

cp /etc/host.conf /chroot/httpd/etc/

cp /etc/resolv.conf /chroot/httpd/etc/

cp /etc/group /chroot/httpd/etc/

cp /etc/master.passwd /chroot/httpd/etc/passwords

cp /usr/local/apache/conf/mime.types /chroot/httpd/usr/local/apache/conf/




دقت كنيد كه در 
/chroot/httpd/etc/passwords 
ما بايد همه لاين ها را به غير از 
nobody 
و apache
 را حذف كنيم . در يك جاي 
ديگر ما بايد چنين عملي را نيز دوباره در 

/chroot/httpd/etc/group 
تكرار كنيم . سپس ما بايد بانك اطلاعاتي پسورد ها را اين گونه بسازيم :





cd 
/chroot/httpd/etc

pwd_mkdb -d /chroot/httpd/etc passwords

rm -rf /chroot/httpd/etc/master.passwd




قدم بعدي اين است كه تست كنيم كه 
آيا 
httpd به درستي 
كار مي كند يا نه . جهت انجام اين كار ما بايد فايل تنظيمات آپاچي و 

index.html 
را كپي نماييم :





cp /usr/local/apache/conf/httpd.conf 
/chroot/httpd/usr/local/apache/co

nf/

cp /usr/local/apache/htdocs/index.html.en /chroot/httpd/www/index.html




بعد از كپي فايل هاي مورد 
احتياج ما بايد 
DocumentRoot 
رو همين طور كه در زير نشان داده شده تغيير دهيم :





DocumentRoot 
"/www"




سپس سرور را اجرا كنيم :





chroot /chroot/httpd /usr/local/apache/bin/httpd



اگر با مشكلي برخورد نموديد 
من پيشنهاد مي كنم فايل ضبط كننده وقايع 
(chroot/httpd/usr/local/apache/logs) 
را آناليز كنيد . از راه ديگر چنين فرماني نيز مي تواند به كار برده شود :





truss chroot 
/chroot/httpd /usr/local/apache/bin/httpd




اين فرمان مي تواند دليل مشكل 
ايجاد شده را نشان دهد . بعد از رفع مشكل همه خطاها ما مي توانيم سرور را تنظيم 
نماييم .


تنظيم نمودن سرور 


قدم اول حذف فايل 
/chroot/httpd/usr/local/apache/conf/httpd.conf 
است و جايگزين يك فايل جديد به جاي آن است . محتواي فايل بايد :






=================================================

# Basic settings

# =================================================

ServerType standalone

ServerRoot "/usr/local/apache"

PidFile /usr/local/apache/logs/httpd.pid

ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard

ResourceConfig /dev/null

AccessConfig /dev/null



# =================================================

# Performance settings

# =================================================

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

MinSpareServers 5

MaxSpareServers 10

StartServers 5

MaxClients 150

MaxRequestsPerChild 0



# =================================================

# Apache's modules

# =================================================

ClearModuleList

AddModule mod_log_config.c

AddModule mod_mime.c

AddModule mod_dir.c

AddModule mod_access.c

AddModule mod_auth.c



# =================================================

# General settings

# =================================================

Port 80

User apache

Group apache

ServerAdmin Webmaster@www.ebank.lab

UseCanonicalName Off

ServerSignature Off

HostnameLookups Off

ServerTokens Prod



DirectoryIndex index.html



DocumentRoot "/www/vhosts"



# =================================================

# Access control

# =================================================



Options None

AllowOverride None

Order deny,allow

Deny from all





Order allow,deny

Allow from all





Order allow,deny

Allow from all





# =================================================

# MIME encoding

# =================================================



TypesConfig /usr/local/apache/conf/mime.types



DefaultType text/plain



AddEncoding x-compress Z

AddEncoding x-gzip gz tgz

AddType application/x-tar .tgz





# =================================================

# Logs

# =================================================

LogLevel warn

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" 
combined

LogFormat "%h %l %u %t "%r" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

ErrorLog /usr/local/apache/logs/error_log

CustomLog /usr/local/apache/logs/access_log combined



# =================================================

# Virtual hosts

# =================================================

NameVirtualHost *



DocumentRoot "/www/vhosts/www.ebank.lab"

ServerName "www.ebank.lab"

ServerAlias "www.e-bank.lab"

ErrorLog logs/www.ebank.lab/error_log

CustomLog logs/www.ebank.lab/access_log combined





DocumentRoot "/www/vhosts/www.test.lab"

ServerName "www.test.lab"

ErrorLog logs/www.test.lab/error_log

CustomLog logs/www.test.lab/access_log combined






تنظيمات ارائه شده در بالا شامل 
فرمان هايي مي گردد كه جهت فعاليت سرور و امنيت آن مورد احتياج است . دو هاست مجازي 
وجود دارند كه توسط سرور پشتيباني شده اند :


- www.ebank.lab (www.e-bank.lab)

- www.test.lab


محتواي وب سايت هاي بالا به طور 
فيزيكي در اين دايركتوري ها وجود دارد :


- /chroot/httpd/www/vhosts/www.ebank.lab

- /chroot/httpd/www/vhosts/www.test.lab




و هر وب سايت لاگ فايل مخصوص به 
خود را دارد كه در اين دايركتوري هستند‌:


- /chroot/httpd/usr/local/apache/logs/www.ebank.lab

- /chroot/httpd/usr/local/apache/logs/www.test.lab




اين دايركتوري ها قبل از 
اينكه سرور آپاچي براي اولين بار اجرا مي شود بايد ايجاد شوند . مالك اين دايركتوري 
ها بايد به 
root:sys 
ست شود و سطح دسترسي به 0755 تغيير يابد .



حال اگر فايل تنظيمات آپاچي را به 
با نسخه اي كه در اينجا ارائه شد مقايسه كنيم چني&

حال اگر فايل تنظيمات آپاچي را به 
با نسخه اي كه در اينجا ارائه شد مقايسه كنيم چنين تغييراتي را مي بينيم كه به چندي 
از آن ها اشاره مي كنم :


  • تعدادي از ماژول هاي فعال 
    آپاچي كاهش يافت
  • آپاچي اطلاعاتي بيشتري را در 
    مورد درخواست ها لاگ خواهد نمود
  • آپاچي فقط دسترسي به فايل و 
    دايركتوري ها را امكان پذير ميسازد كه در فايل تنظيمات مشخص شده است




و ...

قدم بعدي ايجاد يك استارت 
آپ اسكرپت 
"apache.sh" 
است كه محتواي آن بايد :






#!/bin/sh

CHROOT=/chroot/httpd/
HTTPD=/usr/local/apache/bin/httpd
PIDFILE=/usr/local/apache/logs/httpd.pid

echo -n " apache"

case "" in
start)
/usr/sbin/chroot $CHROOT $HTTPD
;;
stop)
kill `cat ${CHROOT}/${PIDFILE}`
;;
*)
echo ""
echo "Usage: `basename {PAGEEDIT_FORM_TEXT}` {start|stop}" >&2
exit 64
;;
esac

exit 0







كه اين اسكرسپت بايد به دايركتوري 
مربوطه كپي شود كه بستگي به نوع سيستم عامل دارد . مثلا در 

FreeBSD 
دايركتوري مربوطه 

/usr/local/etc/rc.d 
مي باشد


حال اين مقاله مي تواند در بالا 
بردن امنيت سرورهاي آپاچي بسيار مفيد باشد ...

** دارالولایه **

درباره امضاء

تشکرات از این پست
دسترسی سریع به انجمن ها