در این آموزش قصد داریم نحوه نصب و کانفیگ حرفه ای فایروال CSF در لینوکس را به شما آموزش دهیم  این کانفیگ برای سرور های مجازی و سرور های اختصاصی معتبر می باشد.

نحوه نصب فایروال CSF

ابتدا از طریق putty وارد سرور لینوکسی خود شوید ، سپس دستورات زیر را یکی یکی کپی کرده و منتظر بمانید تا پروسه آن به پایان رسد

wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

سپس برای تست ماژول های iptables مورد نیاز csf دستور زیر را وارد کنید :

perl /usr/local/csf/bin/csftest.pl

شما نباید از فایروال های دیگر در سرور خود استفاده نمایید تا تداخل ایجاد نشود ، برای مثال اگر شما قبلا از APF+BFD استفاده کرده اید باید آنها را با دستور زیر حذف کنید در غیر این صورت تداخل ایجاد خواهد شد :

sh /usr/local/csf/bin/remove_apf_bfd.sh

فایل پیکربندی فایروال csf در مسیر زیر می باشد :

/etc/csf/csf.conf

شما می توانید با رابط گرافیکی خود csf از سی پنل و دایرکت ادمین خود به این فایل دسترسی پیدا کنید و آن را ویرایش کنید و یا از دستور nano برای ویرایش آن استفاده کنید.

در کنترل پنل های سی پنل و دایرکت ادمین پس از نصب فایروال csf به طور خودکار تمام پورت های پیش فرض استاندارد در فایروال باز خواهد شد.

csf در هنگام نصب به طور خودکار پورت ssh شما را وارد لیست پورت های باز خواهد کرد.

شما باید اطمینان پیدا کنید که klogd در کرنل شما فعال باشد ، به طور مثال klogd در سرور های مجازی رد هت یا centos ورژن ۵ به طور پیش فرض غیر فعال است که با ویرایش فایل /etc/init.d/syslog آن را فعال کنید و اطمینان پیدا کنید که هر خط klogd به صورت comment نباشد ( در صورت استفاده از # در فایل تنظیم غیر فعال خواهد شد) اگر شما روی این فایل تغییر ایجاد کردید پس از آن حتما syslog را ری استارت کنید.

/etc/rc.d/init.d/syslog restart

توجه : قبل از ایجاد هر تغییری از تنظیمات فعلی این سایت حتما پشتیبان تهیه کنید.

پس از نصب باید از صحت عملکرد فایروال در سرور مطلع شوید، زیرا فایروال برای اینکه بدرستی کار کند، در هسته مرکزی لینوکس نیاز به برخی از ماژول‌ها دارد و برای تست این موضوع می‌توانید دستور زیر را اجرا نمایید:

# perl /etc/csf/csftest.pl
Testing ip_tables/iptable_filter…OK
Testing ipt_LOG…OK
Testing ipt_multiport/xt_multiport…OK
Testing ipt_REJECT…OK
Testing ipt_state/xt_state…OK
Testing ipt_limit/xt_limit…OK
Testing ipt_recent…OK
Testing ipt_owner…OK
Testing iptable_nat/ipt_REDIRECT…OK
RESULT: csf should function on this server
Looks 100% OK.

در صورتی که تمامی موارد ok بود و پیغام csf should function on this server مشاهده شد، یعنی فایروال درست کار می‌کند.

هم اکنون کانفیگ CSF رو شروع میکنیم.

اولین گزینه که در csf.conf هست مربوط میشه به حالت فعال بودن آزمایشی یا آماده به کار

TESTING = “۰″

در این جا ما دو تا حالت داریم یکی صفر و یکی “یک” که اگه یک قرار بدیم مثل این میمونه که ما اصلا CSF رو نصب نکردیم و اگر ۰ قرار بدیم CSF فعال میشه پس ما صفر رو انتخاب میکنیم و میریم سراغ کانفیگ بعدی.

این مرحله مربوط میشه به مدت زمان بین چک کردن رول های خود CSF که بر حسب دقیقه هست در واقع یه Cron هست و CSF رو استارت میکنه

TESTING_INTERVAL = “۱″

و میتونه بین ۱ تا ۵ دقیقه باشه توصیه میشه روی ۱ قرار بدید چون هرچه مدت زمان بین چک کردن رول ها کمتر باشه بهتر است

AUTO_UPDATES = “۰″

این گزینه همون طور که از اسمش پیدا هست وظیفش اینه که به طورت اتوماتیک خودش رو آپدیت نگه داره که اگه “یک” قرار بدید غیر فعال میشه و خودش رو آپدیت نمیکنه ولی اگه “صفر” قرار بدید CSF به صورت اتوماتیک خودش رو آپدیت میکنه پس بهترین گزینه برای این کانفیگ ست کردن صفر هست چون ممکنه باگی توی CSF پیدا بشه و شما متوجه نشید برا همین ۰ انتخاب میکنیم

ETH_DEVICE = “eth0,eth1″

CSF به صورت اتوماتیک بر روی تمام کارت شبکه های سرور شما رول ها رو اعمال میکنه پس اگه خالی گذاشتید تمام کارت های شبکه شما پشت فایروال قرار میگیره ولی بعضی وقت ها ممکنه تعداد کارت های شبکه سرور شما چند تا باشه که شما میخواید فقط تعدادی از اون ها پشت CSF باشه برا همین توی این کانفیگ اون ها رو مشخص میکنیم و با علامت “,” از هم دیگه جداشون میکنیم .

ETH_DEVICE_SKIP = “eth2,eth3″

این کانفیگ همون طور که از اسمش پیدا هست میتونید اون کارت شبکه هایی که نمیخواید پشت فایروال قرار بگیره رو قرار بدید در واقع آزاد باشه

خوب حالا میخوایم بریم سراغ یه سری تنظیمات که خیلی مهم هست در واقع مدیریت پورت های سرور هست پس مواظب باشید دارید چه پورتی رو باز میزارید و چه پورتی رو میبندید

TCP_IN = “۲۰,۲۵,۵۳,۸۰,۱۱۰,۴۶۵″

توجه داشته باشید چنانچه از کنترل پنل استفاده میکنید پورت ها مربوط به کنترل پنل رو اینجا اضافه بکنید.

همون طور که از اسمش پیدا هست پورت هایی رو میتونید اینجا باز کنید که از بیرون از سرور به سرور دسترسی داشته باشند در واقع پورت هایی که اجازه ورود به سرور رو دارند شما اگه نمیدونید چه پورتی برای چه کاری هست بهتر هست به تاپیک معرفی پورت ها یه سری بزنید و و ببینید چه پورتی برای چه کاری هست اینجا دیگه بستگی به شما داره که چه سرویس هایی روی سرور خودتون دارید و از چه پورت هایی دارید استفاده میکنید

کانفیگ بعدی مربوط میشه به :

TCP_OUT = “۲۰,۲۱,۲۲,۲۵,۳۷,۴۳,۵۳,۸۰,۱۱۰″

این کانفیگ هم مربوط میشه به پورت هایی که از سرور به بیرون باز باشد در واقع پورت هایی که از توی سرور به بیرون از سرور باز باشه خوب حالا این ها مربوط میشه به TCP پورت که با UDP تفاوت داره اشتباهی نگیرید.

حالا میریم سراغ پورت های UDP

که UDP_IN پورت های UDP از بیرون به داخل رو باز میکنه

UDP_IN = “۵۳″

در مورد UDP_OUT پورت های UDP از داخل سرور به بیرون میخواید باز باشه

UDP_OUT = “۲۰,۲۱,۵۳,۱۱۳,۱۲۳,۸۷۳,۶۲۷۷″

وقتی پورت ها کانفیگ کردیم میریم سراغ پروتکول ICMP که این هم بستگی به افراد داره بعضی وقت ها افراد دوست دارند باز باشه این رو فعال می کنند بعضی ها هم نه و میبندند ولی در صورت باز بودن میتونند یه سری حملات روی سرور داشته باشند راستش اگه در سطح سرور بسته هم بشه و حمله فوی باشه فایده ایی نداره ولی اگه بسته باشه بهتر هست
پس در کانفیگ زیر که ICMP رو از بیرون به داخل کانفیک میکنه :

ICMP_IN = “۰″

اگر عدد “یک” رو بزاریم ICMP باز است و میتونند پینگ کنند و شما Rate آین هم معلوم میکنید ولی اگه ۰ باشه که کلا بسته میشه برای تنظیم Rate اون هم کانفیگ زیر رو ادیت میکنیم عموما ۱ در ثانیه ست میکنند

ICMP_IN_RATE = “۱/s”

شاید شما دوست داشتید ۲ یا … بیشتر بزارید
حالا میریم سراغ باز یا بستم ICMP از داخل سرور به بیرون که باز بزارید کاریش نداشته باشید چون سرویس های شما قطعا نیاز داره

ICMP_OUT = “۱″
ICMP_OUT_RATE = “۰″

اگر دقت کرده باشید من ICMP_OUT_RATE رو عدد ۰ گذاشتم به معنی بی نهایت هست یا نا محدود

SMTP_BLOCK = “۱″

همون طور که از اسمش پیدا هست در مورد SMTP هست , که این کانفیگ ایمیل هایی که غیر از یوزر روت با SMTP میخواد فرستاده بشه ، بلاک میکنه . در سرور های هاستینگ اصلا توصیه نمیشه چون SMTP تمام یوزر ها رو میبنده اگه سروری دارید که هاستینگ هست گزینه ۱ رو انتخاب کنید . اگه سروری دارید که اصلا سیستم میل استفاده نمیشه ۰ رو انتخاب کنید

SMTP_ALLOWLOCAL = “۱″

اگر SMTP_BLOCK فعال کرده باشید این گزینه اجازه میده تنها از روی خود سرور توسط SMTP ایمیل فرستاده بشه یعنی اگه با Localhost فرستاده شد اجازه خروج از سرور رو بده غیر از این مثلا اگه از بیرون وصل شدند و خواستند SMTP ایمیل یزندد بلاک کنه اگر شما گزینه صفر رو انتخاب کنید تنها از روی خود سرور اجازه فرستادن ایمیل با SMTP داده میشه و اگر ۱ اصلا غیر فعال میشه

SMTP_PORTS = “۲۵″

این گزینه مربوط به پورتی هست که شما تنظیم کردید SMTP باهاش کار کنه که بیشتر موارد ۲۵ هست

DROP = “DROP”

همون طور که میدونید IPTABLES دو مدل برای دفع پاکت ها داره یکی Drop که پاکت ها از اسمش معلومه ریزش پیدا میکنه و یه مدل دیگه Reject که یه پاکت میفرسه که این پاکت ریجکت شده که توصیه نمیشه چون مشکل ساز هست پس بهترین مدل همون Drop هست

DROP_LOGGING = “۰″

این کانفیگ اگه گزینه ۰ رو انتخاب کنید لاگ میکنه پاکت هایی که Drop یا Reject شده و اگه ۱ رو اتخاب کنید لاگ نمیگیره از پاکت هایی که ه Drop یا Reject شده پیشنهاد میشه گزینه ۰ رو انتخاب کنید که در صورتی که مشکلی پیش اومد بدونید و دلیلش رو متوجه بشید و حلش کنید

DROP_IP_LOGGING = “۱″

این گزینه ایپی هایی که پاکت هاشون Drop یا Reject میشه رو بلاک میشکه , میشه گفت یکم خطریه پس بهتره عدد ۱ رو انتخاب کنید و رد بشید چون ایپی های معمولی و ساده بعضی وقت ها پاکت هاشون Drop میشه و این ریسک هست . پس نتیجه میگیریم بهتره گزینه ۱ است

DROP_ONLYRES = “۰″

این گزینه لاگ میکنه پورت های خاصی رو که مد نظر دارید که با “,” پورت ها رو از هم جدا کنید اگه ۰ صفر رو انتخاب کنید تمام پورت ها رو لاگ میکنه

DROP_NOLOG = “۶۷,۶۸,۱۱۱″

این گزینه هم پورت هایی که نمی خواید لاگ کنه رو مینویسید که توصیه میشه خالی بزارید تا همه پورت ها لاگ بشه

PACKET_—————— = “۱″

این گزینه هم لاگ میکنه پاکت هایی که خود IPTABLES تشخیص میده که نامشخص هست یعنی پاکت هایی که INVALID هستند.

DROP_PF_LOGGING = “۰″

این گزینه هم لاگ کردن SYN Flood Protection رو فعال میکنه

پارامتر SYNFLOOD باعث جلوگیری از حملات DDOS از نوع synflood میگردد.

که در صورتی که پیشنهاد می گردد این مقدار برابر با ۱ باشد و در سرور فعال گردد که برای فعال سازی مقادیر زیر را در آن قرار دهید.

SYNFLOOD = “۱″
SYNFLOOD_RATE = “۱۰۰/s”
SYNFLOOD_BURST = “۱۵۰″

پارامتر SYNFLOOD_RATE سرعت دریافت پکت‌ها از یک آی پی را بررسی می‌کند که در حال تنظیم شده در ثانیه حداکثر ۱۰۰ پکت دریافت می‌گردد.

در پارامتر SYNFLOOD_BURST تعداد کانکشن‌های هر آی‌پی مشخص می‌گردد و در صورتی که تعداد کانکشن‌ها بیشتر از ۱۵۰ شود و یا ۱۵۰ کانکشن  در ۱ ثانیه بیشتر از ۱۰۰بسته ارسال کنند . آی پی مربوطه مسدود می گردد.

پارامتر PORTFLOOD در این قسمت می‌توانیم نوع پروتکل و پورت به همراه تعداد کانکشن در بازه زمانی مد نظر را مشخص نماییم تا جلوی حملات سیل آسا علیه سرور در یک پورت خاص گرفته‌شود.

PORTFLOOD = “۸۰;tcp;20;300″

در مثال ذکر شده اگر از یک آی پی در مدت ۳۰۰ ثانیه بیشتر از تعداد ۲۰ کانکشن به سمت پورت ۸۰ ارسال شود. آی پی در فایروال مسدود می‌گردد.

Synflood اولی ، این تنظیم خود این Synflood Protection رو فعال میکنه و SYNFLOOD_RATE هم Rate رو مشخص میکنه و SYNFLOOD_BURST و این هم Burst که این تنظیمات بستگی به سرور شما و سطح حمله ایی که داره به سرور شما میشه به صورت دیفالت میتونید این ها رو قرار بدید اگر حمله شدیتر از این حرف ها بود Rate رو کمتر کنید تا به جایی برسه که دفع کنه حمله رو

PORTFLOOD = “”

این گزینه هم کانکشن ها رو هر پورت مدیریت میکنه برای مثال اگه شما این تنظیم رو بکنید برای مثال کانفیگ زیر رو ببینید به این معنیست که روی پورت ۸۰ از نوع TCP هر ایپی میتونه در مدت ۵ ثانیه ۲۰ تا کانکشن بندازه

PORTFLOOD = “۸۰;tcp;20;5″
VERBOSE = “۱″

VERBOSE این کار هایی که Iptables میکنه رو روی صحفه نمایش شما نشون میده که بهتره ۱ رو انتخاب کنید چون بعضی وقت ها دارید کانفیگ میکنید یه هو میبینید ۲۰ خط اومد تو صفحه مانیتورتون !

SYSLOG = “۰″

این هم برای فعال کردن SYSLOG که همیشه فعال نگهش دارید چون واقعا به کارتون میاد و لاگ های سیستم رو میندازه که مهم هست پس عدد ۰ رو انتخاب میکنیم !

پارامتر CT_LIMIT مجموع تعداد کانکشن یک آی پی را مشخص می کند. در مثال زیر این مقدار برابر با ۳۰۰ است.

CT_LIMIT = “۳۰۰”

پارامتر CT_INTERVAL بازه زمانی بررسی تعدادکانکشن‌ها را مشخص می کند. در این حالت فایروال بر اساس مثال زیر هر ۳۰ ثانیه اقدام به بررسی تعداد کانکشن‌ها می‌نماید.

CT_INTERVAL = “۳۰”

پارامتر CT_EMAIL_ALERT با فعال سازی این پارامتر در صورت مسدود نمودن آی‌پی ایمیل برای ایمیل تنظیم شده در فایروال ارسال می گردد.

CT_EMAIL_ALERT = 1

پارامتر CT_PERMANENT با فعال سازی این مقدار آی‌پی‌ها بصورت موقت مسدود می‌گردند و به صورت پیش‌فرض این پارامتر غیرفعال است. توصیه می‌کنیم این مقدار غیرفعال باشد.

در صورت فعال نمودن این پارامتر باید زمانی نیز برای بازگشایی آی‌پی که به صورت موقت غیرفعال شده است . در نظر بگیرید که به عنوان مثال در زیر این مقدار برابر با ۱۸۰۰ ثانیه تنظیم شده است و پس از این مدت آی پی که مسدود گردیده است . بازگشایی می گردد.

CT_BLOCK_TIME = 1800

پارامتر CT_PORTS در صورتی که می‌خواهید پورت و یا پورت‌های خاصی عملیات connection_tracking انجام شود این مفدار را تنظیم نمایید. در مثال زیر پورت ۸۰ و ۴۴۳۰تنظیم شده‌است.

CT_PORTS = 80,443

پارامتر CONNLIMIT در صورتی که می‌خواهید بر روی پورت مشخصی تعداد کانکشن معینی را محدود نمایید از این پارامتر استفاده نمایید. جهت اعمال موضوع توضیحات مثال زیر را  بررسی نمایید.

CONNLIMIT = “۲۲;۵,۸۰;۲۰″

ذر این حالت بر روی پورت ۲۲ حداکثر تعداد ۵ کانکشن و بر روی پورت ۸۰ تعداد ۲۰ کانکشن محدود می‌گردد.

پارامتر LF_SCRIPT_ALERT با فعال سازی این مقدار در صورتی که از طریق اسکریپتی ایمیل ارسال شود و تعداد ایمیل‌های ارسالی بیشتر از حد مجاز تعیین شده‌باشد، به شما از طریق ایمیل اطلاع رسانی می شود که تعداد این ایمیل‌های مجاز در مدت زمان یک ساعت توسط پارامتر LF_SCRIPT_LIMIT مشخص می‌گردد.

هر دو در مثال زیر مشخص شده است.

LF_SCRIPT_ALERT = 1
LF_SCRIPT_LIMIT = 100

در مثال بالا به ازای ارسال بیشتر از ۱۰۰ ایمیل در ۱ ساعت به شما از طریق ایمیل اطلاع رسانی می‌گردد.

در صورتی که می خواهید گزارش‌های فایروال در ایمیل خاصی بدست شما برسد پارامتر‌های زیر را تنظیم نمایید:

LF_ALERT_TO = “email@domain.com”
LF_ALERT_FROM = “server.com”

در مثال ذکر شده ایمیل های مربوطه به ایمیل email@domain.com ارسال می گردد و ایمیل ها در ایمیل مقصد از طرف server.com ارسال می‌گردد.

حتما پس از انجام تغییرات بر روی ذخیره کلیک کرده و فایروال را ریست کنید

service csf restart

برای مشاهده آی پی ها و تعداد کانکشن های متصل به سرور می توانید از دستور زیر استفاده نمایید و هر آی پی ای که بیش از مجاز متصل بود آنرا بلاک نمایید

netstat -atun | awk ‘{print $5}’ | cut -d: -f1 | sed -e ‘/^$/d’ |sort | uniq -c | sort -n

برای حفاظت از سرور در حملات SYN و DOS مقادیر زیر را در فایروال به مقادیر زیر تغییر دهید

CT_LIMIT = “80”
        CT_INTERVAL = “50”
CT_PERMANENT = “1”
CT_BLOCK_TIME = “1800”
CT_INTERVAL = “60”
CT_SKIP_TIME_WAIT = “1”
SYNFLOOD = “1”
LF_DIRWATCH = “300”
PORTFLOOD = “80;tcp;20;300”

وارد تنظیمات فایروال شوید،

کد:

CT_LIMIT  =

تعداد کانکشن هایی که هر کلاینت با هر IP میتواند داشته باشد را تعیین میکند.

کد:

CT_INTERVAL  =

هر چه مدت، چه مدت دیواره آتشین شما کانکشن ها و وضعیت را بررسی کند.

کد:

CT_EMAIL_ALERT

هر IP که بن میشود یا .. به شما گزارش بدهد یا خیر (از طریق ایمیل)

کد:

CT_PERMANENT

این مقدار را اگ برابر با صفر قراردهید هر IP نمیتواند به طور همیشه بن باشد. اگر یک قرار دهید . هر IP که بن میشود واسه همیشه بن خواهد شد.

کد:

CT_BLOCK_TIME  =

IP که بن میشود چه مدت معلق بماند؟! مقدار ۱۸۰۰ یا ۵۰۰ مقداری خوبی است.

کد:

CT_SKIP_TIME_WAIT

برابر با صفر باشد.

کد:

CT_STATES  =

آمار از سرور به شما ارائه میدهد. اینکه هر IP چند کانکشن دارد و …

کد:

CT_PORTS

پورت ها را با , از هم جدا کنید. مثلا: ۸۰,۴۴۳,۲۵

یافتن حملات و درخواست هایی از نوع sync

کد:

netstat -an|grep :80

با دستور فوق تمام کانکشن هایی که به پورت ۸۰ وصل هستند را نمایش میدهد.

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

کد:

netstat -an|grep SYN_RECV

تعداد کانکشن های آپاجی و تعداد کانکشن های SYN_RECV :

کد:

netstat -an|grep :80|wc -l
netstat -an|grep SYN_RECV|wc -l

کانفیگ CSF به اتمام رسید اگر مشکلی داشتید کامنت کنید تا مشکل شما رو برطرف بکنیم.

منبع : ساتین

موفق باشید.

MahdiSalmani
MahdiSalmani
شروع فعالیت بنده از سال 1394 در عرصه هاستینگ بود و در کنار هاستینگ بنده وردپرس و whmcs هم بصورت تخصصی کار میکردم و به جرعت میتوانم بگوم متخصص در whmcs و wordpress هستم.