بلاگ/نحوه تنظیم یک فایروال با UFW
به‌روز شده

نحوه تنظیم یک فایروال با UFW

ابزار UFW یا به عبارتی «فایروال غیر پیچیده»، یک ابزار مدیریت قوانین فایل در Arch Linux، دبیان و اوبونتو محسوب می‌شود. این ابزار از طریق خط فرمان مورد استفاده قرار می‌گیرد و این درحالی است که رابط کاربری آن نیز در دسترس است. هدف از UFW ساده‌سازی تنظیمات فایروال برای کاربر است. نکته: در...

1399/07/063268 بازدید
نحوه تنظیم یک فایروال با UFW
ابزار UFW یا به عبارتی «فایروال غیر پیچیده»، یک ابزار مدیریت قوانین فایل در Arch Linux،  دبیان و اوبونتو محسوب می‌شود. این ابزار از طریق خط فرمان مورد استفاده قرار می‌گیرد و این درحالی است که رابط کاربری آن نیز در دسترس است. هدف از UFW ساده‌سازی تنظیمات فایروال برای کاربر است. ابزار UFW نکته: در صورتی که از داکر استفاده می‌کنید، این ابزار به صورت پیش‌فرض، مستقیماً iptables را دست‌کاری می‌کند. هر گونه قانونی که شما در UFW مشخص کنید، در کانتینرهای داکر عمل نخواهد کرد.

قبل از شروع به کار

۱) حتماً ابتدا مراحل تنظیم عنوان هاست و ساعت سیستم سرور خود را کامل کنید. ۲) اقدامات لازم در جهت تأمین ایمنی سرور، از جمله ایجاد یک کاربر استاندارد، امنیت دسترسی SSH و حذف سرویس‌های شبکه غیرضروری را انجام دهید. در این آموزش تنها فرمان‌های مربوط به توزیع‌های لینوکس Arch Linux، دبیان و اوبونتو ارائه شده‌اند. با این وجود، می‌توانید از فرمان‌های مرتبط در توزیع‌های لینوکس دیگر، مراحل را دنبال کنید. ۳) سیستم خود را بروزرسانی کنید. لینوکس Arch
php
sudo pacman -Syu
دبیان / اوبونتو
php
sudo apt-get update && sudo apt-get upgrade

نصب ابزار UFW

دبیان بخش سیستمی UFW را به صورت اتوماتیک راه‌اندازی می‌کند و همچنین آن را برای شروع کار در راه‌اندازی دوباره سیستم، تنظیم می‌کند. ولی این شرایط در Arch حکمفرما نیست. درنظر داشته باشید که منظور در اینجا، تنظیم قوانین فایروال توسط UFW نیست.  فعالسازی UFW با system یا upstart تنها باعث می‌شود که این سرویس در شروع به کار سیستم، اجرا گردد. قوانین موسوم به ruleset در UFW به صورت پیش‌فرض، خالی هستند و بنابراین، قانون خاصی را در فایروال اِعمال نمی‌کنند. در ادامه، نحوه انجام تغییرات در سری قوانین فایروال را با کمک این ابزار نشان می‌دهیم.

لینوکس Arch

نصب UFW
php
sudo pacman -S ufw
اجرا و فعالسازی بخش سیستمی UFW
php
sudo systemctl start ufwsudo systemctl enable ufw

دبیان / اوبونتو

نصب UFW
php
sudo apt-get install ufw

کاربرد ابزار UFW برای مدیریت قواعد فایروال

تنظیم قواعد پیش‌فرض

در بسیاری از سیستم‌ها، تنها چند پورت برای ارتباطات ورودی موردنیاز هستند و سایر پورت‌ها بسته می‌شوند. برای شروع کار با یک قاعده اساسی و آسان، می‌توان از فرمان ufw default برای تنظیم واکنش نسبت به ارتباطات ورودی و خروجی استفاده کرد. برای لغو تمام ارتباط‌های ورودی و مجوّز به تمام ارتباط‌های خروجی داریم:
php
sudo ufw default allow outgoingsudo ufw default deny incoming
همچنین فرمان ufw default امکان استفاده از پارامتر reject را نیز فراهم می‌کند. هشدار تنظیم یک قاعده ممنوعیت یا reject می‌تواند موجب قفل‌شدن سرور شما شود؛ مگر اینکه قواعد مجوّز واضحی در کنار آن تعریف شود. حتماً دقت کنید که مجوّز لازم برای SSH و سایر سرویس‌های حیاتی را تعریف کرده باشید.

اضافه‌کردن قواعد

قواعد را می‌تواند به دو شکل اضافه کرد؛ یکی با اشاره به شماره پورت و دیگری با استفاده از نام سرویس. به عنوان مثال، برای اجازه‌دادن به هر دو نوع ارتباط ورودی و خروجی در پورت شماره 22 برای SSH می‌توانید فرمان زیر را اجرا کنید.
php
sudo ufw allow ssh
همچنین می‌توانید فرمان زیر را نیز تایپ کنید.
php
sudo ufw allow 22
به همین ترتیب، برای ممانعت از ترافیک در یک پورت خاص مانند 111، تنها کافی است فرمان زیر را وارد کنید.
php
sudo ufw deny 111
برای تنظیم دقیق‌تر در قواعد فایروال، می‌تواند packet‌های داده را بر اساس TCP یا UDP مجوّز بدهید. به عنوان مثال برای packet های TCP در پورت 80 داریم:
php
sudo ufw allow 80/tcpsudo ufw allow http/tcp
برای مجوّز به packet های UDP در پورت 1725:
php
sudo ufw allow 1725/udp

قواعد پیشرفته

در کنار مجوّز یا ممنوعیت بر اساس پورت، ابزار UFW می‌تواند امکان این کار را بر اساس آدرس IP، ساب‌نت و یا ترکیبی از IP، ساب‌نت و پورت برای شما فراهم کند. برای مجوّز دادن به یک آدرس IP خاص داریم:
php
sudo ufw allow from 198.51.100.0
برای ساب‌نت:
php
sudo ufw allow from 198.51.100.0/24
برای ترکیب آدرس IP و پورت
php
sudo ufw allow from 198.51.100.0 to any port 22 proto tcp
proto tcp را می‌توانید بر حسب نیاز به proto udp تغییر دهید و همچنین در تمام موارد بالا، می‌توانید allow را با deny جایگزین کنید.

حذف قواعد

برای حذف یک قاعده، قبل از عبارت بکارگیری آن، از گزینه delete استفاده کنید. به عنوان نمونه، اگر دیگر نمی‌خواهید ترافیک HTTP داشته باشید، فرمان زیر را اجرا کنید.
php
sudo ufw delete allow 80
همچنین در حذف قواعد می‌توانید از نام سرویس نیز استفاده کنید.

ویرایش فایل‌های تنظیمات ابزار UFW

با اینکه امکان اضافه‌کردن قواعد ساده از طریق خط فرمان وجود دارد، ولی ممکن است گاهی  نیاز به اضافه یا حذف کردن برخی قواعد خاص یا پیشرفته داشته باشید. UFW قبل از اینکه قواعد را در ترمینال اجرا کند، یک فایل با نام before.rules راه‌اندازی می‌کند که اجازه استفاده از loopback، ping و DHCP را فراهم می‌نماید. برای تغییر در این قواعد باید فایل /etc/ufw/before.rules را ویرایش کنید. یک فایل before6.rules نیز در همین دایرکتوری برای IPv6 وجود دارد. همچنین فایل‌های after.rule و after6.rule برای اضافه‌کردن قواعد موردنیاز بعدی ابزار UFW در دسترس قرار دارند. یک فایل تنظیمات اضافی نیز در آدرس /etc/default/ufw واقع شده است. در اینجا، می‌توان IPv6 را غیرفعال کرد، قواعد پیش‌فرض را تنظیم نمود و همین‌طور UFW را برای مدیریت زنجیره‌های داخلی فایروال انتخاب کرد.

وضعیت UFW

شما می‌توانید در هر زمانی وضعیت ابزار UFW را با فرمان sudo ufw status بررسی کنید.  در نتیجه، لیستی از تمام قواعد و همین‌طور، وضعیت خاموش و روش بودن UFW برای شما نمایش داده خواهد شد.
php
Status: activeTo                         Action      From--                         ------      ----22                         ALLOW       Anywhere80/tcp                     ALLOW       Anywhere443                        ALLOW       Anywhere22 (v6)                    ALLOW       Anywhere (v6)80/tcp (v6)                ALLOW       Anywhere (v6)443 (v6)                   ALLOW       Anywhere (v6)

فعالسازی فایروال

پس از انتخاب قواعد موردنظر، ممکن است نتیجه فرمان ufw status با خروجی Status: inactive همراه باشد. برای فعال‌سازی ابزار UFW و اِعمال قوانین فایروال داریم:
php
sudo ufw enable
به همین ترتیب، برای غیرفعال‌کردن قوانین
php
sudo ufw disable
نکته: با غیرفعال‌سازی به این شیوه، هنوز هم سرویس UFW در شروع به کار سیستم اجرا و فعال خواهد شد.

ثبت‌وقایع یا Logging

می‌توانید ثبت‌وقایع را با فرمان زیر فعال کنید.
php
sudo ufw logging on
سطوح مختلف ثبت‌وقایع را می‌توان با قالب فرمان sudo ufw logging low|medium|high تنظیم کرد. low سطح پیش‌فرض خواهد بود. یک ورودی ثبت‌وقایع عادی شامل موارد زیر خواهد بود و در آدرس /var/logs/ufw قرار خواهد گرفت.
php
Sep 16 15:08:14 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=123.45.67.89 DST=987.65.43.21 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=8475 PROTO=TCP SPT=48247 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0
مقادیر اولیه، تاریخ، زمان و عنوان هاست سرور شما را در بر می‌گیرند. سایر مقادیر مهم به شرح زیر هستند. [UFW BLOCK]: این جایی است که توضیح رخداد قرار می‌گیرد. به عنوان نمونه در اینجا، یک ارتباط بلوکه شده است. IN: اگر این مقدار یک عدد داشته باشد، رخداد یک «ورودی» بوده است. OUT: اگر این مقدار یک عدد داشته باشد، رخداد یک «خروجی» بوده است. MAC: ترکیبی از آدرس‌های مک منبع و مقصد SRC: آدرس IP از packet منبع DST: آدرس IP از packet مقصد LEN: طول packet TTL: طول عمر packet. اینکه چقدر طول می‌کشد که قبل از رسیدن به مقصد، این بسته بین روترها جابجا شود تا اینکه به انقضا برسد. PROTO: پروتکل packet SPT: پورت منبع بسته DPT: پورت مقصد بسته WINDOW: ابعاد packet قابل‌دریافت برای فرستنده SYN URGP: نشان‌دهنده نیاز به فرآیند ارتباطی بین سرور و کلاینت موسوم به three-way handshake. عدد صفر به معنای عدم‌نیاز خواهد بود.