امنیت در آپاچی
1-در ابتدا باید توجه داشته باشیم که حداقل patch های امنیتی را نصب کرده باشیم.
2-مخفی کردن ورژن آپاچی و دیگر اطلاعات حساس در آپاچی
در فایل httpd.conf دو مورد زیر را اضافه میکنیم:
ServerSignature OffServerTokens Prod
3-انتخاب کردن یوزر و گروه برای آپاچی
درنسخه های قدیمی لینوکس بصورت پیش فرض مقداردو گزینه زیر nobody است، که باید آنرا بصورت زیر تنظیم کرد:
User apacheGroup apache
4-نداشتن دسترسی اپاچی به بیرون از web root
<Directory /> Order Deny,Allow Deny from all Options None AllowOverride None</Directory><Directory /web> Order Allow,Deny Allow from all</Directory>
با انتخاب none برای options و allowoverride تمام گزینه ها و دوباره نوشتن را غیر فعال می کنیم.
5-غیر فعال کردن browse دایرکتوری ها
امکان رویت دایرکتوری ها برای یوزر ها غیر فعال می شود.می توان این کار را به طور مستقیم داخل هر دایرکتوری و با قرار دادن تگدایرکتوری انجام داد.
Options -Indexes
6-غیر فعال کردن ssi
با استفاده از این ماژول میتوان فایلی را در فایل دیگر include کرد. می توان این کار را به طور مستقیم داخل هر دایرکتوری و با قرار دادن تگدایرکتوری انجام داد.
Options -Includes
7-غیر فعال کردن cgi
اگر از cgi استفاده نمیشود بهتر است که ان را غیرفعال کرد.
Options –ExecCGI
8-غیر فعال کردن symbolic
با غیر فعال کردن این گزینه آپاچی نمی تواند از symbolic استفاده کند، symlink attack از حملات خظرناک در سرور ها محسوبمی شود.
Options -FollowSymLinks
9- غیر فعال کردن تمام گزینه ها
Options None
حتی میتوانیم چندین گزینه را با هم غیر فعال کنیم بطور مثال:
Options -ExecCGI -FollowSymLinks -Indexes
10- غیر فعال کردن پشتیبانی فایلهای .htaccess
AllowOverride None
11- اجرای mod_security
mod_security یک سیستم کشف و پیشگیری از مزاحمت مخصوص برنامه*های کاربردی وب است. به زبان دیگر می*توان آنرا دیوار آتش برنامه*های کاربردی وب نیز نامید. این سیستم به صورت یک ماژول بر روی سرویس*دهنده وب آپاچی نصب شده و همانند یک چتر حفاظتی بر روی برنامه*های کاربردی وب عمل می*نماید.
یک ماژول بسیار قوی می باشد که به کمک آن می توان کارهای زیر را انجام داد:
1-فیلتر کردن آسان
2-بیان منظم بر اساس فیلترینگ
3-حسابرسی
4-محدودیت های حافظه ارسال
5-پشتیبانی chroot
و ...
مراحل نصب به صورت زیر است:
#tar zxvf mod_security-1.7.4.tar.gz
#cd mod_security-1.7.4/
حال باید ورژن آپاچی را مشخص کنیم:
APACHE 1.3.x users
cd apache1/
APACHE 2.x users
cd apache2/
حال ماژول را کامپایل می کنیم:
/usr/local/apache/bin/apxs -cia mod_security.c
حال باید فایل httpd.conf را تغییر داد، به دنبال <IfModule mod_dir.c> می گردیم و کد زیر را اضافه می کنیم:
<IfModule mod_security.c>
SecFilterEngine On

SecServerSignature "Apache"
SecFilterCheckUnicodeEncoding Off
SecAuditEngine RelevantOnly
SecAuditLog logs/audit_log
SecFilterScanPOST On

SecFilterDefaultAction "deny,log,status:403"
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"

SecFilterSelective HTTP_Transfer-Encoding "!^$"
SecFilterSelective ARG_PHPSESSID "!^[0-9a-z]*$"
SecFilterSelective COOKIE_PHPSESSID "!^[0-9a-z]*$"
SecFilter "../"

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

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 "
SecFilterSelective THE_REQUEST "/config.php?v=1&DIR "
SecFilterSelective THE_REQUEST "/../../ "
SecFilterSelective THE_REQUEST "&highlight=%2527%252E "
SecFilterSelective THE_REQUEST "changedir=%2Ftmp%2F.php "

# Very crude filters to prevent SQL injection attacks
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"

# Weaker XSS protection but allows common HTML tags
SecFilter "<[[:space:]]*script"

# Prevent XSS atacks (HTML/Javascript injection)
SecFilter "<(.|n)+>"
</IfModule>

خطوط بالا را ذخیره کرده و درآخر آپاچی را ریستارت می کنیم:
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/httpd start
برای فعال سازی سایتمان باید در فایل زیر
modsecurity_crs_21_protocol_anomalies.conf
گزینه مربوط به خط زیر را را کامنت کنیم
Check that the host header
12- غیر فعال کردن ماژول های غیرلازم
زمانی که اپاچی را نصب میکنیم به همراه ان تعداد زیادی ماژول که مورد نیاز نیستند نصب میگردد، بهتر این است که ماژولهایی که لازم نیستند را حذف کنیم. در زیر تعدای از این ماژولها نوشته شده است:
mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.
13- غیر فعال کردن فایل کانفیگ آپاچی برای همه به جز root
فرض کنید مسیر نصب اپاچی ما بصورت زیر باشد:
/usr/local/apache
در این صورت خواهیم داشت:
chown -R root:root /usr/local/apachechmod -R o-rwx /usr/local/apache
14- کم کردن مقدار timeout
مقدار پیش فرض timeout، 300 ثانیه میباشد،میتوان این مقدار را کمتر کرد، که در کاهش حملات موثر می باشد.
Timeout 45
15- محدود کردن تقاضاهای بزرگ
در آپاچی چندین کامند برای محدود کردن سایز تقاضاها وجود دارد، یکی از این کامندها LimitRequestBody که به صورت نامحدود مقداردهی شده است، بطور مثال اگر می خواهید که سایز فایلهای آپلودی از 1mb بیشتر نشود بصورت زیر استفاده می کنیم:
LimitRequestBody 1048576
و اگر می خواهیم که هیچ فایلی آپلود نشود این مقدار را کمتر می کنیم.
16- محدود کردن سایز بدنه یک xml
LimitXMLRequestBody 10485760
17- محدود کردن چندین تقاضای همزمان
تعداد تقاضاهای همزمان را توسط گزینه maxclients تعیین می کنیم.
18- محدود کردن دسترسی توسط IP
فرض کنید میخواهیم اجازه دسترسی را تنها به یک شبکه مثل 172.16 بدهیم:
Order Deny,AllowDeny from allAllow from 176.16.0.0/16
یا به یک IP خاص:
Order Deny,AllowDeny from allAllow from 127.0.0.1
19- تنظیم تنظیمات KeepAlive
گزینه keepalive کارایی کلاینت را تا 50% میتواند بهبود بخشد پس در تغییر ان باید نهایت دقت را داشت. Keepalive بطور پیش فرض on میباشد و باید انرا خاموش کرد، دو گزینه MaxKeepAliveRequests و KeepAliveTimeout وجود دارد که بصورت پیش فرض مقادیر100 و 15 را دارند. برای تغییر این دو گزینه باید log ها را نگاه کرد و مقدار مناسب را تشخیص داد.
20- اجرا کردن اپاچی در محیط chroot
chroot برای اجرای برنامه های خود جایی را جدا کرده است. همانطور که در بالا نیز اشاره شد mod_security برای حمایت از chroot ساخته شده است. برای تنظیمات آن بصورت زیر عمل میکنیم:
SecChrootDir /chroot/apache






موضوعات مشابه: