نصب فایروال CSF و آموزش کامل کانفیگ آن روی لینوکس، سی‌پنل و دایرکت‌ادمین

فایروال CSF (مخفف ConfigServer Security & Firewall) در مخازن پیش‌فرض توزیع‌های لینوکس مثل Debian و Ubuntu و CentOS و جانشین‌های امروزی آن یعنی AlmaLinux و Rocky و CloudLinux موجود نیست. بنابراین برای نصب فایروال CSF باید بستهٔ آن را جداگانه دانلود کنیم. CSF یک بستهٔ رایگان و متن‌باز است که در عمل یک لایهٔ مدیریت روی IPtables می‌سازد و شناخت آن کمک می‌کند بدانید هر قاعده دقیقاً چه می‌کند. کنار خود فایروال، سرویسی به نام lfd (مخفف Login Failure Daemon) هم نصب می‌شود که لاگ سرویس‌ها را می‌خواند و آی‌پی‌هایی را که تلاش ناموفق ورود (brute force) دارند خودکار بلاک می‌کند؛ بخش بزرگی از ارزش CSF از همین lfd می‌آید، نه فقط از باز و بسته کردن پورت‌ها. علاوه بر این، CSF امکان مدیریت پورت‌ها، محدود کردن کانکشن‌ها و پایش پروسس‌های در حال اجرا را هم در اختیارتان می‌گذارد.

مهم: منبع دانلود CSF عوض شده است

پیش از هر چیز یک نکتهٔ حیاتی که تقریباً همهٔ آموزش‌های فارسی و انگلیسیِ موجود هنوز آن را ندارند: شرکت Way to the Web، سازندهٔ ConfigServer، در ۳۱ آگوست ۲۰۲۵ فعالیت خود را به‌طور کامل تعطیل کرد. در نتیجه:

  • دامنهٔ download.configserver.com دیگر بالا نیست. دستور قدیمی wget https://download.configserver.com/csf.tgz که در اکثر آموزش‌ها نوشته شده، امروز فقط با خطای timeout برمی‌گردد و هیچ فایلی دانلود نمی‌شود.
  • روی سرورهایی که از قبل CSF نصب دارند و هنوز به همان دامنه اشاره می‌کنند، دستور csf -u و آپدیت خودکار (AUTO_UPDATES) عملاً کار نمی‌کند. یعنی ممکن است ماه‌ها تصور کنید فایروالتان به‌روز است در حالی که نیست.
  • آخرین نسخهٔ رسمی، یعنی CSF نسخهٔ ۱۵٫۰۰، درست پیش از تعطیلی تحت لایسنس GPLv3 منتشر شد. به همین دلیل امروز چند فورک فعال و متن‌باز از CSF وجود دارد که توسعه را ادامه داده‌اند.

اگر سرور شما cPanel/WHM دارد، ساده‌ترین و امن‌ترین مسیر این است که کاری نکنید: خود cPanel یک فورک رسمی از CSF را در مخزن cpanel/cpanel-csf نگهداری می‌کند و از فوریهٔ ۲۰۲۶ سرورهای واجد شرایط را خودکار به مخازن به‌روزرسانی خودش وصل کرده است. در این حالت CSF را از طریق همان کانال cPanel به‌روز نگه دارید.

روی سرورهای بدون کنترل‌پنل یا با کنترل‌پنل‌های دیگر، باید بستهٔ CSF را از یکی از فورک‌های نگهداری‌شده بگیرید. در ادامهٔ این مقاله از فورک Black-HOST/csf استفاده می‌کنیم که ساختار فایل‌ها و همهٔ دستورهایش دقیقاً مثل CSF اصلی است. اگر ترجیح می‌دهید از فورک دیگری استفاده کنید، فقط آدرس دانلود عوض می‌شود و بقیهٔ این راهنما بدون تغییر معتبر است.

پیش‌نیازها و تفاوت نصب روی توزیع‌های مختلف

نصب‌کنندهٔ CSF به چند ماژول پرل نیاز دارد و اگر نباشند نصب نیمه‌کاره می‌ماند. روی خانوادهٔ RHEL (AlmaLinux، Rocky، CloudLinux) پیش از شروع این‌ها را نصب کنید:

dnf -y install perl perl-libwww-perl perl-Time-HiRes perl-LWP-Protocol-https iptables tar wget

و روی Debian و Ubuntu معادل همان بسته‌ها این‌هاست:

apt -y install perl libwww-perl liblwp-protocol-https-perl iptables tar wget

در راهنماهای قدیمی برای همین کار فقط دستور yum install perl-libwww-perl نوشته می‌شد. روی CentOS 6 و ۷ همان کفایت می‌کرد، ولی روی توزیع‌های امروزی مدیر بستهٔ اصلی dnf است (yum فقط به‌عنوان نام مستعار باقی مانده) و بهتر است همهٔ این بسته‌ها را با هم نصب کنید، نه فقط perl-libwww-perl را.

توجه کنید که دستورهای نصب و اجرای CSF باید با کاربر root زده شوند؛ اگر با کاربر عادی وارد شده‌اید اول با sudo -i به root بروید.

فایروال فعلی سرور را غیرفعال کنید

از اجرای هم‌زمان CSF با فایروال‌های دیگر جداً خودداری کنید. روی سرورهای امروزی معمولاً یکی از این دو از قبل فعال است و باید پیش از راه‌اندازی CSF خاموش شود. فقط دستور مربوط به توزیع خودتان را اجرا کنید؛ دستور اول برای خانوادهٔ RHEL و دستور دوم برای Ubuntu و Debian است:

systemctl disable --now firewalld

ufw disable

یک هشدار جدی: از لحظه‌ای که فایروال قبلی را خاموش می‌کنید تا لحظه‌ای که CSF بالا بیاید، سرور شما هیچ فایروالی ندارد و همهٔ پورت‌های در حال گوش دادن مستقیماً از اینترنت در دسترس‌اند. پس این دستور را درست قبل از مرحلهٔ نصب بزنید، نه ساعت‌ها قبل، و کل کار را در یک نشست انجام دهید.

همچنین روی توزیع‌های جدید (مثل AlmaLinux 9 و Ubuntu 22 به بعد) خودِ دستور iptables در واقع یک لایهٔ سازگاری روی nftables است؛ CSF همچنان با همین دستور کار می‌کند و تنظیم اضافه‌ای نمی‌خواهد، فقط باید بستهٔ iptables روی سرور نصب باشد.

نصب فایروال CSF

برای نصب، فایل را در /usr/src بگیرید، باز کنید و اسکریپت نصب را اجرا کنید:

cd /usr/src

rm -rf csf csf.tgz

wget https://github.com/Black-HOST/csf/releases/latest/download/csf.tgz

tar -xzf csf.tgz

cd csf

cat version.txt

sh install.sh

دستور cat version.txt اجباری نیست ولی توصیه می‌شود: قبل از اجرای نصب، شمارهٔ نسخه‌ای که دانلود کرده‌اید را می‌بینید و می‌توانید آن را با آخرین نسخهٔ منتشرشده در صفحهٔ releases همان مخزن مقایسه کنید. چون این بسته دیگر از سایت رسمی سازنده نمی‌آید، این یک بررسی سادهٔ سلامت است که ارزش ده ثانیه وقت گذاشتن را دارد.

اسکریپت install.sh خودش تشخیص می‌دهد که روی سرور چه کنترل‌پنلی نصب است (cPanel، DirectAdmin، CyberPanel، CWP، InterWorx، VestaCP یا هیچ‌کدام) و نصب‌کنندهٔ مناسب را صدا می‌زند. بنابراین لازم نیست دستور جداگانه‌ای برای کنترل‌پنل خود اجرا کنید.

بلافاصله بعد از پایان نصب، باید از وجود کلیهٔ ماژول‌های IPTABLES مورد نیاز CSF روی سرور اطمینان حاصل کنیم. برای این کار اسکریپت پرل CSF مخصوص بررسی ماژول‌های IPTABLES را اجرا می‌کنیم (این اسکریپت فقط بعد از نصب روی سرور وجود دارد):

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

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

اولین کار بعد از نصب: آی‌پی خودتان را وایت‌لیست کنید

در حین فرایند نصب، آی‌پی‌ای که با آن به SSH متصل هستید معمولاً به‌صورت خودکار در فایل csf.allow قرار می‌گیرد (WHITELIST می‌شود)، ولی به این موضوع تکیه نکنید. اگر آی‌پی ثابت دارید همان اول دستی اضافه‌اش کنید:

csf -a 1.2.3.4 my office IP

این تنها بیمه‌نامهٔ واقعی شما در برابر قفل شدن پشت فایروال است، چون آی‌پی‌های داخل csf.allow از قواعد محدودکننده‌ای مثل PORTFLOOD و CONNLIMIT هم عبور می‌کنند.

حالت تست (TESTING) و آنچه واقعاً انجام می‌دهد

نکتهٔ بعدی که در هنگام نصب اولیه باید به آن توجه کنید، قرار گرفتن خودکار فایروال در حالت تست (TESTING = "1") است. دلیل آن هم مشخص است: در این حالت CSF یک کران‌جاب می‌سازد که کلیهٔ رول‌های IPTABLES را پاک می‌کند، بنابراین اگر ایرادی در کانفیگ فایروال باشد که منجر به قطع دسترسی شما شده باشد، خودبه‌خود برطرف می‌شود.

دو نکتهٔ دقیق دربارهٔ همین حالت که معمولاً اشتباه نوشته می‌شود:

  • فاصلهٔ این پاک‌سازی با گزینهٔ TESTING_INTERVAL تعیین می‌شود و مقدار پیش‌فرضش ۵ دقیقه است. ولی این کران‌جاب با ساعت سیستم هماهنگ است، نه با لحظه‌ای که شما فایروال را استارت کرده‌اید؛ یعنی در عمل رول‌ها بین ۰ تا ۵ دقیقه بعد از استارت پاک می‌شوند. پس روی «دقیقاً ۵ دقیقه» حساب نکنید.
  • تا وقتی TESTING = "1" است، سرویس lfd اصلاً بالا نمی‌آید. یعنی همهٔ قابلیت‌های ضدbrute force و بلاک خودکار که در ادامه توضیح می‌دهیم، تا خارج شدن از حالت تست غیرفعال هستند.

نصب CSF روی سرورهای سی‌پنل و دایرکت‌ادمین

مراحل نصب روی سرورهای cPanel/WHM و DirectAdmin دقیقاً همان دستورهای بالاست و فرمان جداگانه‌ای ندارد؛ تفاوت در دو چیز است. اول اینکه نصب‌کنندهٔ CSF وجود کنترل‌پنل را تشخیص می‌دهد و رابط گرافیکی خودش را اضافه می‌کند: در WHM از مسیر Plugins به بخش ConfigServer Security & Firewall می‌روید و از همان‌جا می‌توانید بدون SSH آی‌پی بلاک کنید، فایل کانفیگ را ویرایش کنید و فایروال را ریستارت کنید. در cPanel و DirectAdmin نیازی به نصب پلاگین جداگانه نیست؛ فقط برای webmin باید پلاگین را از مسیر /usr/local/csf/csfwebmin.tgz روی کنترل‌پنل وب‌مین نصب کنید.

دوم و مهم‌تر اینکه پورت‌های خود کنترل‌پنل باید در TCP_IN باز باشند، وگرنه به محض خروج از حالت تست دسترسی‌تان به پنل قطع می‌شود. خبر خوب این است که نصب‌کننده معمولاً این کار را خودش انجام می‌دهد: روی cPanel فایل کانفیگ پیش‌فرض شامل پورت‌های ۲۰۷۷ و ۲۰۷۸ (WebDAV)، ۲۰۸۲ و ۲۰۸۳ (cPanel)، ۲۰۸۶ و ۲۰۸۷ (WHM) و ۲۰۹۵ و ۲۰۹۶ (Webmail) است و روی DirectAdmin پورت ۲۲۲۲ اضافه می‌شود. با این حال حتماً خودتان بررسی کنید؛ روی Webmin باید پورت ۱۰۰۰۰ را دستی باز کنید. پیش از خروج از حالت تست، فهرست پورت‌های بازِ فایل کانفیگ را با پورت‌هایی که واقعاً استفاده می‌کنید مقایسه کنید.

قبل از خارج کردن فایروال از حالت تست

اگر نیاز به باز کردن پورت‌های خاصی روی سرور دارید، حتماً قبل از خارج کردن فایروال از حالت تست آن‌ها را باز کنید. اگر از کنترل‌پنل‌های هاستینگ استفاده می‌کنید یا مثلاً پورت SSH شما یک پورت غیراستاندارد و به‌جز پورت ۲۲ است، باید این پورت‌ها را قبل از فعال کردن کامل فایروال باز کنید (روش عوض کردن این پورت در تغییر پورت سرور آمده است)، در غیر این صورت به محض خارج کردن فایروال CSF از حالت تست امکان قطع شدن دسترسی شما به سرور وجود خواهد داشت.

برای جلوگیری از این مشکل اجازه بدهید سرور با فایروال در وضعیت تست حداقل ۵ تا ۱۰ دقیقه کار کند و در همین فاصله همهٔ سرویس‌ها را تست کنید. ضمناً پیش از شروع کار مطمئن شوید که به کنسول مجازی یا KVM سرور دسترسی دارید؛ اگر همه چیز خراب شد، این تنها راه ورود بدون SSH است.

کانفیگ مقدماتی و پایهٔ فایروال CSF

برای کانفیگ فایروال CSF باید فایل csf.conf را ویرایش کنید. بعد از ذخیرهٔ تغییرات، با ریست کردن فایروال تغییرات در IPTABLES اعمال خواهند شد:

vi /etc/csf/csf.conf

csf -r

اگر با vi راحت نیستید می‌توانید از nano /etc/csf/csf.conf استفاده کنید (ذخیره و خروج در nano با Ctrl+X، سپس y و Enter). دقت کنید که مسیر درست فایل /etc/csf/csf.conf است، نه csf.config؛ این اشتباه تایپی در خیلی از آموزش‌ها تکرار شده است.

قبل از دست زدن به این فایل یک نسخهٔ پشتیبان بگیرید تا اگر کار خراب شد بتوانید برگردید:

cp -a /etc/csf/csf.conf /etc/csf/csf.conf.bak

یک نکتهٔ ساده ولی سرنوشت‌ساز: هر گزینه باید فقط یک بار در فایل csf.conf باشد. اگر یک نام دو بار با دو مقدار بیاید، CSF مقدار آخر را می‌خواند و شما فکر می‌کنید مقدار اول اعمال شده است. پس به‌جای اضافه کردن خط جدید در انتهای فایل، همان خط موجود را ویرایش کنید.

نکتهٔ دوم دربارهٔ ریستارت است: دستور csf -r فقط قواعد فایروال را بازسازی می‌کند. گزینه‌هایی که با LF_، CT_ و PT_ شروع می‌شوند توسط سرویس lfd خوانده می‌شوند، بنابراین بعد از تغییر آن‌ها باید csf -ra را اجرا کنید تا هم csf و هم lfd ریستارت شوند.

مرحلهٔ اول: تنظیمات پورت‌های سرور

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

روی نسخه‌های امروزی CSF (شاخهٔ ۱۵) و روی سرور بدون کنترل‌پنل، پورت‌های زیر به‌صورت پیش‌فرض باز خواهند شد:

TCP_IN = "20,21,22,25,53,853,80,110,143,443,465,587,993,995"

TCP_OUT = "20,21,22,25,53,853,80,110,113,443,587,993,995"

UDP_IN = "20,21,53,853,80,443"

UDP_OUT = "20,21,53,853,113,123"

اگر آموزشی دیدید که در آن UDP_IN = "20,21,53" یا TCP_OUT = "20,21,22,25,53,80,110,113,443" نوشته شده، آن مربوط به نسخه‌های قدیمی‌تر CSF است. مقادیر واقعی روی سرور خودتان را همیشه از داخل فایل csf.conf بخوانید، نه از آموزش.

سرویس‌هایی که از این پورت‌ها استفاده می‌کنند به شرح زیر هستند:

Port 20: FTP data transfer
Port 21: FTP control
Port 22: Secure shell -SSH
Port 25: Simple mail transfer protocol -SMTP
Port 53: Domain name system -DNS
Port 80: Hypertext transfer protocol -HTTP (UDP 80 = HTTP/3 QUIC)
Port 110: Post office protocol v3 -POP3
Port 113: Authentication service/identification protocol -ident
Port 123: Network time protocol -NTP
Port 143: Internet message access protocol -IMAP
Port 443: Hypertext transfer protocol over SSL/TLS -HTTPS (UDP 443 = HTTP/3 QUIC)
Port 465: SMTP over SSL -submissions
Port 587: E-mail message submission -SMTP
Port 853: DNS over TLS -DoT
Port 993: Internet message access protocol over SSL -IMAPS
Port 995: Post office protocol 3 over TLS/SSL -POP3S

اگر از هر یک از پورت‌های فوق استفاده نمی‌کنید یا سرویس‌های استفاده‌کننده از این پورت‌ها در سرور شما کاربردی ندارند، حتماً آن‌ها را از طریق فایروال CSF ببندید. چند نکتهٔ به‌روز دربارهٔ همین فهرست:

  • پورت ۴۶۵ در فهرست‌های قدیمی با نام «URL Rendezvous Directory for SSM» ثبت شده بود، ولی روی سرورهای میل امروزی کاربرد واقعی آن SMTP over SSL (همان submissions) است.
  • پورت ۱۱۳ مربوط به سرویس ident است که عملاً منسوخ شده و روی اکثر سرورها لازم نیست.
  • پورت‌های ۸۵۳ (DNS over TLS) و UDP 443 و UDP 80 (HTTP/3 و QUIC) در فهرست‌های قدیمی نبودند. اگر سرویس DNS یا HTTP/3 ارائه نمی‌دهید، بستن‌شان بی‌خطر است.
  • اگر میل سرور دارید و کاربران را به اتصال رمزنگاری‌شده منتقل کرده‌اید، پورت‌های ۱۱۰ و ۱۴۳ (POP3 و IMAP بدون رمزنگاری) را ببندید و فقط ۹۹۵ و ۹۹۳ را باز بگذارید.
  • اگر روی سرور IPv6 فعال است، باز کردن پورت در TCP_IN کافی نیست. ترافیک IPv6 قواعد جداگانه دارد و باید گزینهٔ IPV6 (که پیش‌فرض روی 0 است) و فهرست‌های TCP6_IN، TCP6_OUT، UDP6_IN و UDP6_OUT را هم متناسب تنظیم کنید؛ در غیر این صورت یا سرویسی از راه IPv6 در دسترس نیست یا برعکس، پورتی که فکر می‌کردید بسته‌اید از راه IPv6 باز مانده است.

مرحلهٔ دوم: سایر تنظیمات CSF

در ادامه به پیکربندی پراستفاده‌ترین و مهم‌ترین قسمت‌های فایروال CSF در لینوکس می‌پردازیم. گام‌های تکمیلی همین پیکربندی در قدم دوم پیکربندی CSF دنبال شده است.

کنترل پینگ با ICMP_IN

مجموعه پروتکل‌های ICMP یکی از پراستفاده‌ترین سرویس‌های دنیای اینترنت، شبکه و هاستینگ هستند. با کمک ICMP_IN در فایروال CSF قادر به باز کردن و بستن پینگ آی‌پی سرور هستید. با قرار دادن مقدار ۱ پینگ سرور باز می‌شود و در صورت مقداردهی ۰ پینگ سرور به‌طور کامل بسته می‌شود. مقدار پیش‌فرض 1 است و خود مستندات CSF هشدار می‌دهد که بستن پینگ به احتمال زیاد مانیتورینگ آپ‌تایم بیرونی شما را از کار می‌اندازد. اگر سرور شما یک سرور اشتراکی است هم بستن پینگ می‌تواند مشکلاتی به همراه داشته باشد. راه میانه این است که پینگ را باز بگذارید و به‌جای بستن کامل، با ICMP_IN_RATE نرخ آن را محدود کنید (مقدار پیش‌فرض 1/s است).

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

با مقداردهی به DENY_IP_LIMIT حداکثر تعداد IP های مجاز برای نگهداری در لیست بلاک دائمی فایروال CSF را مشخص می‌کنید. مقداردهی زیاد به این پارامتر سبب افزایش لود سرور و مصرف CPU می‌گردد، چون هر آی‌پی یک قاعدهٔ iptables جداگانه می‌سازد. خیلی از وب‌مسترها به دلایلی که عموماً اشتباه است این مقدار را روی ۱۰۰۰ یا بیشتر تنظیم می‌کنند که سبب مصرف بالای منابع سرور می‌گردد. مقدار پیش‌فرض و توصیه‌شده ۲۰۰ است.

تعداد آی‌پی‌های بلاک شدهٔ موقت با DENY_TEMP_IP_LIMIT

با مقداردهی به DENY_TEMP_IP_LIMIT حداکثر تعداد IP هایی که به‌صورت موقتی بلاک می‌شوند را تعیین می‌کنید؛ مقدار پیش‌فرض ۱۰۰ است. مانند بلاک دائمی IP، افزایش تعداد این آی‌پی‌ها نیز سبب کند شدن فایروال و سرور می‌گردد.

محدود کردن پکت‌ها با PACKET_FILTER

به کمک این گزینه پکت‌های اشتباه، بدون کاربرد و غیرقانونی (invalid) فیلتر می‌شوند. مقدار پیش‌فرض آن 1 است و دلیلی برای خاموش کردنش وجود ندارد.

کنترل حملات SYNFLOOD

به کمک SYNFLOOD و SYNFLOOD_RATE و SYNFLOOD_BURST قادر به کنترل حملات SYN flood روی سرور خود خواهید بود. با فعال‌سازی این قسمت، شکل‌گیری و اتصال کانکشن‌های جدید به سرور کند می‌شود؛ در واقع با افزایش زمان برقراری کانکشن‌های جدید، حملات flood از نوع SYN تا حدودی کنترل خواهند شد. بنابراین فقط زمانی که زیر حملهٔ SYN flood هستید این قسمت را فعال کنید:

SYNFLOOD = "1"

بعضی راهنماها SYNFLOOD = "1" را به‌عنوان بخشی از کانفیگ همیشگی پیشنهاد می‌کنند؛ این کار درست نیست و ناخواسته سبب کند شدن سرعت باز شدن سایت برای کاربران جدید می‌شود. به همین دلیل هم مقدار پیش‌فرض خود CSF "0" است. بعد از پایان حمله دوباره آن را روی SYNFLOOD = "0" بگذارید.

محدود کردن کانکشن‌ها با CONNLIMIT

یکی از قوی‌ترین امکانات فایروال CSF برای کنترل حملات DOS و بعضی از انواع DDOS، ابزار CONNLIMIT است. در کنار آن می‌توانید از اسکریپت DDoS Deflate استفاده کنید که همین شمارش اتصال‌ها را خودکار انجام می‌دهد و آی‌پی متخلف را در همین فایروال بلاک می‌کند. CONNLIMIT به شما این امکان را می‌دهد تا تعداد کانکشن‌های هم‌زمان و فعال (concurrent connections) روی پورت‌های دلخواه را برای هر IP تعیین و محدود کنید. برای درک بهتر این موضوع یک مثال می‌زنیم:

CONNLIMIT = "22;5,443;20"

این مقداردهی به CONNLIMIT در فایروال CSF به این معنی است که تعداد کانکشن‌های هم‌زمان مجاز برای هر آی‌پی روی پورت ۲۲ حداکثر ۵ کانکشن و روی پورت ۴۴۳ حداکثر ۲۰ کانکشن است. قالب کلی port;limit است و برای چند پورت، جفت‌ها را با کاما جدا می‌کنید؛ مثلاً "22;5,80;20". مقدار پیش‌فرض این گزینه خالی است.

هشدار: عدد ۲۰ روی پورت ۴۴۳ یا ۸۰ برای یک سایت واقعی کم است. یک مرورگر مدرن به‌تنهایی چند کانکشن هم‌زمان باز می‌کند و چند کاربر پشت یک NAT یا یک شبکهٔ اداری، همگی با یک آی‌پی دیده می‌شوند و خیلی راحت از این حد رد می‌شوند. اگر روی پورت وب مقدار می‌گذارید، از عددی سخاوتمندانه شروع کنید و لاگ‌ها را ببینید. روی پورت ۲۲ هم اگر از rsync، scp یا Git روی SSH استفاده می‌کنید، ۵ کانکشن هم‌زمان می‌تواند کم باشد.

محدود کردن سرعت اتصال با PORTFLOOD

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

PORTFLOOD = "22;tcp;5;250"

این مقداردهی به فایروال CSF دستور می‌دهد که اگر یک آی‌پی بیش از ۵ کانکشن در مدت ۲۵۰ ثانیه به پورت ۲۲ (از نوع TCP) بزند، آن را بلاک کند. دو نکته را دقیق بخوانید: اول اینکه این عدد یعنی «۵ کانکشن در کل بازه»، نه ۵ درخواست در ثانیه. دوم اینکه بلاک تا ۲۵۰ ثانیه پس از آخرین تلاش آن آی‌پی ادامه پیدا می‌کند، نه از لحظهٔ اولین تلاش.

هشدار جدی: همین مثال روی پورت ۲۲ یکی از رایج‌ترین دلایل قفل شدن مدیر سرور پشت فایروال خودش است. پنج اتصال SSH در بازهٔ حدود چهار دقیقه با چند پنجرهٔ ترمینال، یک scp و یک git push به‌راحتی پر می‌شود و بعد خودتان بلاک می‌شوید. اگر روی پورت SSH از PORTFLOOD استفاده می‌کنید، حتماً اول آی‌پی خودتان را با csf -a در وایت‌لیست بگذارید و عدد را محافظه‌کارانه انتخاب کنید. مقدار پیش‌فرض این گزینه خالی است.

قالب هر بخش به‌صورت port;protocol;hit count;interval است و اگر قصد محافظت از پورت‌های بیشتری را دارید می‌توانید بخش‌ها را با کاما از هم جدا کنید:

PORTFLOOD = "22;tcp;5;250,80;tcp;20;300"

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

محدود کردن کلی کانکشن‌ها با Connection Tracking

به کمک connection tracking، فایروال CSF می‌تواند آی‌پی‌هایی را که مجموعاً بیشتر از تعداد مجاز و تعیین‌شده به سرور کانکشن زده‌اند بلاک کند. این کانکشن‌ها به‌صورت کلی محاسبه می‌شوند و پورت و سرویس خاصی مدنظر نیست. برای این منظور کافی است مقدار CT_LIMIT را تنظیم کنید (پیش‌فرض 0 یعنی غیرفعال)؛ اگر آن را روی ۳۰۰ بگذارید، هر زمان بیشتر از ۳۰۰ کانکشن توسط یک IP به سرور متصل شود آن آی‌پی توسط فایروال CSF بلاک خواهد شد. فایروال CSF به‌صورت پیش‌فرض هر ۳۰ ثانیه یک‌بار تعداد کانکشن‌های هر آی‌پی را با مقدار CT_LIMIT چک می‌کند و اگر مایل به تغییر این بازه هستید باید CT_INTERVAL را تغییر دهید. توجه داشته باشید که این عدد هر چه کمتر باشد، منابع مصرفی توسط CSF بیشتر خواهد بود.

یک مجموعهٔ متعادل برای شروع محافظت در برابر DOS و SYN flood این است:

CT_LIMIT = "80"
CT_INTERVAL = "60"
CT_BLOCK_TIME = "1800"
CT_PERMANENT = "0"
CT_SKIP_TIME_WAIT = "1"

معنی هر گزینه: CT_LIMIT سقف تعداد کانکشن هم‌زمان از یک آی‌پی، CT_INTERVAL فاصلهٔ زمانی بررسی بر حسب ثانیه، CT_BLOCK_TIME مدت بلاک بر حسب ثانیه (اینجا ۳۰ دقیقه)، CT_PERMANENT دائمی بودن یا نبودن بلاک و CT_SKIP_TIME_WAIT نادیده گرفتن کانکشن‌هایی که در وضعیت TIME_WAIT هستند.

دو هشدار مهم دربارهٔ همین بلوک:

  • در آموزش‌های قدیمی CT_PERMANENT = "1" پیشنهاد می‌شد. با این مقدار هر آی‌پی که یک بار از حد بگذرد برای همیشه در csf.deny می‌ماند و این فایل مدام بزرگ‌تر می‌شود؛ همان چیزی که در بخش DENY_IP_LIMIT گفتیم منابع سرور را می‌خورد. مقدار 0 به‌همراه CT_BLOCK_TIME انتخاب امن‌تری است و پیش‌فرض خود CSF هم همین است.
  • عدد ۸۰ برای CT_LIMIT روی یک سرور وب پرترافیک ممکن است خیلی کم باشد و کاربران پشت NAT یا شبکه‌های شرکتی را بلاک کند. اول با یک عدد بالاتر شروع کنید و بر اساس لاگ‌های lfd آن را پایین بیاورید.

پس از تغییر این گزینه‌ها حتماً csf -ra بزنید، چون خواندن آن‌ها بر عهدهٔ lfd است.

پایش پروسس‌ها با PT_LIMIT

جدا از پورت و کانکشن، lfd می‌تواند پروسس‌های در حال اجرای سرور را هم زیر نظر بگیرد. با PT_LIMIT مشخص می‌کنید یک پروسس چند ثانیه اجازه دارد اجرا شود تا برایتان هشدار بیاید (پیش‌فرض ۶۰ ثانیه) و با PT_USERPROC حداکثر تعداد پروسس هم‌زمان هر کاربر را تعیین می‌کنید (پیش‌فرض ۱۰). این گزینه‌ها روی سرورهای اشتراکی برای پیدا کردن اسکریپت‌های سنگین یا آلوده خیلی به کار می‌آیند. اگر روی سرور شما جاب‌های سنگین و طولانی (مثل بکاپ یا ایمپورت دیتابیس) اجرا می‌شود، منتظر ایمیل‌های هشدار زیاد باشید و عدد را متناسب بالا ببرید.

lfd و بلاک‌های خودکار

lfd همان بخشی است که سرور را در برابر brute force و آی‌پی‌های بدنام محافظت می‌کند و به‌صورت پیش‌فرض هنگام بلاک شدن یک IP برای شما ایمیل می‌فرستد. آدرس گیرندهٔ این هشدارها با LF_ALERT_TO در همان فایل csf.conf تعیین می‌شود؛ اگر آن را خالی بگذارید (که پیش‌فرض است) هر قالب هشدار از آدرس To: خودش استفاده می‌کند که معمولاً کاربر root سرور است و کسی آن را نمی‌خواند. یادتان باشد که lfd تا وقتی TESTING = "1" باشد اصلاً اجرا نمی‌شود.

CSF می‌تواند فهرست‌های عمومی آی‌پی‌های بدنام را هم به‌صورت خودکار بگیرد و بلاک کند:

LF_DSHIELD = "86400"
LF_SPAMHAUS = "86400"
LF_BOGON = "86400"

این تنظیم اختیاری ولی مفید است و سرور شما را در برابر فهرست بزرگی از آی‌پی‌های بدنام که مدام به‌روز می‌شود محافظت می‌کند. عدد ۸۶۴۰۰ یعنی این فهرست‌ها هر ۲۴ ساعت یک‌بار تازه می‌شوند. فقط دربارهٔ LF_BOGON احتیاط کنید: این فهرست شامل رنج‌های تخصیص‌نیافته و خصوصی است و اگر سرور شما پشت NAT یا روی یک شبکهٔ داخلی قرار دارد، می‌تواند ترافیک سالم را هم بلاک کند. در این حالت اینترفیس داخلی را در LF_BOGON_SKIP بگذارید.

lfd می‌تواند دایرکتوری‌های موقت را هم برای فایل‌های مشکوک زیر نظر بگیرد:

LF_DIRWATCH = "300"

با این مقدار، که پیش‌فرض هم هست، هر ۳۰۰ ثانیه یک‌بار مسیرهای /tmp و /dev/shm از نظر فایل‌های اکسپلویت شناخته‌شده بررسی می‌شوند و برای هر فایل مشکوک ایمیل هشدار می‌آید. مقدار 0 این قابلیت را غیرفعال می‌کند.

بلاک کردن کشورها با CC_DENY

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

CC_DENY = "GB,CN"

دربارهٔ CC_DENY سه نکته را بدانید:

  • این قابلیت به یک دیتابیس جغرافیایی آی‌پی نیاز دارد و منبع آن با گزینهٔ CC_SRC انتخاب می‌شود. روی نصب‌های جدید مقدار پیش‌فرض CC_SRC = "2" است که از db-ip، ipdeny و iptoasn استفاده می‌کند و هیچ کلید لایسنسی لازم ندارد.
  • فقط اگر CC_SRC را روی "1" بگذارید تا از MaxMind استفاده کند، باید یک کلید لایسنس رایگان بسازید و در MM_LICENSE_KEY وارد کنید؛ MaxMind از پایان ۲۰۱۹ این را الزامی کرده و بدون آن بخش IP lookup کار نمی‌کند. آموزش‌هایی که می‌گویند CC_DENY همیشه به کلید MaxMind نیاز دارد، از این تغییر پیش‌فرض بی‌خبرند.
  • بستن یک کشور کامل قواعد فایروال بسیار زیادی می‌سازد و مصرف حافظه و CPU سرور را بالا می‌برد؛ خود مستندات CSF استفاده از این گزینه را توصیه نمی‌کند و روی سرورهای مجازی با منابع محدود صریحاً هشدار می‌دهد که می‌تواند سرور را غیرقابل‌دسترس کند. برای اکثر سرورها بلاک هدفمند آی‌پی گزینهٔ بهتری است.

اعمال تغییرات و فعال‌سازی نهایی فایروال

CSF گزینه‌های زیاد دیگری هم دارد که همگی در فایل /etc/csf/readme.txt و در توضیحات بالای هر گزینه داخل خود csf.conf مستند شده‌اند و ارزش یک بار خواندن را دارند. اگر روی سی‌پنل به لایه‌ای فراتر از فایروال شبکه نیاز دارید، نصب و امکانات Imunify360 روی سی‌پنل گزینهٔ دیگری در همین دسته است.

بعد از پایان کانفیگ و ذخیرهٔ تغییرات، فایروال را یک بار ریستارت کنید تا تغییرات اعمال شوند. برای این کار یا از پنل ادمین CSF در کنترل‌پنل‌های دایرکت‌ادمین، سی‌پنل و وب‌مین اقدام کنید یا در SSH دستور زیر را وارد کنید:

csf -r

حالا تا حدود ۵ دقیقه فرصت دارید تا همهٔ موارد کانفیگ‌شده را بررسی کنید، چون فایروال CSF در حالت تست رول‌های IPTABLES را پاک می‌کند تا اگر اشتباهی در کانفیگ رخ داده باشد دسترسی‌های شما کاملاً قطع نشود. در صورتی که همه چیز به درستی کار می‌کرد، مجدداً فایل کانفیگ فایروال را ویرایش کرده و مقدار TESTING را از ۱ به ۰ تغییر دهید و فایروال را ریست کنید:

TESTING = "0"

csf -r

دقت کنید که مقدار باید داخل گیومهٔ ساده (“) نوشته شود؛ اگر فایل را در یک ویرایشگر ویندوزی باز کرده باشید ممکن است گیومه‌ها به شکل تایپوگرافیک تبدیل شوند و در آن صورت CSF مقدار را نمی‌خواند. بلافاصله بعد از این کار، یک ترمینال SSH فعلی خود را باز نگه دارید و با یک ترمینال دوم اتصال جدید بزنید؛ اگر اتصال دوم برقرار نشد، هنوز از راه ترمینال اول می‌توانید با csf -x فایروال را خاموش کنید.

سرویس‌های CSF روی سیستم‌عامل‌های امروزی با systemd مدیریت می‌شوند:

systemctl enable --now csf lfd

systemctl status csf lfd

در آموزش‌های قدیمی برای همین کار service csf start یا /etc/init.d/csf start نوشته می‌شد. روی توزیع‌های امروزی دستور service فقط به systemd ارجاع داده می‌شود و ممکن است هنوز کار کند، ولی شکل درست همان systemctl است (با حرف کوچک، نه Systemctl). در عمل برای کار روزمره لازم نیست سراغ systemctl بروید؛ خود دستور csf همه چیز را انجام می‌دهد.

دستورهای روزمرهٔ CSF

  • آی‌پی‌های بلاک‌شده در فایل /etc/csf/csf.deny و آی‌پی‌های مجاز در /etc/csf/csf.allow ذخیره می‌شوند.
  • برای بلاک کردن یک آی‌پی: csf -d 1.2.3.4 و برای وایت‌لیست کردن آن: csf -a 1.2.3.4. می‌توانید بعد از آی‌پی یک توضیح کوتاه لاتین هم بنویسید تا در فایل ذخیره شود؛ مثلاً csf -d 1.2.3.4 brute force ssh
  • برای بلاک کردن یا وایت‌لیست کردن یک رنج آی‌پی باید آن را به شکل 2.3.0.0/16 وارد کنید.
  • برای فهمیدن اینکه یک آی‌پی اصلاً بلاک هست یا نه و چرا: csf -g 1.2.3.4
  • برای خارج کردن یک آی‌پی از بلاک دائمی csf -dr 1.2.3.4 و از بلاک موقت csf -tr 1.2.3.4؛ فهرست بلاک‌های موقت هم با csf -t دیده می‌شود.
  • ریستارت قواعد فایروال: csf -r و ریستارت هم‌زمان csf و lfd: csf -ra
  • برای غیرفعال کردن موقت فایروال csf -x و برای فعال کردن مجدد آن csf -e را اجرا کنید. توجه کنید که بعد از csf -x سرور شما بدون فایروال است، پس آن را کوتاه نگه دارید. اگر خودتان را پشت فایروال قفل کردید، از کنسول مجازی یا KVM سرور وارد شوید و همین csf -x را بزنید.
  • همیشه از به‌روز بودن فایروال خود اطمینان داشته باشید؛ برای آپدیت کردن CSF دستور csf -u را اجرا کنید. ولی همان‌طور که در ابتدای مقاله گفتیم، روی نصب‌های قدیمی که هنوز به سرورهای تعطیل‌شدهٔ ConfigServer اشاره می‌کنند این دستور بی‌اثر است. منبع به‌روزرسانی در فایل /etc/csf/downloadservers نگهداری می‌شود و برای مهاجرت به یک فورک فعال باید همین فایل را مطابق مستندات آن فورک به‌روز کنید؛ بعد از آن csf -u دوباره کار خواهد کرد.
  • از استفادهٔ هم‌زمان CSF با سایر فایروال‌ها جداً خودداری کنید.

ابزارهای جانبی ConfigServer

جدا از خود فایروال، مجموعه ConfigServer چند ابزار رایگان دیگر هم داشت که روی سرورهای cPanel/WHM مفید بودند: cmm برای مدیریت میل، cmq برای مدیریت صف ایمیل و cmc برای کنترل ModSecurity. توجه کنید که این ابزارها هم با تعطیلی ConfigServer دیگر از منبع رسمی قابل دانلود نیستند و برخلاف خود CSF، فورک فعالی به‌اندازهٔ CSF برایشان شکل نگرفته است. اگر روی سرورتان نصب هستند کار می‌کنند ولی به‌روزرسانی نمی‌شوند؛ برای نصب تازه بهتر است سراغ جایگزین‌های فعال بروید.

نکتهٔ مجازی‌سازهای قدیمی

روی سرورهای مجازی قدیمی مبتنی بر OpenVZ کارت شبکه به‌جای eth0 با نام venet0 شناخته می‌شود. اگر با چنین سروری کار می‌کنید، در فایل /etc/csf/csf.conf مقدار ETH_DEVICE را روی "venet+" بگذارید وگرنه قواعد فایروال روی هیچ اینترفیسی نمی‌نشیند. روی مجازی‌سازهای امروزی مثل KVM این تنظیم لازم نیست و باید خالی بماند (مقدار پیش‌فرض هم خالی است).

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