مقدمه
فایروال ساده و غیر پیچیده یا همان UFW (Uncomplicated Firewall) یک اینترفیس مدیریت فایروال ساده شده است که پیچیدگی تکنولوژیهای packet filtering سطح پایینتر مثل iptables و nftables را مخفی میکند. اگر میخواهید که شبکه خود را امن کنید و نمیدانید که از چه ابزاری استفاده کنید، احتمالا UFW گزینه مناسبی برای شما است.
در ادامه به شما آموزش میدهیم که چگونه با UFW یک فایروال در سرور Ubuntu 20.04 نصب کنید. با وان سنتر همراه باشید.
پیشنیازها
برای انجام مراحل نصب فایروال با UFW در سرور Ubuntu 20.04 به ابزار زیر نیاز دارید:
- یک سرور Ubuntu 20.04 با یک حساب کاربری sudo که کاربر روت نباشد. برای تهیه این پیشنیاز می توانید آموزش راهاندازی اولیه سرور با Ubuntu 20.04 را مطالعه نمایید.
UFW به صورت پیشفرض در Ubuntu نصب شده است. اگر به دلایلی نصب نشده بود می توانید با دستور sudo apt install ufw، آن را نصب کنید.
مرحله اول – استفاده از IPv6 با UFW (اختیاری)
این آموزش با IPv4 انجام میشود، اما با Ipv6 هم می تواند انجام شود البته تا وقتی که آن را فعال کرده باشید. اگر سرور Ubuntu شما IPv6 ار فعال کرده باشد، باید مطمئن شوید که UFW برای پشتیبانی از Ipv6 پیکربندی شده باشد. در این صورت UFW علاوه بر IPV4 قوانین فایروال را برای IPv6 هم مدیریت خواهد کرد. برای این کار، پیکربندی UFW را با nano یا ویرایشگر مورد علاقه خودتان باز کنید.
sudo nano /etc/default/ufw
سپس مطمئن شوید که ارزش IPv6 حتما yes باشد. باید چیزی به شکل زیر ببینید:
IPV6=yes
فایل را ذخیره کنید و ببندید. حالا، وقتی که UFW فعال شود، برای نوشتن قوانین فایروال هر دوی IPv4 و IPv6، پیکربندی خواهد شد. البته قبل از فعال کردن UFW باید مطمئن شوید که فایروال شما برای اجازه دادن به ورود از طریق SSH، پیکربندی شده باشد.
در ادامه به شما آموزش میدهیم که چگونه قوانین پیشفرض را تعیین کنید؛ با وان سنتر همراه باشد.
مرحله دوم – تعیین قوانین پیشفرض
اگر فایروال خود را تازه شروع کردهاید، باید بدانید که اولین قوانینی که باید تعریف کنید، قوانین پیشفرض شما است. این قوانین بر چگونگی مدیریت ترافیکی که با قوانین دیگر تطابق ندارند، نظارت میکنند. UFW به صورت پیشفرض به گونهای تنظیم شده تا به هیچ یک از اتصالات ورودی اجازه دسترسی ندهد و دسترسی تمام اتصالات خروجی را مجاز کند. این نشان میدهد که هر کس بخواهد به سرور شما دسترسی داشته باشد، نمیتواند وارد سرور شود. این در حالی است که هر نوع اپلیکیشن در داخل سرور میتواند به بیرون از سرور دسترسی داشته باشد.
حالا باید قوانین UFW خود را به حالت پیشفرض برگردانید تا بتوانید مراحل بعدی را انجام دهید. برای برای تعیین پیشفرضهای مورد استفاده UFW باید دستورهای زیر را وارد کنید:
sudo ufw default deny incoming
sudo ufw default allow outgoing
این دستورها، پیشفرضها را روی مسدود کردن اتصالات ورودی و مجاز کردن اتصالات خروجی تنظیم میکنند. احتمالا این پیشفرضها به تنهایی برای کامپیوتر شخصی کافی باشند. البته، معمولا لازم است که سرورها به درخواستهای ورودی کاربرهای خارجی پاسخ بدهند. در ادامه این موضوع را توضیح خواهیم داد؛ با وان سنتر همراه باشید.
مرحله سوم – مجاز کردن اتصالات SSH
اگر در این مقطع فایروال UFW خود را فعال کنید، تمام اتصالات ورودی را مسدود می کند. با این اوصاف اگر میخواهید سرور به چنین درخواستهایی پاسخ دهد، باید قوانینی ایجاد کنید که به اتصالات ورودی مجاز مثل SSH و HTTP اجازه دسترسی داده شود. اگر از سرور ابری استفاده میکنید، باید به اتصالات ورودی SSH اجازه دسترسی بدهید تا بتوانید به سرور خود متصل شده و آن را مدیریت کنید.
دستور زیر را وارد کنید تا سرور شما برای دادن اجازه دسترسی به اتصالات SSH، پیکربندی شود:
sudo ufw allow ssh
این دستور قوانین فایروالی را ایجاد میکند که به همه اتصالات در پورت ۲۲ اجازه دسترسی میدهد؛ SSH daemon به صورت پیشفرض از پورت ۲۲ پیروی میکند. UFW میداند که پورت allow ssh به چه معنی است چون این پورت به عنوان یک سرویس در فایل etc/services/ ثبت شده است.
البته میتوانید با تعیین پورت به جای اسم سرویس، معادل قانون را بنویسید. برای مثال، دستور زیر مثل دستور بالایی عمل می کند:
sudo ufw allow 22
اگر SSH daemon خود را به گونهای پیکربندی کنید که از پورت دیگری استفاده کند، باید پورت مناسبی را تعیین کنید. برای مثال اگر سرور SSH از پورت ۲۲۲۲ پیروی میکند، از دستور زیر برای صدور اجازه دسترسی اتصالات از آن پورت، استفاده کنید:
sudo ufw allow 2222
حالا که فایروال شما برای اجازه دادن به اتصالات ورودی SSH پیکربندی شده، میتوانید آن را فعال کنید. در ادامه روش فعال کردن UFW را به شما نشان میدهیم؛ با وان سنتر همراه باشید.
مرحله چهارم – فعال کردن UFW
برای فعال کردن UFW از دستور زیر استفاده کنید:
sudo ufw enable
در ادامه به شما هشدار داده میشود که این دستور ممکن است باعث قطع شدن اتصالات موجود SSH شود. شما در مرحله قبل یک قانون فایروال تعیین کردهاید که به اتصالات SSH اجازه دسترسی میدهد؛ بنابراین برای ادامه مشکلی نخواهید داشت. در جواب هشداری که آمده، yes بنویسد و ENTER را بزنید.
حالا فایروال فعال شده است. دستور sudo ufw status verbose را اجرا کنید تا قوانین تعیین شده را ببینید. در مراحل بعدی این مطلب آموزشی جزئیات استفاده از UFW، مثل دادن یا ندادن اجازه دسترسی به اتصالات مختلف را توضیح خواهیم داد. با وان سنتر همراه باشید.
مرحله پنجم – دادن اجازه دسترسی به اتصالات دیگر
در این مقطع شما باید به تمام اتصالات دیگری که سرور شما باید به آنها پاسخ دهد، اجازه دسترسی بدهید. اتصالاتی که باید به آنها اجازه دسترسی بدهید بستگی به نیازهای خاص شما دارد. خوشبختانه میدانید که چگونه قوانینی بنویسید که بر اساس اسم سرویس یا پورت اجازه دسترسی به اتصالات بدهد. این کار را در مرحله سوم برای اتصالات SSH در پورت ۲۲ انجام دادید. شما میتوانید کارهای زیر را هم انجام دهید:
- اجازه دسترسیHTTP به پورت ۸۰ که وب سرورهای رمزگذاری نشده از آن استفاده میکنند، با دستور sudo ufw allow http یا sudo ufw allow 80
- اجازه دسترسی HTTPS به پورت ۴۴۳ که وب سرورهای رمزگذاری شده از آن استفاده میکنند، با دستور sudo ufw allow https یا sudo ufw allow 443
به غیر از تعیین یک پورت یا سرویس شناخته شده، راههای متعدد دیگری برای دادن اجازه دسترسی به اتصالات دیگر وجود دارد.
محدوده پورت تعیین شده
شما میتوانید با UFW محدوده پورت را تعیین کنید. بعضی از اپلیکیشنها به جای یک پورت از چندین پورت استفاده میکنند.
مثلا برای دادن اجازه دسترسی به اتصالات X11 که از پورتهای ۶۰۰۰-۶۰۰۷ استفاده می کند، دستورهای زیر را وارد کنید:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
موقع تعیین محدوده پورت با UFW، باید پروتکلی (tcp یا udp) که قوانین طبق آن اجرا شوند را تعیین کنید. قبلا به این موضوع اشاره نکردیم چون اگر پروتکل را تعیین نکنید، دستور به صورت اتوماتیک به هر دو پروتکل اجازه اجرا میدهد؛ در اکثر مواقع انجام این کار ایرادی ندارد.
آدرس IP تعیین شده
در زمان کار کردن با UFW باید آدرسهای IP را هم تعیین کنید. مثلا اگر بخواهید به یک آدرس IP خاص مثل یک IP خانگی یا کاری با آدرس ۲۰۳.۰.۱۱۳.۴ اجازه دسترسی بدهید، باید در دستور from را قبل از آدرس IP ذکر کنید:
sudo ufw allow from 203.0.113.4
همچنین میتوانید یک پورت مشخص که آدرس IP اجازه وصل شدن به آن را دارد، تعیین کنید. برای این کار باید قبل از عدد پورت، to any port را اضافه کنید. مثلا اگر میخواهید ۲۰۳.۰.۱۱۳.۴ به پورت ۲۲ (SSH) وصل شود، باید از دستور زیر استفاده کنید:
sudo ufw allow from 203.0.113.4 to any port 22
سابنتها
اگر میخواهید به سابنت آدرسهای IP اجازه دسترسی بدهید، میتوانید از نشانهگذاری CIDR برای تعیین یک سابنت مسک (Subnetmask) استفاده کنید. مثلا اگر میخواهید به آدرسهای IP در محدوده ۲۰۳.۰.۱۱۳.۱ تا ۲۰۳.۰.۱۱۳.۲۵۴ اجازه دسترسی بدهید، میتوانید از دستور زیر استفاده کنید:
sudo ufw allow from 203.0.113.0/24
به همین ترتیب میتوانید پورت مقصدی را که سابنت ۲۰۳.۰.۱۱۳.۰/۲۴ به آن اجازه دسترسی دارد، مشخص کنید. باز هم از پورت ۲۲ (SSH) برای مثال استفاده میکنیم:
sudo ufw allow from 203.0.113.0/24 to any port 22
اتصالات به یک اینترفیس شبکه تعیین شده
اگر میخواهید یک قانون فایروال ایجاد کنید که فقط روی یک اینترفیس شبکه خاص اعمال شود، میتوانید این کار را با ذکر allow in on قبل از اسم اینترفیس شبکه انجام دهید.
باید قبل از ادامه کار اینترفیسهای شبکه خود را جست و جو کنید. برای این کار از دستور زیر استفاده کنید:
ip addr
۲: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
۳: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
قسمت etch0 و eth1 در واقع اسم اینترفیسهای شبکه است و معمولا اسمهایی مثل eth0 یا enp3s2 دارند.
بنابراین اگر سرور شما یک اینترفیس شبکه عمومی به اسم eth0 داشته باشد، میتوانید با دستور زیر به ترافیک HTTP (پورت ۸۰) اجازه دسترسی به این اینترفیس بدهید:
sudo ufw allow in on eth0 to any port 80
انجام اینکار باعث میشود که سرور شما درخواستهای HTTP از اینترنت عمومی را دریافت کند. اگر هم میخواهید دیتابیس MySQL سرور شما (پورت ۳۳۰۶)، برای مثال به درخواست اتصالات در اینترفیس شبکه شخصی eth1 پاسخ دهد، میتوانید از دستور زیر استفاده کنید:
sudo ufw allow in on eth1 to any port 3306
این دستور به سرورهای دیگر در شبکه شخصی شما اجازه دسترسی به دیتابیس MySQL شما میدهد.
با وان سنتر همراه باشید تا در ادامه با نحوه مسدود کردن اتصالات آشنا شوید.
مرحله ششم – مسدود کردن دسترسی اتصالات
اگر قانون پیشفرض برای اتصالات ورودی را تغییر ندادهاید، UFW به گونهای پیکربندی شده که به هیچ یک از اتصالات ورودی اجازه دسترسی ندهد. به طور کلی این حالت با درخواست ایجاد قوانینی که به پورتها و آدرسهای IP تعیین شده اجازه دسترسی میدهد، پروسه ایجاد یک قانون فایروال امن را سادهتر میکند.
البته گاهی اوقات شما تصمیم میگیرید که دسترسی بعضی از اتصالات را بر اساس آدرس IP سورس یا سابنت، مسدود کنید. دلیل این کار میتواند این باشد که احتمال حمله به سرور شما از طریق بعضی اتصالات وجود دارد. همچنین ممکن است بخواهید که قانون ورودی پیشفرض خود را به گونهای تغییر دهید که به اجازه دسترسی به اتصالات داده شود (توصیه نمیشود)؛ در این صورت باید برای مسدود کردن دسترسی اتصالات هر سرویس یا آدرس IP که نمیخواهید اجازه دسترسی داشته باشند هم قوانینی ایجاد کنید.
برای نوشتن قوانین مسدود کردن دسترسی میتوانید از دستوراتی که در مرحله قبل به شما گفتیم اضافه کنید؛ البته در آنها به جای allow باید deny را بنویسید.
مثلا برای مسدود کردن دسترسی اتصالات HTTP میتوانید از دستور زیر استفاده کنید:
sudo ufw deny http
یا اگر میخواهید دسترسی تمام اتصالات ۲۰۳.۰.۱۱۳.۴ را مسدود کنید، میتوانید با دستور زیر این کار را انجام دهید:
sudo ufw deny from 203.0.113.4
مسدود کردن دسترسی اتصالات به همین شکل است که توضیح دادیم. در ادامه روش حذف کردن قوانین را به شما آموزش میدهیم؛ با وان سنتر همراه باشید.
مرحله هفتم – حذف کردن قوانین
یادگیری حذف قوانین فایروال به اندازه ایجاد آنها اهمیت دارد. دو راه متفاوت برای مشخص کردن قوانینی که میخواهید حذف کنید، وجود دارد: شماره قانون یا خود قانون (مانند روش مشخص کردن قوانینی که ایجاد کردید). حالا با روش حذف قوانین بر اساس شماره قانون شروع می کنیم چون آسانتر از روش دیگر است.
حذف بر اساس شماره قانون
در استفاده از این روش باید لیست قوانین فایروال خود را بیاورید. دستور استاتوس UFW گزینهای برای نشان دادن شماره هر قانون در کنار آن را دارد که به شکل زیر است:
sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ ۱] ۲۲ ALLOW IN 15.15.15.0/24
[ ۲] ۸۰ ALLOW IN Anywhere
اگر بخواهید که قانون ۲ که به اتصالات پورت ۸۰ (HTTP) اجازه دسترسی میدهد را حذف کنید، میتوانید در دستور حذف UFW آن را به صورت زیر مشخص کنید:
sudo ufw delete 2
بعد از اجرای این دستور پیغامی برای تایید آن نمایش داده میشود که بعد از تایید، قانون ۲ که به اتصالات پورت ۸۰ (HTTP) اجازه دسترسی میدهد، حذف میشود. توجه داشته باشد که اگر IPv6 شما فعال است، باید قانون IPv6 مشابه را هم حذف کنید.
حذف بر اساس خود قانون
روش دیگر حذف قوانین بر اساس خود قانون است. مثلا اگر میخواهید قانون allow http را حذف کنید، میتوانید دستور را به شکل زیر بنویسید:
sudo ufw delete allow http
همچنین میتوانید به جای اسم سرویس از پورت آن (allow 80) در دستور استفاده کنید:
sudo ufw delete allow 80
با این روش قانون IPv4 و IPv6 هر دو در صورتی که وجود داشته باشند، حذف خواهند شد.
حالا که با روش حذف قوانین را یاد گرفتید، با وان سنتر همراه باشید تا در ادامه با نحوه چک کردن استاتوس UFW و قوانین آشنا شوید.
مرحله هشتم – چک کردن استاتوس UFW و قوانین
در هر زمان که بخواهید میتوانید با دستور زیر استاتوس UFW را چک کنید:
sudo ufw status verbose
اگر UFW غیرفعال باشد، که البته به صورت پیشفرض اینگونه است، بعد از وارد کردن دستور بالا، چیزی به شکل زیر خواهید دید:
Status: inactive
اگر UFW فعال باشد، که در مرحله سوم این مطلب آموزشی این کار را انجام دادهاید، خروجی دستور به شما میگوید که UFW فعال است و تمام قوانین تعیین شده نمایش داده میشود. مثلا اگر فایروال به گونهای تنظیم شده باشد که به اتصالات SSH (پورت ۲۲) از هر جایی اجازه دسترسی بدهد، خروجی احتمالا به شکل زیر خواهد بود:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
۲۲/tcp ALLOW IN Anywhere
اگر میخواهید ببینید که UFW چگونه فایروال را پیکربندی کرده، از دستور status استفاده کنید.
در آخرین مرحله این مطلب آموزشی نحوه غیرفعال یا ریست کردن UFW را به شما آموزش خواهیم داد. با وان سنتر همراه باشید.
مرحله نهم – غیرفعال یا ریست کردن UFW (اختیاری)
اگر نخواهید که از UFW استفاده کنید، میتوانید آن را با دستور زیر غیرفعال کنید:
sudo ufw disable
با اجرای این دستور تمام قوانینی که با UFW تعیین کردهاید هم غیرفعال میشوند. شما هر وقت که بخواهید میتوانید دستور sudo ufw enable را اجرا کنید تا UFW دوباره فعال شود.
اگر قوانین UFW را پیکربندی کردهاید اما میخواهید از اول شروع کنید، میتوانید از دستور ریست استفاده کنید:
sudo ufw reset
این دستور UFW را غیرفعال و تمام قوانینی که تعریف کردهاید را حذف میکند. یادتان باشد که در هر زمان که قوانین پیشفرض را به دلخواه تغییر دهید، به تنظیمات اصلی برنمیگردند. با این دستور میتوانید دوباره قوانین دلخواه خود را تعریف کنید.
حالا با انجام این ۹ مرحله، فایروال شما برای اجازه دسترسی (حداقل) اتصالات SSH، پیکربندی شده است. حتما به اتصالات ورودی دیگری که سرور شما نیاز دارد، اجازه دسترسی بدهید. در عین حال اتصالات غیر ضروری دیگر را محدود کنید تا سرور شما امن باشد و به خوبی عمل کند.