


آموزش نصب سرور سامبا در لینوکس UBUNTU
در این مقاله نحوه نصب و پیکربندی سرور سامبا ، روی سرور لینوکس اوبونتو ۱۴٫۱۰ آموزش داده خواهد شد. سامبا یک مجموع نرم افزار منبع باز و رایگان تحت مجوز GNU General Public است که برای انتقال امن و سریع اطلاعات ، فایل ها و چاپگرها، بین همه کلاینت هایی که از پروتکل SMB / CIFS استفاده میکنند نظیر تمام نسخه های DOS و ویندوز ، OS/2 ، لینوکس و … طراحی شده است .

آموزش مقدماتی iptables فایروال لینوکس + دستورات کاربردی
آموزش iptables فایروال لینوکس + دستورات کاربردی و تنظیمات : فایروال ها نقش مهمی در تامین امنیت سیستم ها و شبکه های لینوکسی ایفا میکنند. آنها با کنترل و مدیریت ترافیک شبکه های ورودی و خروجی بر اساس مجموعه ای از قوانین مانند یک محافظ امنیتی بین شبکه داخلی و خارجی عمل میکنند. مجموعه ای از قوانین فایروال تنها اجازه می دهد تا اتصالات و درخواست های مجاز از فایروال عبور کرده و آنهایی که تعریف نشده اند یا غیرمجاز تعریف شده اند مسدود می شوند . ده ها فایروال متن باز در دسترس مدیران شبکه ها و سیستم های لینوکسی قرار دارد که از آن جمله می توان به Iptables , IpCop Shorewall , UFW , Vuurmuur , pfSense , IPFire , SmoothWall , Endian و CSF اشاره کرد که در این مجال به بررسیiptables می پردازیم.
Iptables چیست؟
Iptables یا Netfilter محبوب ترین و پر استفاده ترین فایروال لینوکسی مبتنی بر خط فرمان است. iptables خط اول دفاعی سرورهای لینوکس است و بسیاری از مدیران سرورها از آن برای کانفیگ و ایجاد تنظیمات در سرورهای لینوکس استفاده میکنند. iptables بسته ها را درون پشته شبکه در داخل هسته لینوکس فیلتر میکند. iptables معمولا header هر بسته را بررسی می کند و به محتوای بسته اهمیتی نمی دهد بنابراین از سرعت بسیار زیادی برخوردار است و معمولا تاثیر چندانی در کاهش سرعت پاسخگویی سیستم ندارد، iptables همچنین قادر است یک رشته را درون بسته ها جستجو کند، البته این کار تاحدودی باعث کاهش سرعت سیستم خواهد شد.
iptables امکانات زیادی در اختیار یک مدیر سرور می دهد ، بوسیله iptables میتوان پکت ها را بر اساس پروتکل مورد استفاده در ارتباط ، شماره ip گیرنده و فرستنده ، شماره پورت مورد در ارتباط ، مک آدرس و آدرس فیزیکی سیستم ها ، دامنه ای از آدرس های ip ، زمان برقراری ارتباط ، بخش های مختلفی از بسته ها و تنظیمات IPSec ، طول بسته ها ، انتخاب تصادفی بسته ها ، انتخاب n امین بسته ، کاربر یا گروه ارسال کننده بسته ، پردازش ارسال کننده بسته ، بخش های TOS و TTL هدر ip و تعداد ارتباطات در یک بازه زمانی را کنترل و فیلتر کرد.
توسط iptables شما می توانید با توجه به نیاز های خود به ایجاد،حذف یا ویرایش قوانین فیلتر کردن بسته ها بپردازید و حتی میتوانید مجموعه قوانین جاری را بصورت لیست مشاهده کنید . iptables قابلیت انعطاف پذیری بالایی دارد و میتوان با استفاده از آن نتایج کار آن را بر اساس هر قانون مشاهده یا ویرایش کرد. iptables همچنین از قابلیت پشتیبان گیری و بازیابی قوانین با استفاده از فایل ها برخوردار است و از Load balancing نیز پشتیبانی می کند.
قوانین iptable بسته به نوع کاربرد در جداول filter table ، nat tableوmangling table و در زنجیر(chain)هایی از دستورات دسته بندی می شوند. وظیفه filter table سیاست گذاری و دادن مجوز برای ورود و خروج بسته های TCP/IP به سیستم است. این جدول شامل سه زنجیر INPUT برای ترافیک ورودی به سیستم ، OUTPUT برای ترافیک خروجی از سیستم و FORWARD برای ترافیک فوروارد شده از سیستم است.
آموزش iptables فایروال لینوکس
وظیفه nat table سیاست گذاری و دادن مجوز عملیات routing است و قوانین مربوط به تغییر آدرس IP و یا پورت در جدول nat قرار می گیرند. این جدول شامل سه زنجیر PREROUTING برای شبکه مقصد در ترافیک ورودی به سیستم ، POSTROUTING برای شبکه مبدا ترافیک خروجی از سیستم و OUTPUT است.
از جدول mangle می توان برای مارک دار کردن بسته ها و عملیات بررسی بسته ها قبل از ورود به جداول بالاتر استفاده کرد . کلیه اعمال پیشرفته مربوط به دستکاری فیلدهای header در بسته های ارسالی در شبکه توسط قوانین موجود در این جدول صورت می گیرد.
سوئیچ ها و دستورات iptable
-
A- برای افزودن دستور به انتهای یک زنجیره از جدول قوانین استفاده می شود.
-
I- برای افزودن به مکان خاصی از زنجیره جدول قوانین استفاده می شود.
-
D- برای حذف دستور از مکان خاصی از زنجیره جدول قوانین استفاده می شود.
-
R- برای جایگزین کردن دستور جاری یا یک دستور در مکان خاصی از زنجیره جدول قوانین استفاده می شود.
-
p- برای مشخص کردن نوع پروتکل مورد استفاده قرار میگیرد.
-
t- برای مشخص کردن جدول مورد استفاده قرار میگیرد.
-
s- یا source– برای مشخص کردن شماره ip مبدا مورد استفاده قرار میگیرد.
-
d- یا destination– برای مشخص کردن شماره ip مقصد مورد استفاده قرار میگیرد.
-
i- یا in-interface– برای مشخص کردن کارت شبکه ورودی مورد استفاده قرار میگیرد.
-
o- یا out-interface– برای مشخص کردن کارت شبکه خروجی مورد استفاده قرار میگیرد.
-
sport– برای مشخص کردن شماره پورت مبدا مورد استفاده قرار میگیرد.
-
dport– برای مشحص کردن شماره پورت مقصد مورد استفاده قرار میگیرد.
-
L- برای لیست کردن قوانین موجود در یک زنجیر مورد استفاده قرار میگیرد.
-
N- برای ایجاد زنجیر جدید مورد استفاده قرار میگیرد.
-
X- برای حذف یک زنجیر مورد استفاده قرار میگیرد.
-
F- برای پاک کردن قوانین مورد استفاده قرار میگیرد.
-
j- مشخص کردن نحوه برخورد با بسته مورد استفاده قرار میگیرد. این سویچ به معنی jump بوده و به موارد DROP ، LOG ، ACCEPT و REJECT اشاره می کند. در اینجا تفاوتی که بین DROP و REJECT وجود دارد و آ ن این است که در DROP برای فرستنده پیامی مبنی بر حذف بسته ارسال نمیکند ولی در REJECT به فرستنده یک بسته عدم پذیرش ترافیک ارسال خواهد شد.
-
iptables-save > /etc/iptables.rules برای پشتیبان گیری تنظیمات مورد استفاده قرار میگیرد.
-
post-down iptables-save > /etc/iptables.rules برای پشتیبان گیری تنظیمات قبل از هر خاموش شدن سیستم مورد استفاده قرار میگیرد.
-
iptables-restore < /etc/iptables.rules برای بازیابی تنظیمات مورد استفاده قرار میگیرد.
-
m- برای مشخص کردن ماژول مورد استفاده قرار می گیرد.
-
m mac –mac-source- برای مشخص کردن مک آدرس مبدا مورد استفاده قرار می گیرد.
بطور مثال دستور زیر پورت ۲۲ را باز می کند:
۱
|
iptables –A OUTPUT –o eth0 –p tcp —sport ۲۲ –m state —state ESTABLISHED –j ACCEPT
|
مهم ترین و پرکاربردترین دستورات و تنظیمات iptables
-
پاک کردن تمام تنظیمات جاری
۱
|
iptables –F
|
ایجاد تنظیمات عمومی و مسدود کردن همه دسترسی ها
۱
۲
۳
۴
|
iptables –P INPUT DROP
iptables –P FORWARD DROP
iptables –P OUTPUT DROP
|
-
مسدود کردن یک ip خاص
۱
|
iptables –A INPUT –s xxx.xxx.xxx.xxx –j DROP
|
-
باز کردن پورت SSH برای تمامی ارتباطات ورودی
۱
۲
|
iptables –A INPUT –i eth0 –p tcp —dport ۲۲ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A OUTPUT –o eth0 –p tcp —sport ۲۲ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن پورت ssh برای یک ip یا رنج ip خاص
۱
۲
۳
|
iptables –A INPUT –i eth0 –p tcp –s xxx.xxx.xxx.xxx/۲۴ —dport ۲۲ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A INPUT –i eth0 –p tcp –s xxx.xxx.xxx.xxx —dport ۲۲ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A OUTPUT –o eth0 –p tcp —sport ۲۲ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن پورت http
۱
۲
|
iptables –A INPUT –i eth0 –p tcp —dport ۸۰ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A OUTPUT –o eth0 –p tcp —sport ۸۰ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن پورت https
۱
۲
|
iptables –A INPUT –i eth0 –p tcp —dport ۴۴۳ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A OUTPUT –o eth0 –p tcp —sport ۴۴۳ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن چند پورت بصورت یکجا
۱
۲
|
iptables –A INPUT –i eth0 –p tcp –m multiport —dports ۲۲,۸۰,۴۴۳ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A OUTPUT –o eth0 –p tcp –m multiport —sports ۲۲,۸۰,۴۴۳ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن پورت برای ارتباط خروجی ssh
۱
۲
|
iptables –A OUTPUT –o eth0 –p tcp —dport ۲۲ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A INPUT –i eth0 –p tcp —sport ۲۲ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن پورت خروجی ssh تنها برای یک شبکه خاص
۱
۲
|
iptables –A OUTPUT –o eth0 –p tcp –d ۱۹۲.۱۶۸.۱۰۱.۰/۲۴ —dport ۲۲ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A INPUT –i eth0 –p tcp —sport ۲۲ –m state —state ESTABLISHED –j ACCEPT
|
-
باز کردن پورت https برای ارتباطات خروجی
۱
۲
|
iptables –A OUTPUT –o eth0 –p tcp —dport ۴۴۳ –m state —state NEW,ESTABLISHED –j ACCEPT
iptables –A INPUT –i eth0 –p tcp —sport ۴۴۳ –m state —state ESTABLISHED –j ACCEPT
|
-
ایجاد امکانping از داخل به خارج
۱
۲
|
iptables –A OUTPUT –p icmp —icmp–type echo–request –j ACCEPT
iptables –A INPUT –p icmp —icmp–type echo–reply –j ACCEPT
|
-
ایجاد امکانping از خارج به داخل
۱
۲
|
iptables –A INPUT –p icmp —icmp–type echo–request –j ACCEPT
iptables –A OUTPUT –p icmp —icmp–type echo–reply –j ACCEPT
|
-
ایجاد امکان دسترسی loopback
۱
۲
|
iptables –A INPUT –i lo –j ACCEPT
iptables –A OUTPUT –o lo –j ACCEPT
|
-
ایجاد امکان دسترسی به شبکه خارجیeth1 از شبکه داخلی eth0
۱
|
iptables –A FORWARD –i eth0 –o eth1 –j ACCEPT
|
-
باز کردن دسترسی خروجی پورت dns
۱
۲
|
iptables –A OUTPUT –p udp –o eth0 —dport ۵۳ –j ACCEPT
iptables –A INPUT –p udp –i eth0 —sport ۵۳ –j ACCEPT
|
-
ذخیره تغییرات iptables
۱
|
service iptables save
|
آموزش iptables فایروال لینوکس + دستورات کاربردی و تنظیمات

آموزش تامین امنیت برای ستون های حیاتی وب سرور آپاچی
پنهان سازی نمایش ورژن اپاچی و سیستم عامل
آپاچی بصورت پیش فرض اطلاعاتی نظیر شماره نسخه نصب شده و برخی ماژول های خود را به همراه نام سیستم عامل سرور بر روی صفحات خطای وب نمایش می دهد.
نمایش اطلاعات آپاچی نا امن
این اطلاعات می تواند توسط هکر ها مورد استفاده قرار گیرد پس اولین کار لازم برای امنیت آپاچی حذف این اطلاعات می باشد .
برای حذف این اطلاعات ابتدا فایل کانفیگ آپاچی را در حالت ویرایش باز کنید :
توجه: این فایل می تواند به نسبت نسخه و نوع سیستم عامل در مسیر های مختلفی قرار داشته باشد .
۱
۲
|
# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache/apache2.conf (Debian/Ubuntu)
|
سپس سطری که با ServerSignature آغاز می شود را جستجو و پیدا کنید . این گزینه بصورت پیش فرش on (فعال) است که باید آن را به off تغییر دهید . همچنین در زیر آن در قسمت ServerTokens مقدارProd را قرار دهید تا کمترین اطلاعات از آپاچی در header پاسخ های سرور نمایش داده شود:
۱
۲
|
ServerSignature Off
ServerTokens Prod
|
پس از ذخیره فایل ویرایش شده سرویس آپاچی را restart کنید:
۱
۲
|
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)
|
از این پس در پاسخ به هیچ درخواستی اطلاعات مهم آپاچی نمایش داده نمی شود :
عدم نمایش اطلاعات در آپاچی امن
غیر فعال کردن امکان لیست شدن فایل ها (Directory browsing)
بصورت پیش فرض آپاچی فایل های داخل پوشه ها را در صورت عدم وجود فایل index لیست می کند . این کار می تواند خیلی خطرناک باشد چرا که در این صورت فایل های مهم و حساس مانند فایل های پشتیبان یا فایل های آپلودر و … در معرض دید هکرها قرار می گیرند و ممکن است مورد سوء استفاده قرار گیرند. همچنین معمولا این فایل ها توسط موتورهای جستجو شناسایی شده و ممکن است اطلاعات حساس سایت شما در اختیار عموم قرار گیرد و فاجعه بزرگی رخ دهد !
لیست شدن فایل ها در آپاچی ناامن
برای جلوگیری از این پیش آمد کافیست فایل httpd.conf را در حالت ویرایش باز کرده و کد های زیر را در انتهای آن قرار دهید:
۱
۲
۳
|
<Directory /var/www/html>
Options –Indexes
</Directory>
|
توجه : بجای /var/www/html باید مسیر اصلی هاست های سرور را قرار دهید ،بطور مثال /home
پس از اضافه کردن کد بالا سرویس اپاچی را restart کنید . از این پس دیگر فایل های سرور لیست نخواهند شد و بجای آن پیغام خطای ۴۰۳ نمایش داده می شود.
عدم نمایش لیست فایل ها در آپاچی امن
بروزرسانی آپاچی
با دستورات زیر می توانید سرویس آپاچی خود را بروزرسانی کنید :
۱
۲
|
# yum update httpd
# apt-get install apache2
|
حذف ماژول های غیر ضروری
ماژول ها می توانند عامل هک شدن سرور باشند برای کاهش دادن احتمال آسیب پذیری سرور خود سعی کنید ماژول های غیر ضروری و بلا استفاده آپاچی را غیر فعال کنید . برای نمایش لیست ماژول های فعال سرویس آپاچی از دستور زیر استفاده کنید :
۱
|
# grep LoadModule /etc/httpd/conf/httpd.conf
|
ماژول هایی مانند mod_imap, mod_include, mod_info, mod_userdir,mod_autoindex معمولا بلااستفاده هستند و غیرفعال کردن آنها پیشنهاد می شود.
برای غیر فعال کردن یک ماژول کافیست یک علامت # در ایتدای خط آن ماژول قرار داده و سرویس آپاچی را restart کنید .
اجرای آپاچی با یوزر و گروه اختصاصی
بصورت پیشفرض سروریس اپاچی پردازش های خود را بوسیله کابرnobody انجام می دهد . این امر از لحاظ امنیتی بسیار خطرناک است چرا که در صورتی که کاربری بتواند به این سطح دسترسی دست یابد می تواند به همه سایت های روی سرور نفوذ کند .
برای ایجاد نام کاربری و گروه با کمترین سطح دسترسی برای آپاچی دستورات زیر را اجرا کنید:
۱
۲
|
# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web
|
برای شناساندن نام کاربری http-web به آپاچی کافیست فایل httpd.vpng را در حالت ویرایش بازکرده user و group را جستجو کنید و نام کاربری فوق را در مقابل این دو قرار دهید :
۱
۲
|
User http–web
Group http–web
|
در آخر سرویس اپاچی را مجددا راه اندازی کنید .
جلوگیری از دسترسی کاربران به پوشه های حساس
برای جلوگیری از دسترسی کاربران به پوشه های حساس کد زیر را به فایل httpd.conf اضافه کنید :
بجای /web مسیر پوشه اصلی سایت ها را وارد کنید تا تنها این پوشه قابل رویت برای کاربران باشد.
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
|
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>
|
توجه : با غیرفعال کردن AllowOverride و Options اجازه تغییر این تنظیمات را به هکرها توسط فایل های htaccess نمی دهد.
نصب ماژول های mod_security و mod_evasive برای امنیت آپاچی
نصب و پیکرندی این ماژول ها بصورت جداگانه آموزش داده شده است .
غیر فعال کردن آپشن های symlinks , mod_include و CGI و …
دنبال کردن symlink ها یک ریسک بزرگ برای سرور شما می باشد چرا که هکر ها با استفاده از این قابلیت می توانند به سرور نفوذ کنند و فایل های حساسی که مجوز دسترسی به آنها را ندارند بخوانند !
برای غیر فعال کردن این قابلیت کد زیر را به فایل کانفیگ آپاچی اضافه کرده و سرویس را restart کنید:
۱
|
Options –FollowSymLinks
|
در صورتی که نیازی به mod_include و CGI ندارید بهتر است آنها را هم غیرفعال کنید :
۱
۲
|
Options –Includes
Options –ExecCGI
|
پرمیژن بندی فایل های آپاچی
مطمئن شوید تنها کاربر root به فایل های حساس آپاچی دسترسی دارد
۱
۲
|
# chown -R root:root /usr/local/apache
# chmod -R o-rwx /usr/local/apache
|
کاهش دادن زمان timeout جهت جلوگیری از عملیات DOS
فایل کانفیگ اپاچی را در حالت ویرایش باز کنید و مقدار timeout را ۴۵ ثانیه قرار دهید :
۱
|
Timeout ۴۵
|

۱۰ نکته جدایی ناپذیر برای امنیت وب سرور لینوکس
۱- از کلمات عبور پیچیده استفاده کنید
کلمات عبور ساده بزرگترین مشکل امینتی را برای سرور شما به وجود می آورند. داشتن کلمات عبور امن و پیچیده (چه برای خود سرور و چه برای کاربرانی که روی سرور قرار دارند) بسیار با اهمیت است.به عنوان مثال اگر کاربر شما ازکلمه ی عبور ی استفاده کند که به راحتی توسط هکر ها قابل حدث زدن باشد در وحله ی اول باعث deface شدن سایت خود شده و اعتبار شرکت شما رو زیر سوال می برد دوم ممکن است از طریق این سایت برای ارسال ویروس و هرزنامه استفاده بشه یا بویسله ی local exploit ها به بقیه سایت ها آسیب برسونه.
* شما می تونید با ویرایش تنظیمات مربوط به کلمات عبور در فایل /etc/login.defs بر اساس نوع کار شما با سرور و درجه ی امنیتی که برای خود در نظر می گیرید کاربران مجبور به داشتن کلمات عبور ایمن کنید.توضیحات کامل در مورد هر یک از پارامتر های فایل login.defs داخل خود فایل و در بالای هر کدام از پارامتر ها موجود می باشد.
معمولا کلمات عبور باید حداقل ۸ حرفی و شامل حرف – عدد و علائم باشند. هیچ وقت از کلمات معنی دار یا تاریخ های مهم استفاده نکنید. اگر می خواهید امن بودن کلمه عبور خود را بررسی کنید می تونید اون را با استفاده از این نرم افزار (http://www.openwall.com/john) تست کنید . اگر ظرف ? – ? ساعت کلمه عبور شما crack شد یعنی کلمه عبور شما امن نیست.
همین سایت یک ابزار دیگه برای بررسی طول کلمات عبور کاربران سرور ساخته است بوسیله ی (http://www.openwall.com/passwdqc) می توانید لیست کاربرانی که از کمات عبور نا امن استفاده میکنند را پیدا کنید و به آنها هشدار دهید .
?- پروتکل SSH شما Secure است؟
سعی کنید همیشه از برای ورود به سرور از public key authentication استفاده کنید وهیچ وقت دسترسی SSH را برای عموم باز نگذارید. اگر از puttyاستفاده می کنید می توانید نرم افزار putty agent را نصب کرده و key های SSH خود را مدیریت کنید.
همیشه پورت SSH را عوض کنید .معمولا طرف ابتدا به دنبال پورت ۲۲ می گرده و اگر اطلاعات کافی در مورد سرور شما نداشته باشه از دسترسی به ssh نا امید خواهد شد . لذا هیچ وقت ssh را روی پورت ۲۲ باز نگذارید. می توانید پورت ssh را از طریق ویرایش فایل etc/ssh/sshd_config به یک پورت باز دیگر مثلا ???? تغییر دهید. port 1654
از پروتکل ۲ استفاده کنید . اگر از putty استفاده می کنید این نرم افزار قابلیت پشتیبانی از هر دو پروتکل را دارست پس نگرانی وجود ندارد . در همین فایل etc/ssh/sshd_config می توانید خط Protocol 2. را تایپ کنید.
در اکثر سیستم های لینوکس میتوانید محدودیت هایی را روی دستری های shell اعمال کنید . با استفاده از تنظیماتی که در /etc/security/limits.conf وجود دارد می توانید محدودیت های بسیار جالب را برای تک تک کاربران shell ایجاد کنیدتا استفاده ی نابجای آنها با استفاده وارد آوردن فشار بیش از حد به سرور شما و down شدن آن نشود .
۳- وب سرور خود را secure کنید
مهمترین قسمتی که با عموم کاربران در ارتباط است و بیشتر مورد حمله و نفوذ قرار می گیرد همان webserver است .
یکی از بهترین ماژول هایی که برای جلوگیری از استفاده ی نابجا از وب سرور استفاده می شود mod_security است که در همین وب لاگ بار ها در موردش صحبت کردیم. البته خود اون فقط یک ابزاره و بقیش برمیگرده به هنر مدیر سرور در طراحی یک سری rule مناسب مخصوص اون سرور برای اطلاعات بیشتر به سایت هایhttp://www.modsecurity.org و http://www.gotroot.com سر بزنید.
توجه کنید که همیشه موقع compile کردن apache گزینه ی suexec حتما فعال باشد. فعال کردن این گزینه به معنی اجرا شدن اسکریپت های CGI تحت owner خود (مالک فایل) می باشد. این گزینه باعث جلوگیری از دسترسی فایل های CGI به فایل های سیستم میشه و همچنین برای جلوگیری از فایل هایی که باعث در سرور می شود بسیار مناسب است.
همچنین بعضی ها اعتقاد داند که باید PHPsuexec هم روی سرور فعال باشه این گزینه باعث میشه که فایل های php هم تحت کاربر خودشون اجرا بشن و با عث بالا بردن امنیت فایل های سیستمی و جلوگیری از استفاده نا بجا از این گونه اسکریپت ها میشه .
می تونید apache رو بوسیله ی دستور /scripts/easyapach که به شما محیط نیمه گرافیکی میده یا با استفاده از خود whm که محیط کاملا گرافیکی داره compile کنید.
با استفاد از فعال کردن گزینه ی open_basedir در قسمت Tweak Security در WHM دسترسی کاربران را از مشاهده ی فایل هایی که خارج پوشه ی مربوط به خودشون هست بگیرید.
اگر خیلی از امنیت سرور خود حراس دارید و نمی توانید تک تک دسترسی ها مسدود کنید می توانید به راحتی در فایل php.ini گزینه ی safe mode را فعال کنید . Safe_mode=on این گزینه هر لحظه چکمیکنه که آیا کسیکه داره این فایل رو اجرا میکنه مالک اون قسمتهست یا نه و خیلی دستورات را خود به خود مسدود میکنه . و راحت ترین راه برای بستن دسترسی های اضافی روی سروره . البته باید گم که با فعال کردن این گزینه حدود ۶۰ درصد از scriptها و کاربران به مشکل برمی خورند.
۴– پارتیشن tmp را secure کنید
بله . مخصوصا گفتم پارتیشن چون بعضی ها اصلا براش partision نمی سازند . البته اگر سرورتون را از یک دیتا سنتر درست حسابی گرفته باشید خودشون موقع نصب سیتم عامل این کار رو انجام میدن.
ولی بازهم کافی نیست در قسمت fstab سیستم باید tmp حتما با گزینه ی nosetuid بسازید یا به اصطلاح mount کنید. این گزینه باعث میشه که تک تک proccess ها با سطح دسترسی executor اجرا شوند .این سطوح دسترسی قبلا در کرنل لینوکس تعریف شده. همچنین بعد از نصب cpanel می توانید گزینه ی noexec رو هم فعال کنید. این گزینه باعث میشه که هیچ فایل اجرایی داخل tmp اجازه ی اجرا شدن نداشته باشه . بعد از اینکه این کار و انجام دادید بوسیله script از پیش آماده ی خود cpanel در آدرس /scripts/securetmp برای پارتیشن tmp خود یک symlink یا شبه لینک به /var/tmp بسازید این خودش برای حفظ امنیت tmp موثره .
۵- غیر فعال کردن compiler ها برای کاربران دیگر
۹۹ درصد کاربران نمی دونن compiler ها روی هاست به چه درد می خوه و اصلا استفاده ای از اونها ندارند پس چه بهتره برای همه ی کاربرانی که استفاده ندارند اون رو disable کنید . این کار رو می تونید در whm در قسمتCompilers Tweak انجام بدید . اکثر باگ های امینتی کشف شده نیار دارند تا همون موقع روی سرور compile بشن با غیر فعال کردن اون حال بسیاری از هکر ها رو میگیرید.
۶- از maildir به جای mailbox استفاده کنید
ما دونوع ذخیره سازی روی لینوکس داریم برای ایمیل ها . اولی به صورت mail box هست و دومی maildir که گزینه ی دوم بسیار از لحاظ امنیتی بهتره و باعث افزایش سرعت میل سرورتون هم میشه . البته در نسخه ی جدید cpanel به صورت پیش فرض maildir نصب میکنه ولی اگر سرورتون بیش از یک سال عمر داره و روش خاک نشسته بهتره همین حالا به maildir ارتقا بدید. قبلش از اطلاعاتتون backup بگیرید . بنده هیچ مسئولیتی در قبل از دست دادن اونها ندارم . می تونید از پشتیبانی دیتا سنترتون بخواید تا این کار رو انجام بده.
۷- سرویس های اضافی(services and daemons) را غیر فعال کنید
هر سرویس که روی سرور شما فعال باشه و به دیگران اجازه ی وصل شدن به اون وگرفتن اطلاعات به کاربران میده دارای باگ امینتی هست و اگر از اون استفاده نمی کنید باید اون رو ببندیدش . خود لینوکس هم یک سری سرویس های زائد(daemons) داره که برای یک سریس دهنده ی وب نیازی به اونها نیست .
سرویس های رو می تونید در /etc/xinetd.con ویرایش کنید .برای مثال سیستم اشتراک فایل (nfs/statd) یا سیستم مدیریت پرینت (cupsd) و خیلی daemonهای دیگه که توی آموزش مختصر مثل این نمی گنجه همش روبگم. از داخل whm در قسمت Service Manager می تونید سرویس هایی که نیار ندارید رو غیر فعال کنید . مثلا اگر از chat server خود cpanel استفاده نمی کنید اون رو غیر فعالش کنید چون خودش باعث مشکلاتی امنیتی خواهد شد .
این بخش از مهمترین کار هایی که باید یک مدیر سرور انجام بده .
۸- سرور خود را تحت کنترل داشته باشید یا مانیتور کنید
یک ادمین سرور باید به صورت ۲۴ ساعته کلیه قسمت های سرور (نرم افزار ها – فایل های کاربران و …) را تحت کنترل داشته باشد
اینکه نرم افزار های مورد استفاده روی سرور بروز هستند یا خیر و خیلی مسائل دیگر بسیار مهم هستند که این امر فقط با بررسی مداوم و سرکشی به صورت روزانه روی سرور ها عملی است.
البته می توانید حداقل ۹۰ درصد این کار ها را با نوشتن script های دلخواه انجام دهید و شما فقط لوگ های مربوطه را چک کنید و فقط در مواقع ضروری روی سرور لوگین کنید . در این جا برخی از command های پر استفاده رو در این ضمینه ارائه می کنم:
netstat -anp : لیست کلیه connection های باز سرور را به شما می دهد تا به دنبال پورت ها یا نرم افزار های مشکوکی که روی سرور run هستند ولی شما اجاره اجرا شدن به انها نداده اید مشاهده کنید و در صورت لزوم بوسیله firewall دسترسی انها را مسدود کنید.
find / \( -perm -a+w \) ! -type l >> world_writable.txt : این دستور لیست کلیه فایل هایی را که permission 777 دارند و توسط کلیه کاربران روی سرور قابلیت ویرایش دارند را به شما نشان میدهد (داخل فایل txtذخیره می کند) اکثر مشکلات امینی داخل همین فولدر ها اتفاق می افتد.
ls /var/log/ : اکثر لوگ فایل ها داخل پوشه var هستند شما در صورت نیاز به لوگی از از هر سرویس خاصیمی توانید در این فولدر به آن مراجعه کنید (البته لوگ های apache در فولدر /usr/local/apache/logs هست)
در کنار تمامی موارد script های زیادی هستندکه به شما در این کار ها کمک می کنند . البته چیزی که بر حسب نیاز خودتون برای خودتون بنویسید مسلما یک چیز دیگس. یک سری برنامه ها اسمشون رو می نویسم که به درد می خورند .
* Tripwire – این نرم افزاری هست که md5 کلیه فایل های مربوط به سیستم را چک می کنه و در صورتی که این فایل ها تغییر کند به شما هشدار می دهد.
http://tripwire.com or http://sourceforge.net/projects/tripwire
* Chrookit – نرم افزاری برای پیدا کردن trojan – backdoor و غیره بر روی سرور.
http://www.chkrootkit.org
* Rkhunter – نرم افزاری برای پیدا کردن trojan – backdoor و غیره بر روی سرور.
http://www.rootkit.nl/projects/rootkit_hunter.html
* Logwatch – نرم افزاری برای بررسی لوگ ها و فعالیت های سرور به صورت روزانه و تهیه گزارش کامل برای شما
http://logwatch.org
۹- حتما یک firewall نرم افزاری داشته باشید !!
اگر firewall سخت افزاری هم دارید باید یک فایروال جداگانه روی سرور داشته باشید .
با استفاده از firewall می تونید لیست پورت هایی که استفاده نمی شوند رو محدود کنید و با این کار حجم زیادی از نرم افزار های backdoor و … را از کار بیاندازید . همچنین با استفاده از firewall می توانید ادرس های ip خاصی را block کنید و حتی در مقابل حملات ddos اسیب ناپذیر باشید.
در زیر لیست پورت های مورد نیاز cpanel امده است( اگر سرویس دیگری ندارید می توانید بقیه پورت ها را به غیر از این ها ببندید . چون نیازی به انها ندارید ) : http://faq.cpanel.net/show.cgi?qa=10468918040763
بهترین firewall از نظر من روی cpanel هم نصب میشه و خوب جواب میده همون APF هست که با rule های خود لینوکس iptables کار می کنه.
اگر شما هم با این نرم افزار کار می کنید اینجا رو مطالعه کنید : http://faq.cpanel.net/show.cgi?qa=108499296901804
۱۰ – همیشه بروز باشید
۸۰ در صد مشکلات امینتی در روز های اول عمرشون براشون patch و update امنیتی میاد یعنی یک bug هرچقدر هم که underground باشد بالاخره براش patch نوشته می شود پس سعی کنید که همیشه از آخرین نسخه های نرم افزار استفاده کنید . نسخه ی کرنل حداقل هر ۲ ماه یک بار باید بروز بشه بقیه نرم افزار ها باید هر هفته چک بشن و در صورت لزوم update بشوند. خود cpanel باید هر روز updateشود به دلیل اینکه هر روز شرکت سی پنل به روز می شود .

۱۰ نکته بسیار مهم که باید در تامین امنیت وب سایت ها در نظر گرفته شود
بر خلاف تصور عموم، هدف اکثر رخنه های امنیتی انجام شده نه سرقت اطلاعات شما و یا از دسترس خارج نمودن وب سایت بلکه سوء استفاده از وب سرور در جهت منافع هکر ها می باشد. در برخی از موارد هکر ها سعی دارند با استفاده از وب سرور شما یک سیستم Email Relay راه اندازی کرده و اقدام به ارسال ایمیل های انبوه تبلیغاتی نمایند و در برخی دیگر از مواقع نیز از سرور شما به عنوان یک منبع فایل سرور برای بارگذاری فایل های آلوده و غیر قانونی خود استفاده می کنند. چنین هک هایی معمولا به صورت اتوماتیک و توسط اسکریپت های از قبل آماده شده ای انجام می شوند. اسکریپت های مذکور تمامی اینترنت را برای یافتن سایت هایی با حفره های امنیتی تعریف شده، جستجو کرده تا هدف نهایی خود را پیدا کنند. در این مقاله به شرح ۱۰ نکته مفید برای حفظ امنیت وب سایت خواهیم پرداخت.
۱ – نرم افزارهای خود را همواره بروز نگه دارید !
این موضوع ممکن است به وضوح برای همگان آشکار باشد، اما تاکید آن نیز خالی از لطف نیست چرا که به روز نگهداری تمامی نرم افزارهای مورد استفاده برای حفظ امنیت وب سایت کاملا حیاتی می باشد. این موضوع هم برای سیستم عامل سرور میزبان و هم برای نرم افزارهای مورد استفاده در وب سایت مانند CMS ها یا Forum ها صادق است. زمانی که حفره های امنیتی هرچند کوچک در یک نرم افزار پدید آیند، هکر ها به سرعت با سوء استفاده از آن ها به سرور یا سایت شما رخنه می کنند. لذا تمامی سازنده های نرم افزار در دنیا سعی می کنند تا حفره های امنیتی موجود در محصولات خود را با ارایه بسته های بروز رسانی به کاربران برطرف سازند و به مرور زمان نرم افزار خود را در مقابل نفوذهای امنیتی مقاوم تر کنند.
البته در صورتیکه از راهکارهای میزبانی مدیریت شده استفاده می کنید، نیازی به نگرانی برای بروز رسانی مداوم نرم افزارهای خود ندارید، زیرا شرکت ارایه دهنده میزبانی شما تمامی موارد امنیتی لازم را برای نگهداری از سرویس شما به کار می برد.
اگر از نرم افزارهای ثالث (Third Party) مانند CMS ها و Forum ها برای مدیریت وب سایت خود استفاده می کنید، حتما از نصب آخرین بسته های بروز رسانی و Patch های امنیتی برای نرم افزارهای خود اطمینان حاصل نمایید. اکثر تولید کنندگان نرم افزار دنیا دارای لیست ایمیل یا خبرنامه های RSS هستند که آخرین اخبار خود مبنی بر ارایه Patch های امنیتی را به این طریق منتشر کنند. اکثر CMS ها نیز مانند WordPress شما را از وجود نسخه های جدید در پیشخوان مدیریتی خود آگاه می سازد.
۲ – SQL Injection
حملات SQL Injection زمانی رخ می دهند که افراد هکر از پارامترهای URL با فرم تحت وب برای دسترسی به دیتابیس شما استفاده کنند. زمانی که شما از قالب استاندارد Transact SQL استفاده می کنید، افزودن کدهای مخرب و سارق در بین کدهای شما به سادگی توسط هکرها امکان پذیر خواهد بود. این افراد با افزودن چنین کدهایی می توانند جداول شما را تغییر دهند، اطلاعات دیتابیس شما را دریافت کنند و یا برخی اطلاعات حیاتی شما را حذف نمایند. اما شما به راحتی می توانید از بروز چنین اتفاقاتی با استفاده از کوئری های پارامتردار جلوگیری نمایید. اکثر زبان های برنامه نویسی وب از این قابلیت پشتیبانی نموده و انجام آن نیز به راحتی امکان پذیر می باشد.
کوئری زیر را در نظر بگیرید :
کد:
۱٫”SELECT *FROM table WHERE column = ‘” + parameter + “;”
اگر هکر بخواهد پارامتر URL شما را به نحوی تغییر دهد که عبارت ‘or’ ۱′=’۱ بازگدانی شود، آنگاه کوئری مذکور به شکل زیر تغییر شکل خواهد داد :
کد:
۱٫ “SELECT” *FROM table WHERE column = ” OR ’۱′=’۱; “
از آنجا که ’۱′ با مقدار ’۱′ برابر می باشد، آنگاه این تعریف به هکر اجازه می دهد تا کوئری اضافه ای را در انتهای عبارت SQL شما بیافزاید و آن را اجرا نماید.
۳ – XSS
عملیات Cross site scripting به زمانی گفته می شود که فرد حمله کننده سعی کند تا با اضافه نمودن کدهای اسکریپت JavaScript به فرم وب، کدهای مخرب خود را برای بازدیدکنندهای وب سایت شما اجرا نماید. بنابراین در هنگام طراحی و ساخت فرمهای خود همیشه مطمئن شوید تا اطلاعات خود را به درستی کدگذاری کرده و ارسال نمایید و تا جای ممکن از ارسال کدهای ساده HTML جلوگیری نمایید.
۴- پیغام های خطا
همواره دقت کنید که پیغام های خطای وب سایت شما چه اطلاعاتی را به کاربران ارایه می دهند. برای مثال اگر در وب سایت خود از یک فرم لاگین برای ورود به قسمت مدیریت استفاده می کنید، توجه نمایید که در صورت اشتباه وارد کردن اطلاعات کاربری، پیغام های خطای ساده ای مانند “نام کاربری یا رمز عبور اشتباه است” به کاربر نمایش داده شود. هرگز در پیغام های خطای خود دقیقا مشخص نکنید که چه بخشی از اطلاعات نادرست است زیرا از آن طریق، کار را برای هکرهایی که سعی در پیدا کردن این اطلاعات دارند، بسیار آسان تر خواهید نمود. برای مثال فرض کنید هکر سعی می کند تا انجام عملیات Bruteforce نام کاربری و پسورد مدیریت سایت شما را به دست آورد. پس از چندین بار تلاش، او می تواند از پیغام خطای نمایش داده شده، متوجه شود که نام کاربری را به درستی حدس زده و تنها رمز عبور را اشتباه وارد می کند، لذا از این پس می تواند تمام تمرکز خود را برای یافتن پسورد گذاشته و در مدت زمان کوتاه تری اطلاعات محرمانه شما را به سرقت ببرد.
پیغام های خطای خود را به صورت مبهم نمایش دهید
۵ – اعتبار سنجی سمت سرور و اعتبار سنجی فرم ها (Server side/Form Validation)
عملیات اعتبار سنجی در وب سایت ها همیشه باید در هردو سمت مرورگر و سرور انجام شود. مرورگر قادر است تا برخی از اشتباهات ساده و رایج مانند عدم وارد کردن اطلاعات در فیلدهای ضروری یا وارد کردن متن در فیلد شماره تلفن را شناسایی و به کاربر اعلام نماید. البته چنین اعتبارسنجی هایی ممکن است کنار گذاشته شوند، اما توصیه می شود تا شما نیز تمام مواردی از این دست را توسط مرورگر اعتبار سنجی کرده و تایید اعتبار موارد پیچیده تر مانند توقف عملیات به دلیل وجود کدهای مخرب وارد شدن اسکریپت های اضافی به دیتابیس یا وجود احتمال بروز نتایج نامناسب در برنامه را بر عهده سرور قرار دهید.
۶ – رمز های عبور
تقریبا همه می دانند که باید از پسوردهای پیچیده استفاده کنند اما متاسفانه اطلاع آن ها از این مورد به این معنا نیست که در عمل نیز همیشه آن را رعایت می کنند. انتخاب رمز های عبور پیچیده و طولانی برای قسمت های مدیریتی سرور و وب سایت، امری کاملا حیاتی است. اما همچنین باید با تمرین کاربران معمولی برای انتخاب پسوردهای مناسب نیز به حفظ امنیت حساب های کاربری آن ها کمک نمود.
ممکن است کاربران عادی شما از اعمال چنین قوانین سخت گیرانه ای چندان خشنود نشوند اما اعمال قوانینی مانند الزام به انتخاب پسوردهایی با حداقل هشت کاراکتر و تشکیل شده از حروف بزرگ و کوچک انگلیسی، اعداد و نشانه ها می تواند کمک بسزایی در افزایش ضریب امنیتی حساب های کاربران نماید.
پسوردهای انتخاب شده برای تمامی حساب ها باید با مقادیر کدگذاری شده در پایگاه های داده نگهداری شوند. برای مثال می توانید پسوردهای خود را الگوریتم hashing مانند SHA ذخیره نمایید. با استفاده از این الگوریتم، در هر بار که کاربر پسورد خود را برای ورود به سیستم وارد می کند، در واقع تنها مقادیر کدشده بین کاربر و سرور جابجا می شوند و ردیابی آن ها به سادگی امکان پذیر نخواهد بود. همچنین می توان برای امنیت بیشتر سیستم احراز هویت از روش Salt نمودن پسوردها نیز استفاده کرد. روش Salt در هنگام ذخیره پسورد در پایگاه داده، مقدار رشته ای تصادفی را به آن اضافه خواهد کرد و در واقع رمز عبور کاربر را با کاراکترهای دیگر ترکیب کرده و سپس آن را ذخیره می کند. با استفاده از الگوریتم کدگذاری SHA و همچنین روش Salt به صورت ترکیبی می توان، از امنیت در ذخیره پسوردها اطمینان حاصل نمود. با این روش، حتی در صورتیکه هکرها به دیتابیس شما SQL Injection نیز نمایند، بازهم قادر به دستیابی به رمزهای عبور نیستند. همچنین برای حدس زدن و یافتن چنین پسوردهای حفاظت شده ای از طریق حملات Bruteforce نیز هکر ها به زمان بسیار زیاد و تجهیزات بسیار گران قیمتی نیازمندند.
خوشبختانه بسیاری از نرم افزارهای مدیریت محتوا با ارایه چنین راهکارهای امنیتی در هسته خود، امنیت لازم در بخش ورود کاربران به بخش مدیریت را فراهم نموده اند گرچه در برخی از آن ها نیز لازم است با استفاده از افزونه های موجود یا ماژول های امنیتی (مانند نرم افزار Drupal 7) مواردی مانند حداقل کاراکترهای لازم برای پسورد و عملیات Salt کردن پسوردها را به صورت دستی تنظیم نمود. همچنین در صورتی که از .Net برای طراحی وب سایت خود استفاده می کنید نیز می توانید با بهره گیری از Membership Provider ها موارد امنیتی بسیاری را تنظیم و امنیت برنامه خود را افزایش دهید.
۷ – آپلود فایل ها
ارایه دسترسی به کاربران برای آپلود فایل در سرور می تواند کاری بسیار ریسک پذیر باشد. گرچه در برخی از موارد ممکن است این امکان ساده برای تغییر تصویر پروفایل کاربر نیاز باشد. خطر موجود در این امکان از آنجاست که هر فایل آپلود شده، گرچه به نظر ساده باشد، اما ممکن است اسکریپت های مخربی را شامل شود که با اجرای آن ها در سرور، درهای وب سایت شما بر روی هکر ها بازگردد و اطلاعات محرمانه شما در معرض سرقت قرار گیرند.
بنابراین در صورتیکه ناچارید تا در وب سایت خود از فرم آپلود فایل استفاده نمایید، آنگاه باید تمامی فایل های آپلود شده را به دقت زیرنظر گرفته و بازرسی کنید. در صورتیکه قصد دارید تا به کاربران تنها امکان آپلود تصویر برای پروفایل های خود را اعطا کنید، نمی توانید برای کنترل فایل ها تنها به محدودسازی فرمت فایل ها یا استفاده از MIME Type ها اکتفا کنید زیرا چنین مواردی به سادگی قابل جعل می باشند. حتی روش هایی مانند باز نمودن و خواند هدر فایل ها، یا استفاده از توابعی که سایز تصویر را بررسی می کنند نیز نمی توانند به صورت کامل قابل اعتماد باشند. اکثر فرمت های تصویری دارای قسمتی برای ذخیره نظریه (Comment) هستند که هکر ها می توانند با اضافه کردن کدهای PHP خود در این قسمت و آپلود تصویر مذکور، اسکریپت های مخرب خود را بر روی سرور شما به اجرا درآورند.
بنابراین شما باید به هر نحو ممکن کاربران را از اجرای هر فایلی بر روی سرور منع نمایید. البته وب سرورها معمولا فایل های دارای فرمت تصویری را اجرا نمی کنند اما در برخی از موارد دیده شده فایلی با نام Image.jpg.php به عنوان تصویر شناخته شده و اجازه آپلود آن نیز صادر گشته است اما پس از آپلود شدن در سرور به اجرا درآمده و کدهای مخرب محتوای فایل نیز عملیات خود را آغاز نموده اند.
یکی از راه های بررسی موارد این چنینی، تغییر نام تمامی فایل ها برای اطمینان از فرمت آن هاست. همچنین در سیستم عامل لینوکس می توان با تغییر سطح دسترسی محل ذخیره سازی فایل های آپلود شده به ۰۶۶۶ از اجرای آن ها جلوگیری کرد. همچنین می توان با ساخت فایل .htaccess با محتوای زیر در سیستم عامل های لینوکس از اجرای فایل هایی که دو پسوند دارند (مانند مثال image.jpg.php) ممانعت به عمل آورد.
کد:
Deny from all
<files ~ “^w+.(gif|jpe?gpng)$”>
Order deny,allow
Allow from all
</files>
اما راه حل نهایی و قطعی که برای اطمینان از سلامت فایل های آپلود شده توصیه می شود، جلوگیری از دسترسی مستقیم به تمام فایل های آپلود شده توسط کاربر می باشد. با این روش تمامی فایل های آپلود شده در پوشه ای خارج Webroot وب سایت یا در دیتابیس و به عنوان Blob ذخیره می گردند. در صورتیکه فایل های شما به صورت مستقیم قابل دسترس نباشند، آنگاه ناچارید تا با ایجاد اسکریپت هایی، آن ها را از پوشه ای خصوصی جمع آوری کرده (یا با استفاده از HTTP Handler در .Net) و سپس به مرورگر ، برای نمایش ارایه دهید. تگ های موجود در تصاویر از قابلیتی به نام Src پشتیبانی می کند که نیازی به اشاره مستقیم به یک URL برای یک تصویر ندارد. بنابراین می توانید در تگ Src، به جایURL مستقیم فایل عکس، آدرس اسکریپت خود که وظیفه پیدا نمودن تصاویر از پوشه خصوصی را دارد را وارد نمایید و سپس تنظیمات لازم را نیز در هدر HTTP انجام داده تا تصاویر به درستی نمایش داده شوند.
برای مثال :
کد:
<img src=”/imageDelivery.php?id=1234″/>