UFW یا مخفف Uncomplicated Firewall به معنی فایروال غیرپیچیده، یک رابط مدیریت فایروال ساده شده است که پیچیدگی فناوریهای فیلترینگ بستههای سطح پایینتر مانند iptables و nftables را ارائه نمیدهد. اگر ایمنسازی شبکه خود را به تازگی شروع کردهاید و مطمئن نیستید که از کدام ابزار استفاده کنید، فایروال غیرپیچیده یا UFW احتمالا انتخاب مناسبی برای شما است. در این مطلب نحوه راه اندازی فایروال با UFW را در اوبونتو 22.04 به شما آموزش میدهیم.
پیشنیازهای راه اندازی فایروال با UFW
برای اینکه بتوانید راه اندازی فایروال با UFW را با موفقیت انجام دهید، به پیشنیازهای زیر نیاز دارید:
- یک سرور لینوکس اوبونتو 22.04 با کاربر غیر روت sudo
- UFW بهطور پیشفرض روی اوبونتو نصب شده است. اگر این رابط در سرور شما وجود ندارد احتمالا حذف شده است. شما میتوانید مجددا آن را با استفاده از فرمان sudo apt install ufw نصب کنید.
گام اول: استفاده از IPv6 در UFW
این گام برای راه اندازی فایروال با UFW اختیاری است و مقاله آموزشی پیش رو در واقع بر اساس پروتکل IPv4 نوشته شده است، اما اگر تمایل داشته باشید کاملا با پروتکل IPv6 نیز سازگاری دارد. اگر پشتیبانی از IPv6 در سرور لینوکس اوبونتو شما فعال شده است، مطمئن شوید که UFW را بهگونهای پیکربندی میکنید که علاوه بر IPv4، قوانین مربوط به آدرسهای IPv6 را هم مدیریت کند. بهاینمنظور، فایل پیکربندی UFW را با استفاده از nano یا هر ویرایشگر متن دلخواهتان باز کنید:
sudo nano /etc/default/ufw
حالا باید مقدار مربوط به IPv6 را برابر با yes قرار دهید تا مشابه خط زیر شود:
IPV6=yes
فایل را ذخیره کنید و ببندید. اکنون UFW فعال شده است و میتوانید آن را بهگونهای پیکربندی کنید که هم قوانین IPv4 و هم IPv6 را بنویسد. اما قبل از اینکه UFW را فعال کنید، باید مطمئن شوید که دیواره آتش وب شما بهگونهای پیکربندی شده است تا امکان اتصال از طریق SSH را فراهم کند. بهاینمنظور، ابتدا باید تنظیمات مربوط به سیاستهای پیشفرض را تنظیم کنیم.
گام دوم: تنظیم سیاستهای پیشفرض
اگر بهتازگی استفاده از فایروال را شروع کردهاید، اولین قوانینی که باید تعریف کنید، سیاستهای پیشفرض است. این قوانین نحوه مدیریت ترافیکی که صراحتا با قوانین دیگر مطابقت ندارند را تعیین میکند. بهصورت پیشفرض، UFW بهگونهای تنظیم شده است که تمام ارتباطات ورودی را نادیده بگیرد و به تمام ارتباطات خروجی اجازه بدهد. این یعنی هر کسی که سعی کند به سرور شما دسترسی داشته باشد با شکست مواجه میشود، درحالیکه هر اپلیکیشنی در سرور میتواند با جهان بیرون ارتباط برقرار کند.
توصیه میکنیم قوانین UFW را به حالت پیشفرض بازگردانید تا مطمئن شوید امکان دنبال کردن آموزش را دارید. بهاینمنظور کافیست از دستورات زیر استفاده کنید:
sudo ufw default deny incoming sudo ufw default allow outgoing
با اجرای این دستور، خروجی مشابه زیر را دریافت خواهید کرد:
Output Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)
این دستورات تنظیمات پیشفرض را فعال میکند تا از ارتباطات ورودی جلوگیری و به ارتباطات خروجی اجازه داده شود. این تنظیمات پیشفرض ممکن است به تنهایی برای یک کامپیوتر شخصی کافی باشد، اما سرورها معمولا باید نسبت به درخواستهای ورودی از سوی کاربران خارجی واکنش مناسبی را ارائه دهند. در ادامه به این موضوع میپردازیم.
گام سوم: اجازه دادن به ارتباطات SSH
اگر حالا فایروال UFW را در سرور مجازی لینوکس خود فعال کنید، تمامی ارتباطات ورودی را لغو میکند. این یعنی ما نیاز به تعیین قوانینی داریم که اجازه بدهد ارتباطات ورودی مجاز (برای مثال SSH یا HTTP) برقرار شود. البته فرض ما بر این است که شما نیاز دارید سرور به این نوع درخواستها پاسخ بدهد. اگر از یک سرور ابری استفاده میکنید احتمالا برای اینکه بتوانید به سرور خود متصل شوید و آن را مدیریت کنید، باید اجازه بدهید ارتباطات SSH برقرار شود.
برای پیکربندی سرور بهگونهای که ارتباطات SSH را تایید کند، میتوانید از دستور زیر استفاده کنید:
sudo ufw allow ssh
با اجرای این دستور، قوانین جدیدی برای فایروال ایجاد میکنید که به تمام ارتباطات روی پورت 22، که پورت پیشفرض دیمون SSH بهحساب میآید اجازه برقراری میدهد. از آنجایی که allow ssh بهعنوان یک سرویس در فایل /etc/services تعریف شده است، فایروال UFW میداند که معنی این دستور چیست.
اما ما میتوانیم بهجای درج نام سرویس، بهصورت دقیق به شماره پورت اشاره کنیم. برای مثال، دستور زیر دقیقا مشابه دستور بالا عمل میکند:
sudo ufw allow 22
اگر دیمون SSH خود را طوری پیکربندی کردهاید که از یک پورت متفاوت استفاده کند، باید دقیقا به همان پورت اشاره کنید. برای مثال، اگر سرور SSH شما دادههای پورت 2222 را در نظر میگیرد، باید دستوری مشابه زیر بنویسید تا ارتباطات روی این پورت را مجاز اعلام کنید:
sudo ufw allow 2222
اکنون که فایروال شما بهگونهای پیکربندی شده است که ارتباطات SSH را مجاز میداند، میتوانید آن را فعال کنید.
گام چهارم: فعالسازی UFW
برای فعال کردن UFW، از دستور زیر استفاده کنید:
sudo ufw enable
با اجرای این دستور یک هشدار دریافت میکنید که ممکن است ارتباطات SSH فعلی دچار اختلال شود. از آنجایی که شما قبلا تعیین کردهاید که ارتباطات SSH مجاز به برقراری ارتباط هستند، بنابراین نباید مشکلی بهوجود آید. با تایپ y هشدار را تایید و سپس ENTER را تایپ کنید تا دستور اجرا شود.
فایروال در حال حاضر فعال شده است. دستور «sudo ufw status verbose» را اجرا کنید تا قوانینی که تعیین کردهاید نمایش داده شود. از اینجا به بعد، میتوانید جزئیات بیشتری را در خصوص نحوه استفاده از UFW ببینید که شامل اجازه دادن یا رد کردن انواع مختلفی از ارتباطات میشود.
گام پنجم: اجازه دادن به سایر ارتباطات
در این مرحله از فرایند راه اندازی فایروال با UFW، شما باید به تمام ارتباطاتی که سرور شما باید به آنها پاسخ بدهد، اجازه برقراری بدهید. ارتباطاتی که این اجازه را به آنها میدهید مستقیما به نیازهای شما بستگی دارد. در زیر میتوانید نحوه نوشتن قوانینی که اجازه میدهد ارتباطات مبتنیبر یک نام سرویس یا شماره پورت برقرار شود را ببینید. قبلا با نحوه نوشتن دستوری که ارتباطات SSH ورودی روی پورت 22 را مجاز اعلام میکرد، آشنا شدیم.
برای اجازه دادن به ارتباطات HTTP روی پورت 80 که وب سرورهای رمزگذارینشده از آن استفاده میکنند از دستور «sudo ufw allow http» یا «sudo ufw allow 80» استفاده کنید.
برای اجازه دادن به ارتباطات HTTPS روی پورت 443 که وب سرورهای رمزگذاریشده از آن استفاده میکنند، از دستور «sudo ufw allow https» یا «sudo ufw allow 443» استفاده کنید.
برای اجازه دادن به سایر ارتباطات، روشهای مختلف دیگری نیز وجود دارد که در آنها نیازی به اشاره به شماره پورت یا نام سرویس نیست.
مشخص کردن دامنه پورتها
شما میتوانید دامنهای از پورتها را با فایروال UFW مشخص کنید. برخی از اپلیکیشنها بهجای یک پورت، از چندین پورت استفاده میکنند. برای مثال، برای اینکه به ارتباطات X11 که از پورتهای 6000 تا 6007 استفاده میکند اجازه برقراری بدهید، میتوانید از دستورات زیر استفاده کنید:
sudo ufw allow 6000:6007/tcp sudo ufw allow 6000:6007/udp
وقتی دامنه پورتها را در UFW مشخص کردید، باید پروتکل tcp یا udp که قوانین روی آنها اعمال میشود را تعیین کنید. بهایندلیل قبلا به موضوع اشاره نکردیم چون وقتی نوع پروتکل را مشخص نکنید، بهصورت خودکار به هر دو پروتکل اجازه داده میشود که در اکثر اوقات مناسب است.
آیپی آدرسهای مشخص
وقتی با UFW کار میکنید، این امکان را دارید که آیپی آدرسهای مشخصی را تعیین کنید. برای مثال، اگر میخواهید به ارتباطات یک آدرس IP خاص مانند آدرس آیپی کار یا خانه «203.0.113.4» اجازه بدهید تا به پورت 22 (SSH) متصل شود، از دستور زیر استفاده کنید:
sudo ufw allow from 203.0.113.4 to any port 22
سابنتها
اگر میخواهید به یک سابنت (Subnet) از آدرسهای آیپی اجازه برقراری اتصال را بدهید، میتوانید از دستور CIDR برای مشخص کردن نت مسک (Netmask) استفاده کنید. برای مثال، اگر میخواهید تمام آدرسهای آیپی در دامنه 203.0.113.1 تا 203.0.113.254 اجازه برقراری اتصال را بدهید، میتوانید از دستور زیر استفاده کنید:
sudo ufw allow from 203.0.113.0/24
همچنین، میتوانید پورت مقصد که سابنت «203.0.113.0/24» اجازه برقراری ارتباط با آن را دارد مشخص کنید. برای مثال، در دستور زیر پورت 22 (SSH) را بهعنوان مقصد مشخص کردیم:
sudo ufw allow from 203.0.113.0/24 to any port 22
ارتباطات به یک اینترفیس شبکه خاص
اگر میخواهید قوانین فایروال شما فقط بر روی یک اینترفیس شبکه خاص اعمال شود، میتوانید با اضافه کردن عبارت «allow in on» قبل از نام اینترفیس شبکه، این کار را انجام دهید. همچنین شما میتوانید قبل از ادامه کار، اینترفیسهای شبکه خودتان را ببینید. بهاینمنظور، کافیست از دستور زیر استفاده کنید:
ip addr Output Excerpt 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: enp0s4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .
قسمتی از خروجی که با یک کادر مستطیلی هایلایت شده در واقع نام اینترفیسهای شبکه را نشان میدهد. اینترفیسهای شبکه معمولا تحتعنوان eth0، ens1 یا enp3s2 نمایش داده میشود. بنابراین، اگر سرور شما از یک اینترفیس شبکه عمومی بهنام ens3 برخوردار باشد، با استفاده از دستور زیر شما میتوانید به ترافیک HTTP (پورت 80) اجازه بدهید با آن ارتباط برقرار کند:
sudo ufw allow in on ens3 to any port 80
با این کار، شما به سرور اجازه میدهید تا درخواستهای HTTP را از اینترنت عمومی قبول کند. همچنین اگر میخواهید سرور دیتابیس MySQL شما (پورت 3306) به ارتباطات روی یک اینترفیس شبکه خصوصی بهنام eth1 دسترسی داشته باشد، میتوانید از دستور زیر استفاده کنید:
sudo ufw allow in on eth1 to any port 3306
این دستور به سایر سرورهایی که روی شبکه خصوصی شما قرار گرفتهاند اجازه میدهد تا به دیتابیس MySQL شما متصل شوند.
گام ششم: نادیده گرفتن ارتباطات
اگر سیاست پیشفرض برای ارتباطات ورودی را تغییر نداده باشید، UFW بهگونهای پیکربندی شده تا تمام ارتباطات ورودی را نادیده بگیرد. این تنظیمات عموما پروسه ایجاد یک سیاست امن فایروال را که به تعیین قوانینی برای مجاز یا غیرمجاز دانستن پورتها و آدرسهای آیپی خاص نیاز دارد تسهیل میکند.
اما گاهی اوقات شما میخواهید ارتباطات خاصی را براساس آدرس IP منبع یا سابنت مسدود کنید. این اقدام معمولا بهدلیل حملاتی که از سمت یک منبع انجام میشود صورت میپذیرد. همچنین، شما ممکن است بخواهید همه ارتباطات ورودی را مجاز تعیین کنید (که البته توصیه نمیشود). به همین دلیل شما باید قوانین مربوط به نادیده گرفتن یا مسدودسازی ارتباطات را برای هر سرویس یا آدرس IP ایجاد کنید تا فقط ارتباطات ورودی موردنظرتان مجاز باشند.
برای مثال، برای نادیده گرفتن ارتباطات HTTP، شما میتوانید از دستور زیر استفاده کنید:
sudo ufw deny http
یا اگر میخواهید تمام ارتباطات مربوط به آیپی 203.0.113.4 را مسدود کنید، دستور زیر مناسب است:
sudo ufw deny from 203.0.113.4
اکنون اجازه بدهید که ببینیم چطور میتوانید این قوانین را حذف کنید.
گام هفتم: حذف قوانین
دانستن اینکه چطور میتوانید قوانین فایروال را حذف کنید، به اندازه ایجاد کردن آنها مهم است. برای مشخص کردن قوانینی که باید حذف شوند دو روش وجود دارد؛ با استفاده از شماره قانون یا اشاره دقیق به قانون (مشابه وقتی که آن قانون را ایجاد میکنید). ابتدا روش اول، یعنی حذف قانون براساس شماره قانون که روشی آسانتر است را توضیح میدهیم.
براساس شماره قانون
اگر از شماره قانون برای حذف قوانین فایروال خود استفاده میکنید، اولین کار این است که لیستی از قوانین فایروال داشته باشید. دستور «ufw status» دارای گزینهای است که اجازه میدهد قوانین با یک شماره منحصربهفرد نمایش داده شوند:
sudo ufw status numbered Numbered Output: Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere
برای مثال، اگر میخواهید قانون شماره 2 را حذف کنید که اجازه برقراری ارتباطات HTTP (پورت 80) را تعیین میکند، باید شماره آن را در دستور «ufw status» قید کنید:
sudo ufw delete 2
با اجرای این دستور یک پرامپت تاییدیه ظاهر شده و سپس قانون شماره 2 حذف میشود. توجه داشته باشید که اگر پشتیبانی از پروتکل IPv6 را فعال کرده باشید، ممکن است بخواهید قانون شماره 2 برای آدرسهای IPv6 را هم حذف کنید.
براساس اشاره دقیق به قانون
روش جایگزین برای حذف قانون با شماره، این است که دقیقا به قانونی که میخواهید آن را حذف کنید اشاره کنید. برای مثال، اگر میخواهید قانون allow http را حذف کنید، باید دستوری مانند زیر بنویسید:
sudo ufw delete allow http
شما همچنین میتوانید بهجای نام سرویس (HTTP) به شماره پورت آن (80) هم اشاره کنید:
sudo ufw delete allow 80
در این روش، بهطور همزمان قوانین IPv4 و IPv6 را حذف میکند.
گام هشتم: بررسی وضعیت و قوانین UFW
در هر زمانی که بخواهید میتوانید با دستور زیر وضعیت فایروال UFW خود را بررسی کنید:
sudo ufw status verbose
بنابراین، اگر برای مثال یک سرور مجازی ایران خریدهاید و فایروال UFW در آن غیرفعال بود (که معمولا بهصورت پیشفرض در سرورها غیرفعال است)، احتمالا خروجی مشابه زیر را میبینید:
Output Status: inactive
اگر فایروال UFW فعال باشد، خروجی نشان میدهد که فایروال فعال است و تمام قوانین موجود را لیست میکند. برای مثال، اگر فایروال طوری پیکربندی شده که ارتباطات SSH (پورت 22) از هر منبعی را مجاز بداند، خروجی احتمالا چیزی شبیه به زیر است:
Output Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6)
اگر میخواهید ببینید فایروال UFW سرور شما چگونه پیکربندی شده است، از دستور «status» استفاده کنید.
گام نهم: غیرفعالسازی یا ریست کردن UFW
اگر تصمیم گرفتید که دیگر از UFW استفاده نکنید، میتوانید با استفاده از دستور زیر آن را غیرفعال کنید:
sudo ufw disable
با اجرای این دستور تمام قوانینی که در فایروال UFW خود ایجاد کرده بودید غیرفعال میشود. شما میتوانید در هر زمانی که تمایل داشتید از دستور «sudo ufw enable» برای فعالسازی مجدد UFW استفاده کنید.
اگر در حال حاضر قوانین UFW را تعیین کردهاید اما میخواهید همه چیز را از اول تنظیم کنید، میتوانید از دستور ریست کمک بگیرید:
sudo ufw reset
با اجرای این دستور، UFW غیرفعال شده و تمامی قوانین قبلی حذف میشود. بهخاطر داشته باشید که اگر سیاستهای پیشفرض فایروال را تغییر داده باشید، به حالت پیشفرض اصلی خود بازمیگردند. بهاینترتیب، شما میتوانید از اول همه چیز را در فایروال UFW خود پیکربندی کنید.
جمعبندی
در این آموزش نحوه راه اندازی فایروال با UFW در سرور مجازی با سیستم عامل لینوکس اوبونتو 22.04 را توضیح دادیم و بررسی کردیم که چطور فایروال خود را بهگونهای پیکربندی کنید که اجازه برقراری ارتباطات SSH و HTTP را فراهم کند. تمام ارتباطات ورودی که سرور شما برای عملکرد مناسب به آنها نیاز دارد باید مجاز در نظر گرفته شود. درعینحال، ارتباطات غیرضروری نیز باید مسدود شود تا از عملکرد و امنیت سرور خود مطمئن باشید.